📑 본 글은 <그림으로 배우는 네트워크 프로토콜>을 읽고 정리한 글입니다.

1. TCP의 기본
전송 계층
TCP
& UDP
- 단말기의 어플리케이션에 전달되도록 식별한다.
- 데이터 링크, 네트워크 계층에서는 목적지 단말기까지만 보낸다.
포트 번호
- 단말기의 어플리케이션을 식별하는 값
- 응용 계층의 어플리케이션과 프로토콜을 식별하기 위한 2바이트 값
- 포트 번호의 종류
- Well-known Port Numbers
- 0~1023번
- 자주 사용되는 서버에 할당됨
- 포트 번호와 프로토콜이 명확하게 할당되어 있다.
- Registered Port Numbers
- 1024~49151번
- 각 개발사에서 개발한 서버 애플리케이션에서 사용
- Dynamic and Private Port Numbers
- 49151~65535번
- 클라이언트에서 동적으로 할당해서 사용한다.
데이터 링크 계층 → MAC 주소
네트워크 계층 → IP 주소
전송 계층 → 포트 번호
TCP
- 연결형 프로토콜 : 커넥션을 맺는다.
- ACK을 통한 수신 확인, 재전송 제어 등에 의한 높은 신뢰성
- 흐름 제어 및 혼잡 제어를 통한 통신 효율 최적화
2. TCP 헤더
TCP 헤더
PDU ⇒ 세그먼트
출발지 / 목적지 포트 번호
- 16비트 필드
- 출발지 포트 번호 = 무작위 결정 값
시퀀스 번호
- TCP segment 데이터 전체에서의 위치를 나타내는 32비트 필트
- 이전 패킷의 시퀀스 번호에 보낸 데이터의 크기를 더한 값
확인 응답 번호
- 다음에 수신할 데이터의 시퀀스 번호를 나타내는 32비트 필드
- 데이터가 누락되지 않았는지 확인 가능 / 순서 정렬 가능
데이터 오프셋
예약
제어 플래그
- 연결 상태를 제어하기 위한 9비트 필드
- SYN Flag : 커넥션 설정
- ACK Flag : 확인 응답
- FIN Flag : 커넥션 종료
윈도우 크기
- 수신 가능한 데이터의 크기를 알리기 위한 16비트 필드
체크섬
- TCP segment의 일관성을 확인하기 위한 16비트 필드
- IPv4의 체크섬과 유사
긴급 포인터
- 제어 플래그의 URG == 1 경우 유효함
- 긴급 데이터를 나타내는 시퀀스 번호가 설정된다.
옵션
패딩
3. TCP 커넥션의 흐름
TCP 커넥션 설정: 3-way handshake
- 기본 상태 : 클라이언트 CLOSED / 서버 LISTEN
- SYN : 클라이언트 → 서버
- SYN 플래그 = 1, 시퀀스 번호 = 임의 초깃값
- SYN + ACK : 서버 → 클라이언트
- SYN 플래그 = ACK 플래그 = 1, 확인 응답 번호 = 수신한 시퀀스 번호 + 1
- ACK : 클라이언트 → 서버
- ACK 플래그 = 1, 시퀀스 번호 = 내가 보낸 시퀀스 + 1, 확인 응답 번호 = 수신한 시퀀스 번호 + 1
- 각자 SYN에 대한 ACK을 받으면 커넥션 연결 성공!!
데이터 송신에 관한 기능
- 확인 응답 및 재전송 제어
- 확인 응답 : 데이터를 수신했음 by
확인 응답 번호
- 재전송 제어 : 확인 응답이 돌아오지 않을 때 데이터를 재전송 하는 것
- 중복 ACK(고속 재전송 제어)
- 확인 응답 번호가 동일한 ACK 패킷을 여러 번 받을 때
- 재전송 타임아웃
- ACK이 안 돌아올 때, 판단 시간: 재전송 타이머
- 윈도우 제어
윈도우 크기
: 확인 응답을 기다리지 않고 한 번에 보낼 수 있는 데이터 양
- 윈도우 크기로 송수신할 데이터 양을 제어하는 방법
- 흐름 제어
- 수신하는 쪽 윈도우 크기에 맞춰 데이터 전송량을 조절하는 것
4. UDP의 기초
UDP(User Datagram Protocol)의 특징
- 비연결형 프로토콜
- 통신에 대한 신뢰성이 낮다.
- 전송 속도가 빠르다. → 실시간성
- 일대다 통신에 적합하다.
UDP 헤더
UDP PDU ⇒ Datagram
출발지 / 목적지 포트 번호
UDP 데이터그램 길이
체크섬
TCP → 신뢰성이 요구되는 통신
UDP → 실시간성이 요구되거나 데이터 양이 적은 간단한 통신