阅读 215

系列TCP/IP协议-TCP协议概述(011)

一、引言

TCP协议(Transmission Control Protocol 传输控制协议)不同于UDP协议,它是一个面向连接(一对一)的,可靠(做了差错控制)的字节流(不限长度)服务。TCP的可靠性通过下面方式来控制:

  • 将应用数据分割成TCP认为最合适长度的数据块。减少IP层的分片现象的发生。
  • 当TCP发送一份数据包后,它启动一个定时器,等待目的端确认收到这份数据包。如果不能及时收到一个确认,将重发该数据包。确定对方收到数据了。
  • 当TCP接收端收到一个数据包时候,会发送一份确认数据包。告诉对方已经收到数据了。
  • TCP将对它的首部和数据部分做校验和。防止传输中出错。
  • TCP会对收到的数据进行排序,按照正确的顺序提交给应用。
  • TCP会抛弃重复的数据。
  • TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。

二、TCP数据包结构

TCP数据包是封装在IP数据包中的

图1.TCP嵌入IP数据包

TCP首部,如果不计算任选字段,通常为20个字节。

图2.TCP结构图

  • 每个TCP段都包含源端和目的端的端口号。
  • 序号用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。序号字段包含由这个主机选择的该连接的初始序号ISN(Initial Sequence Number)。
  • 既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。
  • 首部长度给出首部中32bit(一个字,两个字节)的数目。长度为4bit。需要这个值是因为任选字段的长度是可变的。
  • 在TCP首部中有6个标志比特。
    • URG:紧急指针( urgent pointer)有效。
    • ACK:确认序号有效。
    • PSH:接收方应该尽快将这个数据包交给应用层。
    • RST:重新建立连接。
    • SYN:同步序号用来发起一个连接。只有在三次握手的时候才会有。
    • FIN:发送端完成发送任务。只有在结束时候才有。
  • 窗口大小:TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。
  • 检验和:覆盖了整个的 TCP数据包。
  • 紧急指针:当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
  • 最常见的可选字段是最长报文大小,又称为 MSS(Maximum Segment Size)。

都看到这里了,要不要扫二维码关注一下微信公众号林湾村龙猫

微信公众号rudy_tan_home