码迷,mamicode.com
首页 > 其他好文 > 详细

TCP状态详解

时间:2019-07-19 12:36:59      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:info   应用层   and   alt   没有   wav   src   com   必须   

报文结构

技术图片

技术图片

 

TCP标志位

标志位就是用于协议的一些机制的实现的比特位大家可以看到有6比特,它们依次如下:

URG、ACK、PSH、RST、SYN、FIN。

  URG表示紧急指针字段有效;

  ACK置位表示确认号字段有效;

  PSH表示当前报文需要请求推(push)操作;

  RST置位表示复位TCP连接;

  SYN用于建立TCP连接时同步序号;

  FIN用于释放TCP连接时标识发送方比特流结束。

都是1bit,1bit代表0和1,字段等于1确认有效

  源端口和目的端口:各为16比特,用于表示应用层的连接。源端口表示产生数据包的应用层进程,而目的端口则表示数据包所要到达的目的进程。

  序列号:为32比特,表示数据流中的字节数。序列号为首字节在整个数据流中的位置。初始序列号随机产生,并在连接建立阶段予以同步。

  确认号:表示序号为确认号减去1的数据包及其以前的所有数据包已经正确接收,也就是说他相当于下一个准备接收的字节的序号。

  头部信息:4比特,用于指示数据起始位置。由于TCP包头中可选项的长度可变,因此整个包头的长度不固定。如果没有附加字段,则TCP数据包基本长度为20字节。

  窗口:16位,表示源端主机在请求接收端等待确认之前需要接收的字节数。它用于流量控制,窗口大小根据网络拥塞情况和资源可用性进行增减。

  校验位:16位。用于检查TCP数据包头和数据的一致性。

  紧急指针:16位。当URG码有效时只向紧急数据字节。

  可选项:存在时表示TCP包头后还有另外的4字节数据。TCP常用的选项为最大数据包(并非整个TCP报文)MSS。每一个TCP段都包含一个固定的20字节的段头。TCP段头由20字节固定头和一些可选项组成。实际数据部分最多可以有65495(65535-20-20=65495)字节。

 

三次握手建立连接

技术图片

  第一次握手,client端将标志位SYN置位,序列号为随机数J,并将数据包发送给server。client进入SYN_SENT状态,等待服务端确认。

  第二次握手,server端收到数据包后由标志位SYN=1知道client请求建立连接,server将标志位SYN和ACK都置位为1,确认位为ack=j+1,随机产生一个值seq=k,并将该数据包发送给client以确认连接请求,server进入SYN_RCVD状态。

  第三次握手,client端收到数据包后,检查确认位是否为ack=j+1,标志位ACK位是否为1,若果正确把标志位ACK置位为1,序列号为seq=j+1,确认号为ack=K+1并将数据包发送给server,server端收到消息后检查确认位是否等于ack=k+1,标志位是否ACK=1,如果正确则连接建立成功,client和server进入ESTABLISHED窗台,完成三次握手,随后client和server之间可以开始传输数据了。

 

四次挥手拆除连接

  四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:

技术图片

  由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

  (1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

  (2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

  (3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

  (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

 

TCP十一种状态总结:

技术图片

 

TCP状态详解

标签:info   应用层   and   alt   没有   wav   src   com   必须   

原文地址:https://www.cnblogs.com/yyxianren/p/11212424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!