🦊 UDP (User Datagram Protocol)
- IP에 최소 기능만 추가 : 다중화/역다중화, 오류 검사
- 최선형(best effort) 서비스의 UDP 세그먼트 : 손실, 순서에 어긋나게 응용 계층에 전달
- 비열결형 : UDP 송수신 측 간 열결을 위해 핸드세이크 x, UDP 세그먼트들은 서로 무관하게 독립적으로 다루어짐
- UDP 사용 : 스트리밍 멀티미디어 응용, DNS, SNMP, HTTP/3
- 신뢰적인 전송 : 애플리케이션 계층에서 신뢰성 추가 및 혼잡 제어
🥧 신뢰성 있는 데이터 전송의 원리
- rdt1.0, rdt2.0, rdt3.0 (이후 추가 게시글)
🌐 파이프라인 프로토콜(Pipelined Protocol)
- 송신자가 ACK 응답을 기다리지 않고 여러 패킷을 전송
- 순서번호의 범위는 증가하여 전송 중인 패킷은 유일한 순서번호를 가짐
- 송신 측과 수신 측이 패킷을 버퍼링해야 함
GBN(Go-Back-N)
- 송신자는 파이프라인에서 최대 N개의 ACK 없이 패킷 전송 허용
- 수신자는 누적된 ACK(cumulative ACK)만을 전송
- 송신자는 가장 오래된 ‘전송 되었지만 ACK 응답 없는 패킷’에 대한 타이머를 가짐
SR(Selective Repeat, 선택적 반복)
- 송신자는 파이프라인에서 최대 N개의 ACK 없이 패킷 전송 허용
- 수신자는 개별 패킷들에 대해 ACK 응답
- 송신자는 ‘전송 되었지만 ACK 응답 없는 패킷’들 각각에 대해 개별 타이머를 관리
🐺 TCP
TCP 구성 요소
- 순서번호
- 송신자의 세그먼트에서 첫 번째 바이트의 바이트 스트림 번호
- 시작 순서번호는 임의로 선택
- ACK 번호
- 상대방으로부터 기대하는 다음 바이트의 순서번호
- 누적 ACK
- 비순차 세그먼트 수신
- TCP에서 규칙을 제공하지 않고 개발자에 일임
🍗 TCP 왕복시간과 타임아웃
- TCP는 앞 절의 rdt처럼 손실된 세그먼트 발견을 위해 타임아웃/재전송 메커니즘 사용
- 타임아웃 주기
- 왕복시간(RTT)보다 커야 함
- 너무 짧은 타임아웃 : 불필요한 재전송 발생
- 너무 긴 타임아웃 : 세그먼트 손실에 대한 대응이 느려짐
왕복시간 예측
- SampleRTT 측정
- SampleRTT 값은 네트워크 부하에 따라서 가변적
- 지수적 가중 이동 평균 사용
타임아웃 값 설정
- 타임아웃 주기 : 왕복시간 예측 값 + 여유 값
- RTT 변화율 (DevRTT) : SampleRTT가 EstimatedRTT에서 얼마나 벗어났는지를 예측, 일반적으로 0.25
🐳 신뢰적 데이터 전달
- 비신뢰적인 인터넷 네트워크 계층 상위 계층에서 신뢰적인 데이터 전달 서비스를 제공
- 파이프라인 되는 세그먼트
- 누적 ACKs
- 단일 재전송 타이머
- 재전송 시점
빠른 재전송(Fast Retransmit)
- 타임아웃 주기가 상대적으로 길어질 수 있음
- 중복 ACK를 사용하여 손실된 패킷들을 감지
- 송신자는 종종 많은 개수의 세그먼트들을 연속적으로 보냄
- 세그먼트가 손실되면 많은 중복 ACK 발생
- 빠른 재전송
- 송신자가 같은 데이터에 대해 3개의 중복 ACK를 수신하게 되면 ACK 응답된 세그먼트의 다음 세그먼트가 손실되었다고 가정
- 타이머가 만료되기 전에 재전송
🍒 흐름제어
- 수신자는 TCP 송신 세그먼트의 헤더에 rwnd값을 포함시켜 버퍼의 여유 공간을 송신자에게 알려줌
- 송신자는 전송 확인응답(ACK)이 안된 데이터의 양이 수신자의 rwnd 여유 공간보다 작은 값을 가지도록 유지
- 수신자의 버퍼가 오버플로우 되지 않도록 보장
🎀 연결관리
- TCP 송신자/수신자는 데이터 교환 전에 핸드 세이크
- 연결(connection)을 설정 (서로 연결할 의사가 있음을 확인)
- 연결 파라미터 값들 합의
TCP 3-way 핸드셰이크
- 1단계 : 클라이언트는 서버에 SYN 세그먼트를 송신
- 세그먼트 헤더의 SYN 비트 플래그 세트
- 최초의 순서번호를 기술
- 데이터 없음
- 2단계 : 서버는 SYN을 받고, SYNACK 세그먼트를 응답
- 서버는 TCP 버퍼와 변수를 할당
- 서버의 최초 순서번호를 기술
- 3단계 : 클라이언트는 SYNACK를 받고, ACK 응답
- 클라이언트는 TCP 버퍼와 변수를 할당
- ACK 응답에 데이터(세그먼트 페이로드)가 포함될 수도 있음
TCP 연결 종료 (4-way 핸드셰이크)
- 1단계 : 클라이언트는 서버에 FIN 세그먼트를 송신
- 2단계 : 서버는 FIN을 받고, ACK 세그먼트를 응답, FIN 세그먼트를 송신
- 3단계 : 클라이언트는 FIN을 받고, ACK 세그먼트를 응답
- 4단계 : 서버는 ACK를 받고, 연결이 종료됨
🧵 혼잡제어의 원리
- 혼잡 : 네트워크가 감당할 수 없을 정도로 너무 많은 출발지(source)에서 너무 많은 데이터를 너무 빨리 송신
- 혼잡 원인을 처리하기 위해선 혼잡을 일으키는 송신자들을 억제하는 메커니즘이 필요
- 혼잡 제어 ≠ 흐름 제어
- 혼잡 결과 : 패킷 손실, 긴 패킷 지연
혼잡 원인과 비용 시나리오
- 처리율은 용량을 초가활 수 없음
- 용량의 한계에 접근할 수록 지연 증가
- 손실/재전송 발생하면 처리율 감소
- 불필요한 중복 패킷으로 처리율 더욱 감소
- 하위 스트림에서의 패킷 손실로 상위 스트림의 전송 용량/버퍼 낭비
혼잡 제어 접근 방식
- 종단 간 혼잡 제어
- 네트워크로부터 명시적인 피드백 없음
- 손실과 지연으로 혼잡 추정
- TCP가 채택한 방식
- 네트워크가 혼잡 제어 지원
- 라우터 송수신 호스트에 혼잡 여부 피드백 직접 제공
- 혼잡 수준이나 명시적인 송신률 등을 표시
- TCP ECN, ATM, DECbit 프로토콜
🦴 참고
Computer Networking A Top-Down Approach 7th