
TCP와 UDP는 OSI 4계층인 전송 계층에서 주로 사용하는 프로토콜이며 두 프로토콜 모두 포트 번호를 이용하여, 여러 애플리케이션이 동일한 장치에서 네트워크를 공유를 가능케 한다.
TCP는 세그먼트, UDP는 데이터그램으로 데이터를 나누어 전송하며, 나눠진 조각들은 네트워크를 통해 전송되어 목적지에서 다시 조립된다.
| TCP | UDP | |
|---|---|---|
| 연결 방식 | 연결 지향 (3-way Handshake) | 비연결형 |
| 신뢰성 | 보장됨(데이터 손실 시 재전송) | 보장되지 않음 |
| 흐름 제어 | 있음 | 없음 |
| 혼잡 제어 | 있음 | 없음 |
| 속도 | 상대적으로 느림 | 빠름 |
| 데이터 순서 보장 | 보장됨 | 보장되지 않음 |
| 사용 예 | 웹 브라우징, 이메일, 파일 전송 | 스트리밍, 온라인 게임, DNS |
: TCP는 신뢰성을 보장하는 연결 지향형 프로토콜이며, 데이터가 정확하고 순서대로 도착해야 하는 애플리케이션에서 사용된다.
: 송신자가 수신자의 처리 속도를 고려하여 데이터를 전송한다.
: 네트워크가 과부하 상태일 때 전송 속도를 조절한다.

요청자가 데이터를 보내는 포트 번호. 출발지.
주로 응용 프로그램과의 통신을 구별하는 데 사용됨.
데이터를 받는 수신자의 포트 번호.
특정 애플리케이션에 데이터를 전달하기 위해 사용됨
요청자가 보낸 데이터의 바이트 순서를 나타냄.
데이터 전송의 흐름 추적 및 세그먼트 손실 발생 시 올바른 순서로 재전송할 수 있도록 도와 줌.
데이터를 받은 수신자가 예상하는 다음 시퀀스 번호를 의미.
송신된 데이터를 수신자가 제대로 받았는지 확인하기 위한 필드.
TCP 헤더의 길이를 나타내는 필드.
헤더에 옵션 필드가 추가될 경우, 이 필드를 통해 TCP 헤더의 전체 크기를 알 수 있음.
미래를 위해 예약된 필드. 비워져 있어야 함.
TCP 연결의 상태와 제어를 관리하기 위해 사용하는 플래그들.
현재 세그먼트의 속성을 나타냄.
Urgent Pointer(긴급 포인터) 필드에 값이 있음을 알리는 플래그
긴급으로 설정된 데이터는 먼저 처리됨
응답 번호(Acknowledgment Number)가 유효함을 알린다.
해당 플래그가 0이면, 승인 번호 필드 자체가 무시됨.
Push 플래그, 수신 측이 데이터를 즉시 상위 계층으로 전달해야 함을 요청함
Reset 플래그, 연결 재설정 시 사용.
연결이 확립된 Established 상태에서 상대방에게 강제로 리셋을 요청함
Synchronize 플래그, 연결 요청 시 사용.
연결 생성 시, 시퀀스 번호의 동기화를 맞추기 위한 세그먼트임을 의미.
Finish 플래그, 연결 종료 요청 시 사용
ECN에서 사용하는 CWR, ECE 필드가 실수나 악의적으로 은폐되는 경우를 방어하기위해 RFC 3540에서 추가된 필드.
해당 필드가 1이면서, SYN 플래그가 1일 때는 ECN을 사용한다고 상대방에게 알림.
SYN 플래그가 0이면, 네트워크가 혼잡하니 세그먼트 윈도우 크기 축소 요청을 알림.
이미 ECE 플래그를 받아, 전송하는 세그먼트 윈도우 크기를 줄였다고 알림
수신자가 수용할 수 있는 데이터의 양을 나타냄.
흐름 제어에 사용되며, 요청자는 이 크기보다 많은 데이터를 전송하지 않도록 함
데이터의 무결성을 확인하기 위한 필드.
요청자가 계산한 체크섬 값과 수신자가 계산한 값이 일치하는지 확인하여 데이터가 손상되지 않았는지 검사함.

URG 플래그가 설정된 경우 해당 데이터를 빠르게 처리하기 위해 사용됨.
추가적인 TCP의 기능을 지원하기 위한 필드.