TCP协议报文分析

众所周知TCP是面向连接的字节流传输,但是虽然是面向字节流,但是传送单元还是报文段。报文段分为首部和数据两个部分,其中首部是用来存放各种控制信息,对首部进行分析能更好的掌握TCP。
先放一个TCP报文的格式图

TCP协议报文段

TCP协议报文分析

各字段分析

  1. 源端口和目的端口,都是16位,用来存放源端口和目的端口。
  2. 序号,占4个字节,范围是0-232-1,因为TCP面向的是字节流,所以每个字节都对应一个序号,这里的序号指的是发送数据部分的第一个字节的序号。
  3. 确认号,占4个字节,表示的是期望收到对方下一个报文段等额第一个数据字节的序号,也就是对方下一数据发送的序号,通过确认号可以告知对方自己收到的数据的数量,如果数量与发送的不符合就会进行重发,这也是TCP的可靠传输数据的主要方式。
  4. 数据偏移,占4位,他指出TCP报文的头部起始位置到数据其实位置的距离,实际上就是TCP报文头部的大小,单位是32位,也就是4字节,这点和IP协议中的首部长度类似。
  5. 保留,目前设置为全0,为以后使用。
  6. URG,占1位,连同下面的五位都是标志位,URG置1表示对方有紧急数据要传送,要紧急数据其放在本报文段的最前面,而为了配合紧急数据的使用,后面还有个紧急指针,待会在做介绍。
  7. ACK,ACK置1之后才表示确认号有效,因为TCP是面向连接,所以在连接完成之前是不能进行数据传输的,只有在连接完成,ACK置1之后数据才能收发。
  8. PSH,PSH推送置1时,会立刻创建一个报文段进行传送,在接收方收到这个报文段之后要立即向应用今晨交付,而不是等待接收缓冲区填满再交付,一般用于希望对方立即作出回应的操作。
  9. RST,复位,当RST置1时,表示连接出现错误,或者接收到非法报文段(未进行正常连接的数据报),用来告知对方释放连接,再重新建立连接。
  10. SYN同步,SYN置1表示的是连接请求,在三次握手中起重要作用,如果对方同意连接请求,则会回送SYN和ACK,所以它表示接受或者请求建立连接。
  11. FIN,终止,和SYN相对应,用来终止一个连接,FIN置1表示数据发送完毕,请求释放连接。
  12. 窗口,占2个字节,这个窗口表示的是目前允许对方发送的数量,表示的是自己接收窗口的大小,对方在收到该窗口大小后,会根据这个窗口大小来决定自己的发送窗口大小(当然发送窗口的大小也和拥塞窗口一起决定)。
  13. 校验和,占2个字节,用来检验数据和首部部分数据的正确性。
  14. 紧急指针,占2个字节,在URG=1时才起作用,用来说明紧急数据的字节数。