Reliable Networking (End to End)
- 무한한 흐름 x -> 패킷화
- 패킷 유실
- 패킷 순서 바뀜
- 패킷 변조
성능 향상
- Pipelining
- 연속된 대량의 작업이 순차성을 갖고 있으나 앞의 일이 종료하지 않고도 다음 일을 시작할 수 있는 병렬성을 가진 경우 성능 향상 기법
- Go-Back-N
- 최대 N개의 packet을 병렬적으로 처리
- 송신 측에서는 N개의 packet을 buffering (재전송하기 위해서)
- buffering의 의미: 수신이 확실하지 않은 packet에 대하여 재전송을 위하여 보관
- 수신 측에서는 순차적으로 잘 수신된 packet에 대하여 Ack를 송신하고 packet의 payload를 응용계층으로 올려보낸다.
- 송신 측에서는 buffer에 여유가 생기면 (Ack를 받아서) 그만큼 추가로 pipelining
- 수신 측에서 순서에 맞지 않는 패킷이 온 경우, 조용히 있거나, 잘 받은 packet에 대한 ack를 전송
- Go-Back-N에서의 재전송 정책
- 각 packet 전송 시에 packet을 위한 Timer 설정
- Ack를 받으면 Ack 해당 packet과 앞쪽 packet에 대한 Timer 소멸
- Timer 이벤트 발생 시 해당 packet부터 재전송
- 추가 재전송 정책
- k번째 packet에 대한 ack이 반복적으로 할 경우 (k+1)번째 packet의 유실을 함축 (3번 정도 k 패킷에 대한 ack이 오면 timer와 무관하게 k+1번째 packet부터 재전송)
- 장점
- 단순 (특히 수신 측)
- 간명하게 시스템의 상태가 추상화
- 단점
- Selective Repeat
- Go-Back-N의 단점 보완
- 수신 측에 버퍼
- 빠진 packet이 있을 경우 그 뒤쪽의 잘 도착한 packet들은 버퍼에 보관
- 빠진 packet이 추후 도착하면 버퍼에 저장소 이후 packet들까지 순차적으로 응용에 전달
- 장점
- 단점
| TCP | UDP |
|---|
| 신뢰성 제공 | 내용 유실 x | 내용 유실 o |
| 속도 | 고의적 지연이 존재 - 패킷 수신 순서 - 혼잡 제어 | 고의적 지연 x |
| 전송단위 | 바이트(Byte) send!=recv | 패킷(데이터그램) send() 함수 호출 단위 |
- TCP
- Reliable Network
- 내용 변조 탐지
- 혼잡 제어
- 패킷 유실 -> 혼잡 상황 -> 패킷 전송률 낮아짐 (현재 전송률 / 2)
- 패킷 전송 원활 (비유실) -> 비혼잡 상황 -> 패킷 전송률 높아짐 (현재 전송률 +C)
- AIMD (Additive Increase Multiplicative Decrease)
- MSS (Maximum Segment Size): Increase 단위 (1~4kB)
- Multiplicative Decrease
- 패킷 유실 시 Condition Window 크기를 절반으로 줄이기
- 패킷 유실이 네트워크 이상을 반영할 때는 CW = 1MSS로 대폭 줄이기
- 네트워크 이상과 단순 유실의 판단 근거
- 네트워크 이상 시에는 모든 전송 세그먼트가 동시 유실, Ack이 도착을 안하고 RTO가 Trigger (Slow Start, CW 증가가 너무 느림)
- 기존 CW=100인 경우, CW=50이 될 때까지는 Multiplicative Increase 수행
- 단순 유실 시에는 유실된 세그먼트 이후 보낸 다른 세그먼트의 Ack은 도착 (Fast Retraction, Fast Recovery)
- 패킷 유실 Ack 신호가 Timeout 내에 오지 않음
- Timeout은 너무 길거나(재송신 지연) 짧으면(false alarm 가능성) 안됨
- Retransmission Timeout (RTO) = max (RTT + 4 * Dev RTT, 1초)
- RTT 구하기: weighted moving average
- RTTN: Roundtrip Time의 N번째 측정값
- RTTN: N번째 sample 후 판단한 RTT 평균
- RTT1=RTT1
- RTTN=(1−α)RTTN−1+αRTTN (TCP에서 α는 0.125)
- RTTN=∑i=1N(1−α)N−iαRTTi+(1−α)NRTT1
- 흐름 제어
- 포트 (사서함) 개념 지원 (응용 구분)
- 헤더
- Src Pack # and Dest Pack #
- Seq # (Byte)
- Ack # (Byte)
- 헤더길이 and 맺고 끊음 and Recieve Window (수신 가능한 버퍼 크기)
- checksum and