1.运输层:TCP报文段的首部格式
笔记来源:
 湖科大教书匠:TCP报文段的首部格式
声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考
为了实现可靠传输,TCP采用了面向字节流的方式。
 但TCP在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送。

 一个TCP报文段由首部和数据载荷两部分构成
 TCP的全部功能都体现在它首部中各字段的作用
1.1 源端口和目的端口
源端口:占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程
 目的端口:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程
 
 
 

1.2 序号、确认号、ACK

 序号:占32比特,取值范围 
     
      
       
       
         [ 
        
       
         0 
        
       
         , 
        
        
        
          2 
         
        
          32 
         
        
       
         − 
        
       
         1 
        
       
         ] 
        
       
      
        [0,2^{32}-1] 
       
      
    [0,232−1],序号增加到最后一个后,下一个序号就又回到0。指出本TCP报文段数据载荷的第一个字节的序号
 
确认号:占32比特,取值范围 
     
      
       
       
         [ 
        
       
         0 
        
       
         , 
        
        
        
          2 
         
        
          32 
         
        
       
         − 
        
       
         1 
        
       
         ] 
        
       
      
        [0,2^{32}-1] 
       
      
    [0,232−1],确认号增加到最后一个后,下一个确认号就又回到0。指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。
 若确认号 
     
      
       
       
         = 
        
       
         n 
        
       
      
        =n 
       
      
    =n,则表明到序号 
     
      
       
       
         n 
        
       
         − 
        
       
         1 
        
       
      
        n-1 
       
      
    n−1为止的所有数据都已正确接收,期望接收序号为 
     
      
       
       
         n 
        
       
      
        n 
       
      
    n的数据。
确认标志位ACK:取值为1时确认号字段才有效;取值为0时确认号字段无效。
TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1。
例子
 序号=201 代表该报文段数据载荷第一个字节的序号为201
 确认号=800 代表799号为止的所有数据均已收到,期望接收序号为800号的报文段
 ACK=1 代表确认号字段有效
 
 序号=800 代表该报文段数据载荷第一个字节的序号为800,这正是刚刚客户期望收到的报文段
 确认号=301 代表300号为止的所有数据均已收到,期望接收序号为301号的报文段,这正好是客户端发来第一个报文段(大小300B)之后的下一个报文段序号
 ACK=1 代表确认号字段有效
 
1.3 数据偏移
为什么会偏移?因为将报文分片了,每个分片都要加一个首部,当接收方收到这些分片时需要还原数据,这时需要去掉首部,每个分片的原位置为该分片前方所有分片的首部长度之和
数据偏移:占4比特,并以4字节为单位。
 用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。
 这个字段实际上是指出了TCP报文段的首部长度。
首部固定长度为20字节,因此数据偏移字段的最小值为 
     
      
       
       
         ( 
        
       
         0101 
        
        
        
          ) 
         
        
          2 
         
        
       
      
        (0101)_2 
       
      
    (0101)2
 首部最大长度为60字节,因此数据偏移字段的最大值为 
     
      
       
       
         ( 
        
       
         1111 
        
        
        
          ) 
         
        
          2 
         
        
       
      
        (1111)_2 
       
      
    (1111)2
 
 
1.4 窗口
窗口:占16比特,以字节为单位。指出发送本报文段的一方的接收窗口。
 窗口值作为接收方让发送方设置其发送窗口的依据。
 这是以接收方的接收能力来控制发送方的发送能力,称为流量控制。

1.5 校验和
校验和:占16比特,检查范围包括TCP报文段的首部和数据载荷两部分。
 在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。
 
1.6 同步标志为SYN、终止标志位FIN
同步标志位SYN:在TCP连接建立时用来同步序号

 
 终止标志位FIN:用来释放TCP连接
 
 
1.7 复位标志位RST、推送标志位PSH
复位标志位RST:用来复位TCP连接
 当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。
 RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。
 
 推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程
 而不必等到接收缓存都填满后再向上交付。
 
1.8 紧急标志位URG、紧急指针
紧急标志位URG:取值为1时紧急指针字段有效:取值为0时紧急指针字段无效
 紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度
 当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。
 
1.9 选项、填充

 
 填充:由于选项的长度可变,因此使用填充来确保报文段首部能被4整除
 (因为数据偏移字段,也就是首部长度字段,是以4字节为单位的)
 



















