9. TCP(Transmission Control Protocol)


  IP(Internet Protocol)위에 올라가서 IP의 부족한 부분을 채워주는 프로토콜로 RFC793 Transmission Control Protocol 에 기술되어있으며, 다음과 같은 TCP 헤더를 가진다.

    0                   1                   2                   3   
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |       Destination Port        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Sequence Number                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Acknowledgment Number                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Data |           |U|A|P|R|S|F|                               |
   | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
   |       |           |G|K|H|T|N|N|                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |         Urgent Pointer        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   /                            DATA                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  이 TCP헤더 앞에 IP헤더가 붙는다. IP헤더에 IP주소(IP Address)가 들어가고, TCP헤더에 포트번호가 들어가게 되는 것이다.

FieldBitsDescription
Source Port16출발지의 포트번호
Destination Port16목적지의 포트번호
Sequence Number32패킷의 순서정보로 최초 통신을 연결(Connect)할때 랜덤(Random)값을 초기값을 정하여 패킷을 발송할때마다 1씩 증가시키게 된다.
Acknowledgement Number32다음번 수신할 Seq. No의 번호로 앞서 수신한 패킷의 Seq. No에 1을 더한값이 되며, 이를 수신통지로 본다.
Data Offset44Bytes의 배수로 TCP메시지 본체(Data)의 시작위치 기본적으로 Option이 없는경우의 헤더사이즈가 20Byte이므로, 5( 4 x 5 = 20 )이 된다.
Reserved6예약됨(0으로 초기화)
Flags6제어용 플래그(Control Flags) 1:On, 0:Off
  • URG: Urgent Pointer field significant
  • ACK: Acknowledgment field significant
  • PSH: Push Function
  • RST: Reset the connection
  • SYN: Synchronize sequence numbers
  • FIN: No more data from sender
Window16수신가능한 데이터의 사이즈
Checksum16데이터 확인용 체크값
Urgent Pointer16긴급하게 처리해야할 Seq. No를 가리키게 되며, URG 플래그가 설정되어야 한다.
Options24성능향상을 위한 가변길이의 추가옵션(RFC793참조)
Padding6TCP헤더의 길이를 32bit의 배수로 만들어준다.(0값사용)
Data가변실제 데이터

- Last Update : 2003.04.25 by Deadfire(http://www.deadfire.net)

TCP/IP 강좌
Starting
NIC
허브
Cable
이더넷
LAN
라우터
IP
ICMP
TCP / UDP
TCP
UDP
DNS
Ending

Copyright ⓒ 1997 ~, Deadfire Program Master