1. 전송과 교환
- 전송(Transmission): 물리적으로 직접 연결된 두 시스템 간 1:1 데이터 전달
- 교환(Switching): 전달 경로가 둘 이상일 때 어떤 포트로 데이터를 보낼지 선택 (라우터에서 수행)
2. 데이터 전송 방식
(1) 점대점 (P2P, Point to Point) - 1:1
- 하나의 호스트가 다른 호스트와 1:1로 연결되는 방식
- 통신하는 두 호스트가 직접 연결되거나(1-hop), 다른 호스트의 중개과정을 거쳐 간접 연결(multi-hop) 할 수 있음.
- edge가 많으면 다른 호스트와 공유하는 부분이 적어 대역폭 성능 유리, but 비용 많이 들음
- edge가 적으면 네트워크의 특정 영역을 많은 노드가 공유하게 되어 네트워크 혼잡도 증가
[점대점 연결 방식]

(a) 스타형
- 하나의 중개 호스트 주위로 여러 호스트가 1:1로 연결하는 형태
- 호스트는 반드시 중앙의 중개 호스트를 거쳐 데이터를 전송한다. 중앙의 호스트만 라우팅 기능을 수행한다.
- 중앙호스트가 단일실패지점이 된다.
(b) 링형
- 호스트 연결이 순환 고리 구조이다.
- 물리적으로는 점대점연결이지만, 논리적으로는 브로드캐스팅방식으로 동작한다.
- 토큰(전송권한 제어패킷)을 통해 충돌을 방지한다.
- 모든 호스트가 단일실패지점이다.
(c) 완전형
- 모든 호스트가 fully connected된 구조이다.
- 호스트가 n개일 때, 회선 수는 n(n-1)/2개이다. (O(n^2)의 복잡도)
(d) 불규칙형
- 그 외 특정 패턴으로 분류할 수 없는 구조로 임의 연결된 것을 불규칙형이라고 한다.
(2) 브로드캐스팅 - 1:ALL
- 한 호스트가 전송한 데이터가 모든 네트워크에 연결된 호스트에 전달됨.
- 메시지를 수신한 호스트는 헤더에 포함된 목적지 정보를 확인한 후, 자신이 목적지면 데이터를 수신하고 그렇지 않으면 버림.
- 소규모 네트워크 LAN에서 주로 사용 (교환 호스트 불필요)

(a) 버스형: 물리적 브로드캐스팅
- 모든 호스트가 하나의 물리적 전송 매체를 공유함.
- 충돌: 두 개 이상의 호스트에서 데이터를 동시에 전송할 때 발생 → 신호가 중첩되어 해석 불가
- [충돌해결방법]
- (1) 사전제어방식: 스케쥴링을 통해 충돌 가능성 사전 차단
- 1) 호스트별로 전송 시점 지정
- 2) 토큰으로 전송권한을 순환적 제어
- (2) 사후제어방식: 충돌을 허용하고, 충돌 발생시 충돌 알고리즘에 따라 해결 (이더넷에서 설명)
- (1) 사전제어방식: 스케쥴링을 통해 충돌 가능성 사전 차단
(b) 링형: 논리적으로 유니캐스팅을 반복함으로써 브로트캐스팅 구현
- 토큰을 이용해 전송권한을 가진 호스트만 전송가능 → 충돌이 일어나지 않음.
(3) 멀티포인트 - 1:N
- 한 개의 호스트가 한번의 전송으로 N개의 호스트로 전송
- 하나의 공유된 전송회선에 여러 호스트를 접속할 수 있다.
[연결방식에 따른 분류]
- 유니포인트: 수신호스트 하나와 연결
- 멀티포인트: 다수의 수신호스트와 연결
[전송방식에 따른 분류]
- 유니캐스팅: 하나의 수신호스트에만 데이터 전송
- 멀티캐스팅: 다수의 수신호스트에 데이터 전송
- 브로드캐스팅: 네트워크에 연결된 모든 호스트에 전송
* 멀티캐스팅 시 전송 방법
- 네트워크에서 멀티캐스팅 지원시 sender는 한번만 보내고 갈림길에서 각각 복사되어 보내진다. (멀티포인트 멀티캐스팅)
- 네트워크에서 멀티캐스팅을 지원하지 않으면 1:1 통신을 N번 반복 (멀티포인트 유니캐스팅)
3. 이더넷 (Ethernet)
- LAN에서 가장 많이 활용되는 기술 규격(IEEE 802.3 표준: 유선랜)
- 물리계층과 데이터링크 계층의 프로토콜을 정의
- CSMA/CD(Carrier Sense Muliple Access/Collision Detection) 프로토콜을 사용.
- Carrier Sense: 유선매체 신호감지, Multiple Access: 제한된 자원을 서로 쓰려고 하는것, Collision Detection: 충돌감지
- [CSMA/CD 동작방식]
- <Step 1> Carrier Sensing: 전송회선이 IDLE(유휴모드, 아무도 데이터 전송을 하고 있지 않는 상태)인지 확인
- IF NO(전송회선이 BUSY): IDLE이 될 때까지 대기
- IF YES(전송회선이 IDLE): <Step 2>로 이동
- <Step 2> 데이터 전송 (+ 충돌 발생 확인)
- Ethernet은 ACK를 사용하지 않고, 전송중에 충돌 감지: 충돌 발생시 collision signal을 감지함
- 충돌 없이 데이터 전송 완료하면 전송 절차 종료
- 충돌 발생 시 데이터 전송 중단 → 전송 jam signal을 브로드캐스팅 → 랜덤 신호 대기 후 <Step 1>으로 Return
- * jam signal: 현재 진행 중인 전송을 모두 무효화하는 신호. 다른 호스트에게 충돌 발생을 알리고 전송하지 말도록 알림.
4. 오류 제어
(1) 오류 유형
- 프레임 변형: 데이터가 손상됨 → NACK 또는 Timeout으로 재전송 (리시버가 실패를 알림)
- 프레임 분실: 전송된 데이터가 도착하지 않음 → Timeout 후 재전송 (나 받은적 없어)
- 라우터의 버퍼오버플로우 때문에 자주 발생
(2) 기본 메커니즘
- ACK / NACK: 수신 측의 긍정/부정 응답
- Timeout: 일정 시간 내 ACK 없으면 재전송
- 순서 번호(Sequence Number): 중복 프레임 구분용
- ACK 신호가 분실될 경우 중복으로 보낼 수 있다.
5. ARQ (Automatic Repeat reQuest, 송신측에 재전송 요청)
(1) Stop and Wait(SW) ARQ
- 한 번에 프레임 1개만 보내고, ACK/NACK 또는 타임아웃을 기다린 뒤 다음 프레임을 보냄.
- 매우 단순하지만 대기시간이 많아 비효율적이다.
- [동작절차]
- 송신자: 프레임 1개 전송 후 ACK/NACK/Timeout 대기
- 수신자: 오류 검사 → ACK(정상) / NACK(오류) 회신
- 송신자: ACK면 다음 프레임, NACK 또는 Timeout이면 재전송
(2) Go Back N(GBN) ARQ
- SW ARQ는 ACK를 기다리기 때문에 느리다. → 슬라이딩 윈도우로 여러 프레임을 연속 전송하여 속도를 개선 한다.
[슬라이딩 윈도우 기반 프로토콜]

- 슬라이딩 윈도우: ACK 없이 전송 가능한 최대 프레임 수를 의미한다.
- ACK 수신시에만 슬라이딩 윈도우를 수신한 ACK 수만큼 오른쪽으로 이동시킬 수 있다.
- 위 그림은 0, 1 두 개의 ACK를 받았을 때 7, 0 두 개의 프레임을 보낼 수 있게 된다.
[누적 ACK 방식]

- ACK에는 다음에 기대하는 순서 번호를 보냄(누적 ACK). 예: 1번 수신 후 ACK-2 전송 → “2를 기다림” 뜻. 일부 ACK가 유실되어도 이후 큰 번호의 ACK가 도착하면 그 이전 프레임들은 정상 수신으로 간주.
- 순서 어긋난 프레임은 폐기. (누적 ACK의 단점: Receiver가 0, 1, 3을 수신하면 3을 버리고 ACK-2를 보낸다. 3이 버려짐)
- NACK 없이도 누적 ACK만으로 오류 위치를 암시(예: 수신한 3번 프레임에서 오류 발생시, ACK-3을 계속 전송).
[Timeout & 재전송]
- 송신자는 전송한 각 프레임에 타이머를 둠. 타이머 만료(해당 프레임 미승인) 시 오류가 난 프레임부터 윈도우 끝까지를 한꺼번에 재전송 → 그래서 이름이 Go-Back-N. 수신자는 순차 수신만 허용.

[예제]


[ACK의 역할 2가지]
(1) 긍정 응답의 기능
(2) 너 하나 더 보내도 돼 (전송 허가권)
[흐름제어]
- 전송 속도가 너무 빠르면 수신호스트 내부 버퍼 오버플로우가 발생해 프레임이 분실된다.
- 수신호스트가 송신호스트의 전송시점을 제어하는 방식으로 이루어짐
- 슬라이딩 윈도우 크기로 결정 (수신자가 ACK를 보내줘야 더 보낼 수 있다.)
6. 프레임
- 데이터링크 계층에서의 전송 데이터를 프레임이라고 한다.
- 전송 프레임은 [header + payload + trailer] 구조로 이루어진다.
(1) 문자 프레임
- 8bit(1byte) 단위의 ASCII 코드 크기의 고정크기로 동작한다. 전송 데이터 내용이 ASCII 코드로 되어있다.
- 프레임의 시작에 [DLE, STX], 끝에 [DLE, ETX]를 써서 시작과 끝을 명시한다.
- 실제 전송 데이터(payload)에 [DLE STX] 또는 [DLE ETX]를 쓰고 싶으면 제어문자 DLE를 한 번 더 써서 [DLE DLE STX] 또는 [DLE DLE ETX]로 쓴다. 이를 문자 스터핑이라고 한다.

(2) 비트 프레임
- \(8 \times N\)의 고정 크기 비트가 아니라 35bit처럼 안떨어지게도 전송할 수 있다. (좀 더 효율적)
- 시작과 끝을 구분하는 flag 비트패턴 [01111110]을 사용한다. (1이 6개)
- 마찬가지로 payload에 1이 5번 연속해서 발생하면 강제로 뒤에 0을 추가한다.

7. 오류 검출 방식
- 컴퓨터 네트워크에서는 일반적으로 [오류검출 → 재전송] 방식의 BEC(역방향 오류 복구) 기법을 사용
- 수신자가 오류 검출/탐지할 수 있도록 송신자는 오류검출코드를 데이터와 함께 전송
- 오류검출코드는 패리티비트, 블록검사, 다항코드(CRC) 등을 이용해 생성할 수 있다.
(1) 패리티 비트 (Parity Bit)

- 1byte(8bit) 프레임 구조를 [7bit ASCII코드 + 1bit Parity Bit]로 구성
- 목적: 한 바이트내의 1의 개수가 짝수인지 홀수인지 판단해 홀수개의 bit flip을 탐지
- 짝수 패리티: 한 바이트 내의 1의 개수를 짝수로 만듦
- 홀수 패리티: 한 바이트 내의 1의 개수를 홀수로 만듦
- 한계: (1) 짝수 개의 bit flip 발생시 탐지 불가 (2) 어느 비트가 flip되었는지 알 수 없어 수정 불가능
(2) 블록 검사 (Block Check)

- 데이터를 행렬로 구성해서 행, 열마다 패리티비트 추가
- 장점: (1) 짝수개 오류 탐지 가능, (2) 행렬 교차점으로 대략적 위치 추정 가능
- 단점: (1) 패리티비트 오버헤드 증가, (2) 사각형의 꼭짓점 형태로 에러 발생시 검출 불가능
(3) 순환 중복 검사 (CRC, Cyclic Redundancy Check)
- 장점: 다수의 오류가 집중적으로 발생하는 burst error 형태에 강하다.
- 한계: 어디가 잘못되었는지 알 수 없어 수정은 불가하다.(검출 전용), 이론적 100% 에러 검출은 아니다.
* 생성 다항식
- 다항코드 100101 = \(x^5 + x^2 + 1 (1x^5 + 0x^4 + 0x^3 + 1x^2 + 0x^1 + 1x^0\)을 의미함
* 이진 다항식 나눗셈
- 이진 다항식의 나눗셈에서 뺄셈은 XOR로 해야한다.

[동작방식]
- n+1개의 비트로 구성된 \(G(x)\)를 생성다항식으로 사용
- [Sender] 전송데이터: m비트로 구성된 프레임 \(M(x)\)를 전송하려할 때
- \(M(x)\) 뒤에 n개의 이진수 0을 덧붙여 \(M(x)'\)을 생성
- \(M(x)'\)을 \(G(x)\)로 나눈 나머지(=n비트 길이의 체크섬)를 \(M(x)'\)의 마지막 n개 비트에 덮어쓰기
- \(M(x)'\)을 전송
- [Receiver]
- 수신한 프레임 전체를 \(G(x)\)로 나누고, 나머지를 계산
- IF (나머지 == 0) → 전송오류가 없음.
- IF (나머지 != 0) → 전송 오류가 있음.
[실제 예제]
- [Sender]
- 생성다항식 \(G(x)=x^5 + x^2 + 1 = 100101\)
- 전송 데이터: 101101001
- 체크섬: 계산을 통해 나온 나머지: 00010
- 송신데이터: 10110100100010
- [Receiver]
- 송신데이터: 10110100100010
- 송신데이터를 \(G(x)\)로 나눈 나머지 == 0 → 수신데이터에 오류가 없다!

8. 오류율 계산
- BER (Bit Error Rate): 한 개의 비트 전송시 오류가 발생할 확률
- PER (Packet Error Rate): 한 개의 패킷 전송시 오류가 발생할 확률
[PER - BER 관계식]
- 패킷을 구성하는 비트 수를 \(L\)이라 할 때 다음의 관계를 갖는다.
$$PER = 1 - (1-BER)^{L}$$
- \( (1-BER)^{L} \)은 모든 비트에서 오류가 발생하지 않을 확률이고, 이를 1에서 빼면 한 개의 비트라도 오류가 발생할 확률 즉, PER이 된다.
[한 개의 패킷을 오류 없이 전송하기 위한 최소 전송 횟수 구하기]
- 전송 성공률 = \(1-PER\)
- 기댓값:
$$E[패킷 한개를 오류없이 전송하기 위한 최소 전송 횟수] = \frac{1}{1-PER} = \frac{1}{(1-BER)^{L}}$$
'컴퓨터공학 > 네트워크' 카테고리의 다른 글
| [네트워크] 08. 데이터 링크 계층 (0) | 2025.10.21 |
|---|---|
| [네트워크] 07. MAC 계층 (0) | 2025.10.21 |
| [네트워크] 05. 네트워크 기술 (0) | 2025.10.19 |
| [네트워크] 04. VBox 가상 네트워킹 (0) | 2025.10.19 |
| [네트워크] 03. 리눅스, 네트워크 도구 활용 (0) | 2025.10.18 |