- TCP는 4계층에 속한다.
| OSI 계층 | TCP/IP 계층 | |||||||
|---|---|---|---|---|---|---|---|---|
| 7 | Application | Application | Application | |||||
| 6 | Presentation | FTP | Telnet | HTTP | DNS | RTSP | etc.. | |
| 5 | Session | |||||||
| 4 | Transport | Transport | TCP | UDP | ICMP, IGMP | |||
| 3 | Network | Network (Internet) |
IPv4 / IPv6 | |||||
| 2 | Data Link | Network Interface (Internet Access) |
Ethernet: IEEE 802.x, Bluetooth, etc... | |||||
| 1 | Physical | |||||||
TCP
- Transmission Control Protocol
- 전송 제어 프로토콜이다.
- 전송 계층이다.(4계층)
- IP 패킷의 SDU에 포함되어 있다.
- ★연결 지향형이다.(신뢰성↑, 안정성↑)
- 논리적 연결을 생성하고 데이터를 전송한다.
- 흐름 제어를 위해 슬라이딩 윈도우(Sliding Window) 방식을 사용한다.
- 최소 20 바이트의 헤더 크기를 가진다.
| Source Port | Destination Port | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Sequence Number | |||||||||
| Acknowledge Number | |||||||||
| HLEN | Reserve | Flag Bits | Window Size | ||||||
| URG | ACK | PSH | RST | SYN | FIN | ||||
| Checksum | Urgent Pointer | ||||||||
| Options | |||||||||
- Source Port : 운영체제내 송신 프로세스의 주소
- Destination Port : 수신 프로세스의 주소
- Sequence Number : TCP 세그먼트의 일련번호
- Acknowledge Number : 다음 번에 수신될 것으로 예상되는 세그먼트의 번호
- HLEN : 헤더의 크기
- Reserve : 미래를 위한 남겨둔 영역으로 현재까지 사용되지 않고 있음
- Flag Bits : 회선, 데이터의 관리와 제어 기능 등을 수행하는 영역
- URG(Urgent) : TCP 세그먼트에 긴급 데이터가 포함되어 있음을 나타낸다. 이 플래그가 on으로 통신된다면 이 필드는 긴급 데이터의 끝을 가리킨다.
ex. 사용자가 급하게 [Ctrl]+[C]를 눌러 긴급하게 데이터 전송을 중단하려는 경우 - ACK(Acknowledgment) : 수신자가 성공적으로 패킷을 받았음을 확인하는데 사용한다.
- PSH(Push) : 수신자에게 버퍼링된 데이터를 애플리케이션에 즉시 전달하도록 요청한다.
- RST(Reset) : 현재의 연결을 즉시 재설정하도록 요청한다. 통신 오류가 발생했을 때 주로 사용된다.
- SYN(Synchronize) : TCP 연결을 초기화하는 데 사용한다. 연결 설정 요철에서 사용되며 초기 시퀀스 넘버를 교환하는 데 사용한다.
- FIN(Final) : 데이터 전송이 완료되었음을 나타낸다. 연결 종료 요청에서 사용된다.
- URG(Urgent) : TCP 세그먼트에 긴급 데이터가 포함되어 있음을 나타낸다. 이 플래그가 on으로 통신된다면 이 필드는 긴급 데이터의 끝을 가리킨다.
- Window Size : 흐름 제어(송신지에 수신지의 버퍼 여유 크기를 지속적으로 통보함.)
- Checksum : TCP 세그먼트 전체에 대한 오류 검출(에러 제어)
- Urgent Pointer : URG 플래그가 설정된 경우 긴급 포인터 영역(응급 데이터의 위치)
- Options : 다양한 확장 기능과 관련된 영역(옵션에 따라 TCP 헤더의 크기가 변함.)
3-Way handshake
- 데이터 전달을 시작하기 전에 서로 통신할 준비가 되었음을 확인하는 절차이다.

1. A는 B에게 접속을 요청하는 SYN 패킷을 보낸다. 그 후 A는 SYN_SENT 상태가 된다.
2. B는 SYN 요청을 받고 A에게 요청을 성공적으로 받았다는 ACK 와 SYN 패킷을 보낸다. 그 후 A에게 ACK 응답을 기다리며 SYN_RECEIVIED 상태가 된다.
3. A는 B에게 ACK을 보내고 그 이후부터 연결이 되어 데이터를 주고 받게 된다. 이때 B는 ESTABLISHED 상태가 된다.
4-Way handshake
