Menu Close

传输层协议(TCP)

传输层在TCP/IP协议中包含两种协议,分别为UDP和TCP协议,用户数据报协议上节内容已经介绍,本节将详细介绍传输控制协议(TCP)。

1. 传输控制协议

传输控制协议(TCP)是IP层的上层协议,在IP的协议字段的字段为6。

  • TCP协议与UDP异同点
  • TCP是建立连接的控制传输,而UDP非连接的传输
  • TCP一对一的控制传输,UDP可以为一对一传输,也可以一对多传输
  • TCP是可靠传输,UDP是非可靠传输
  • TCP报文字段

TCP报文头字段如图1所示,

%title插图%num

图1 TCP 包头字段

  • 源端口(Source port),16位源端口,对应发送主机的应用程序。
  • 目的端口(Destination port),16位目的端口号,对应接收主机的应用程序。
  • 序号:Seq序列号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。初始的序列号可以为随机数(一般设为0)
  • 确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
  • 数据偏移:指出TCP头部数据长度(32bit),也是数据部分(payload)的偏移。
  • 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:

1)URG:紧急指针(urgent pointer)有效。

2)ACK:确认序号有效。只有该位设置为1,确认序列号才有效。

3)PSH:接收方应该尽快将这个报文交给应用层。

4)RST:复位并重置连接。

5)SYN:同步序列号,只有发起一个新连接有效。

6)FIN:最后一包并释放一个连接。

(7)窗口尺寸(window size),设置TCP接收内存的大小,服务器与客户机可以设置不同的值,一般在建立连接时双方都会通知对方窗口尺寸的大小。

IMG_256

图2

  • 滑动窗口

滑动窗口是指TCP发送程序,对内存的控制,线性增长,指数衰减。如图3所示

IMG_256

 

图3  TCP滑动窗口示意图

以64K window size 为例,初始发送16K byte数据,随后每次按1K增长,如果有没有确认或丢失的包超时,将会把滑动窗口尺寸减半。如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

 

TCP的checksum计算

TCP的checksum计算首先也要建立伪IP包头,如图4所示,细节参照UDP伪包头的构建方式

IMG_256

图4   TCP checksum计算示意图

2. TCP链接及终止过程:

  • 建立过程(3次握手)
  • Server 端,准备 IP与TCP端口绑定
  • 客户端发送SYN请求
  • Server端应答SYN,并同时发送SYN
  • Server 应答,至此建立链接完成
  • 数据通信
  • 中止过程(4次握手)
  • 客户端发出FIN请求
  • Server应答(ACK)客户端的FIN请求
  • Server发出FIN请求
  • 客户端应答Server端的FIN请求,断开链接。
  • 如果在超时时间内没有收到应答,Server 即会自动断开链接

IMG_256

图5 TCP建立及中止链接

  •  SYN, ACK ,Seq之间的关系如图6。

%title插图%num

图6

3. 数据传输:

  • 数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组;
  • 到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;
  • 超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片;
  • 滑动窗口:TCP连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出;
  • 失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;
  • 重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据;
  • 数据校验:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和有差错,TCP将丢弃这个分片,并不确认收到此报文段导致对端超时并重发。

 

Posted in FPGA, FPGA, 教材与教案, 文章, 资料区

1 Comment

  1. 贺文强

    2. TCP链接及终止过程:

    客户端发送SYN请求
    Server端应答SYN,并同时发送SYN
    Server 应答,至此建立链接完成 // 此处为什么是Server 应答? 是否应该是 客户端应答

发表评论

相关链接