TCP协议

  TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 将用户数据打包成报文段,它发送后启动一个定时器,另一端对收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。

1. TCP协议特点

  • TCP是面向连接的传输层协议。应用程序在交换数据之前,必须先建立TCP连接,数据交换完成后,必须释放TCP连接。

  • 每一条TCP连接只能有两个端点,即套接字。

  • TCP提供可靠交付的服务。传送的数据无差错、不丢失、不重复、按序到达。

  • TCP提供全双工通信。数据在两个方向上独立的进行传输。

  • 面向字节流。虽然应用程序和TCP交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

2. TCP报文段首部

  1. 源端口和目的端口  各占2个字节。
  2. 序号  占4个字节。TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。
  3. 确认号  占4个字节。期望接收到对方下一个报文段的第一个数据字节的序号。
  4. 数据偏移  占4位。TCP 数据部分在TCP报文段的位置,反映了TCP报文段的首部长度。首部长度范围是20~60字节。
  5. URG  紧急,URG=1时,表示报文段中有紧急数据,应尽快传送。紧急数据会插入到本报文段数据的最前面。
  6. ACK  确认,ACK=1有效。在连接建立后所有传送的报文段必须把ACK置为1。
  7. PSH  推送,发送方TCP把PSH置为1时,接收方就尽快的交付接收应用进程。
  8. RST  复位,RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立TCP连接。
  9. SYN  同步,在连接建立时用来同步序号。
  10. FIN  终止,用来释放TCP连接。
  11. 窗口  占2个字节。接收方允许对方发送的数据字节数。
  12. 校验和  占2个字节。校验TCP首部和数据两部分,由发送方计算和存储,接收方进行验证。
  13. 紧急指针  占2个字节。在URG=1时才有效,它指出紧急数据的末尾在报文段中的位置。
  14. 选项  长度范围0~40字节。

3. TCP建立和释放连接

三次握手建立TCP连接

(1)客户端向服务器发送连接请求报文段。标志位SYN=1,序号seq=x。

(2)服务器收到客户端发送的报文段,同意建立连接则向客户端发送确认。标志位SYN=1,ACK=1,序号seq=y,确认号ack=x+1。

(3)客户端收到服务器发送的报文段,向服务器发送确认。标志位ACK=1,序号seq=x+1,确认号ack=y+1。

此时TCP连接已建立,客户端和服务器都进入 ESTABLISHED 状态。

四次挥手释放TCP连接

(1)客户端向服务器发送连接释放报文段,并停止发送数据,主动关闭连接。标志位FIN=1,序号seq=u。

(2)服务器收到报文段后发送确认。标志位ACK=1,序号seq=v,确认号ack=u+1。然后服务器进入 CLOSE_WAIT 状态。

(3)服务器没有数据要发送时,应用进程会通知TCP释放连接。服务器向客户端发送连接释放报文段,关闭与客户端的连接。标志位FIN=1,ACK=1,序号seq=w,确认号ack=u+1。然后服务器进入 LAST_ACK 状态。

(4)客户端收到报文段后发送确认。标志位ACK=1,序号seq=u+1,确认号ack=w+1。然后客户端进入 TIME_WAIT 状态,并等待计时器设置的 2MSL(报文段最大存活时间)时间后才释放连接,进入 CLOSED 状态。

4. TCP可靠传输

  TCP发送方在规定的时间内没有收到确认就要重传已发送的报文段。超时重传就是每次发送数据后启动一个计时器,在计时器到期时间前收到了确认就撤销计时器,否则就重传报文段。发送方在收到确认前必须保留已发送数据的副本,用于超时重传使用。

  TCP采用了一种自适应算法Karn,它记录了报文段发出的时间以及收到确认的时间。这个时间差就是报文段的往返时间RTT。超时重传时间RTO设置时应略大于加权平均往返时间RTTS。

5. TCP流量控制和拥塞控制

  滑动窗口机制实现对TCP连接的发送方流量控制,使发送速率不要太快。发送方的发送窗口不能超过接收方的接收窗口的数值。

  判断网络出现拥塞的依据就是出现了超时。TCP拥塞控制算法:慢开始、拥塞避免、快速重传、快速恢复。

慢开始、拥塞避免都是基于窗口的拥塞控制。发送方维持一个拥塞窗口,发送窗口等于拥塞窗口。然后逐渐增大发送方的发送窗口数值。

快速重传和快速恢复算法能够快速恢复丢失的报文段。快速重传算法要求接收方对收到的报文段立即发送确认,即使收到失序的报文段也要发送对已收到报文段的重复确认。发送方连续收到3个重复确认,就认为报文段丢失,立即重传丢失的报文段。随即进入快速恢复算法,设置拥塞窗口数值,并执行拥塞避免算法。

 
 
posted @ 2018-12-19 16:39  PIPO2  阅读(255)  评论(0编辑  收藏  举报