美文网首页
TCP协议头解析

TCP协议头解析

作者: qiaoflin | 来源:发表于2020-06-11 09:37 被阅读0次
    image.png

    协议头

    image.png
        16位端口号:告知主机该报文段是来自哪里(源端口Source Port)以及传给哪个上层协议或应用程序(目的端口Destination Port)的。进行TCP通信时,客户端通常使用系统自动选择的临时端口号,而服务器则使用知名服务端口号(比如DNS协议对应端口53,HTTP协议对应80,这些端口号可在/etc/services文件中找到)。
    
        32位序号:一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。假设主机A和主机B进行TCP通信,A发送给B的第一个TCP报文段中,序号值被系统初始化为某个随机值ISN(Initial Sequence Number,初始序号值)。那么在该传输方向上(从A到B),后续的TCP报文段中序号值将被系统设置成ISN加上该报文段所携带数据的第一个字节在整个字节流中的偏移。例如,某个TCP报文段传送的数据是字节流中的第1025~2048字节,那么该报文段的序号值就是ISN+1025.另外一个传输方向(从B到A)的TCP报文段的序号值也具有相同的含义。
    
        32位确认号(acknowledgement number):用作对另一方发送来的TCP报文段的响应。其值是收到的TCP报文段的序号值加1。假设主机A和主机B进行TCP通信,那么A发送出的TCP报文段不仅携带自己的序号,而且包含对B发送来的TCP报文段的确认号。反之,B发送出的TCP报文段也同时携带自己的序号和对A发送来的报文段的确认号。
    
        4位头部长度(header length):标识该TCP头部有多少个32bit字(4字节)。因为4位最大能标识15,所以TCP头部最长是60字节。也称为数据偏移,占4位,他指出TCP的报文段的数据起始处距离有多远,也就是TCP报文段的首部长度。由于首部还有长度不确定的选项,因此偏移字段是非常有必要的。但注意”数据偏移“的单位是32位(即4个字节),由于3位二进制数能表示的最大十进制数为15,因此数据偏移连的最大值是60个字节,也是TCP首部的最大长度。
        6位标志位包含如下几项:
    
        URG标志,表示紧急指针(urgent pointer)是否有效。
    
        ACK标志,表示确认号是否有效。我们称携带ACK标识的TCP报文段为确认报文段。
    
        PSH标志,提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不将接收
    
        到的数据读走,它们就会一直停留在TCP接收缓冲区中)。
    
         RST标志,表示要求对方重新建立连接。我们称携带RST标志的TCP报文段为复位报文段。
    
         SYN标志,表示请求建立一个连接。我们称携带SYN标志的TCP报文段为同步报文段。
    
         FIN标志,表示通知对方本端要关闭连接了。我们称携带FIN标志的TCP报文段为结束报文段。
    
       16位窗口大小(window size):是TCP流量控制的一个手段。这里说的窗口,指的是接收通告窗口(Receiver Window,RWND)。它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。
    
        16位校验和(TCP check sum):由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意,这个校验不仅包括TCP头部,也包括数据部分。这也是TCP可靠传输的一个重要保障。
    
        16位紧急指针(urgent pointer):是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法。
    
        TCP头部选项:TCP头部的最后一个选项字段(options)是可变长的可选信息。这部分最多包含40字节,因为TCP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。典型的TCP头部选项结构如下图所示。
    

    相关文章

      网友评论

          本文标题:TCP协议头解析

          本文链接:https://www.haomeiwen.com/subject/qyjvtktx.html