英文简称: | TCP |
英文全称: | Transmission Control Protocol |
开发组织: | IETF |
标准编号: | RFC793 |
所属层次: | 传输层 |
|---------------------------|
| Source Port |
| 2byte |
|---------------------------|
| Destination Port |
| 2byte |
|---------------------------|
| Sequence Number |
| 4byte |
|---------------------------|
| Acknowledgment Number |
| 4byte |
|---------------------------|
| Data offset 4bit |
|---------------------------|
| Reserved 6bit |
|---------------------------|
| URG 1bit |
|---------------------------|
| ACK 1bit |
|---------------------------|
| PSH 1bit |
|---------------------------|
| RST 1bit |
|---------------------------|
| SYN 1bit |
|---------------------------|
| FIN 1bit |
|---------------------------|
| Window 2byte |
|---------------------------|
| Checksum 2byte |
|---------------------------|
| Urgent Pointer 2byte |
|---------------------------|
| Options variable|
|---------------------------|
| Data |
|---------------------------|
Source Port
是发送方的端口号,占2
个字节,解析为整数。
Destination Port
是接收方的端口号,占2
个字节,解析为整数。
Sequence Number
是。
Acknowledgment Number
是。
Data offset
。
Reserved
保留。占6bit
,用0填充即可。
URG
。占1bit
。
ACK
。占1bit
。
PSH
。占1bit
。
RST
。占1bit
。
SYN
。占1bit
。
FIN
。占1bit
。0表示后面还有数据,不要关闭连接;1表示数据传输完了,可以关闭连接了。 因为TCP
协议是有连接的协议,它必须先建立了连接之后,才能进行数据的传输。而建立连接和关闭连接比较占资源, 所以,在很短的时间间隔内要传输很多内容的话,显然不要让每传输一次就建立/关闭连接。
Window
,占2
个字节,解析为整数。
CheckSum
是用于数据完整性校验的,占2
个字节,解析为整数。
Urgent Pointer
占2
个字节,解析为整数。表示紧急指针,就是数据的偏移量。
Data
就是上层协议的内容。
Options
是参数。
TCP
头部,除去Options
有20个字节。
TCP
协议的内容可以通过TCPDump获取并查看。
TCP
协议要求必须先建立连接,才能进行数据的传输。建立连接,需要进行三次TCP
报文的传输,人们形象的把这个过程称为三次握手。
三次握手的目标是使数据段的发送和接收同步。同时也向其他主机表明其一次可接收的数据量(窗口大小),并建立逻辑连接。
三次握手的过程可以简述如下:
源主机发送一个同步标志位(SYN)置1的TCP数据段。此段中同时标明初始序号(Initial Sequence Number,ISN)。ISN是一个随时间变化的随机值。
目标主机发回确认数据段,此段中的同步标志位(SYN)同样被置1,且确认标志位(ACK)也置1,同时在确认序号字段表明目标主机期待收到源主机下一个数据段的序号(即表明前一个数据段已收到并且没有错误)。此外,此段中还包含目标主机的段初始序号。
源主机再回送一个数据段,同样带有递增的发送序号和确认序号。
至此为止,三次握手过程结束,TCP建立连接成功。接下来,源主机和目标主机可以互相收发数据。