• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

TCP三次握手和四次挥手以及11种状态

php 搞代码 3年前 (2022-03-01) 29次浏览 已收录 0个评论
文章目录[隐藏]

1、三次握手

置位概念:依据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN
ACK:示意验证字段
SYN:位数置1,示意建设TCP连贯
FIN:位数置1,示意断开TCP连贯

三次握手过程阐明:
1、由客户端发送建设TCP连贯的申请报文,其中报文中蕴含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,示意须要建设TCP连贯。(SYN=1,seq=x,x为随机生成数值)
2、由服务端回复客户端发送的TCP连贯申请报文,其中蕴含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过去的序列号seq的根底上加1进行回复,以便客户端收到信息时,通晓本人的TCP建设申请已失去验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1能够了解为是确认和谁建设连贯。
3、客户端收到服务端发送的TCP建设验证申请后,会使本人的序列号加1示意,并且再次回复ACK验证申请,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

2、四次挥手

四次挥手过程阐明:
1、客户端发送断开TCP连贯申请的报文,其中报文中蕴含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,示意须要断开TCP连贯。(FIN=1,seq=x,x由客户端随机生成)
2、服务端会回复客户端发送的TCP断开申请报文,其蕴含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号根底上加1进行回复,以便客户端收到信息时,通晓本人的TCP断开申请曾经失去验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成)
3、服务端在回复完客户端的TCP断开申请后,不会马上进行TCP连贯的断开,服务端会先确保断开前,所有传输到A的数据是否曾经传输结束,一旦确认传输数据结束,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成)
4、客户端收到服务端的TCP断开申请后,会回复服务端的断开申请,蕴含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开申请的seq根底上加1,从而实现服务端申请的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)
至此TCP断开的4次挥手过程结束

3、11种状态

1、一开始,建设连贯之前服务器和客户端的状态都为CLOSED;
2、服务器创立socket后开始监听,变为LISTEN状态;
3、客户端申请建设连贯,向服务器发送SYN报文,客户端的状态变味SYN_SENT;
4、服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD;
5、而后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED;
6、服务器端收到客户端的ACK后变为ESTABLISHED。此时3次握手实现,连贯建设!

因为TCP连贯是全双工的,断开连接会比建设连贯麻烦一点点。
1、客户端先向服务器发送FIN报文,申请断开连接,其状态变为FIN_WAIT1;
2、服务器收到FIN后向客户端发送ACK,服务器的状态围边CLOSE_WAIT;
3、客户端收到ACK后就进入FIN_WAIT2状态,此时连贯曾经断开了一半了。如果服务器还有数据要发送给客户端,就会持续发送;
4、直到发完数据,就会发送FIN报文,此时服务器进入LAST_ACK状态;
5、客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态;
6、再过了2MSL长的工夫后进入CLOSED状态。服务器收到客户端的ACK就进入CLOSED状态。
至此,还有一个状态没有进去:CLOSING状态。
CLOSING状态示意:
客户端发送了FIN,然而没有收到服务器的ACK,却收到了服务器的FIN,这种状况产生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外。

LISTEN:期待从任何远端TCP 和端口的连贯申请。

SYN_SENT:发送完一个连贯申请后期待一个匹配的连贯申请。

SYN_RECEIVED:发送连贯申请并且接管到匹配的连贯申请当前期待连贯申请确认。

ESTABLISHED:示意一个关上的连贯,接管到的数据能够被投递给用户。连贯的数据传输阶段的失常状态。

FIN_WAIT_1:期待远端TCP 的连贯终止申请,或者期待之前发送的连贯终止申请的确认。

FIN_WAIT_2:期待远端TCP 的连贯终止申请。

CLOSE_WAIT:期待本地用户的连贯终止申请。

CLOSING:期待远端TCP 的连贯终止申请确认。

LAST_ACK:期待先前发送给远端TCP 的连贯终止申请的确认(包含它字节的连贯终止申请的确认)

TIME_WAIT:期待足够的工夫过来以确保远端TCP 接管到它的连贯终止申请的确认。
TIME_WAIT 两个存在的理由:
          1.牢靠的实现tcp全双工连贯的终止;
          2.容许老的反复分节在网络中消失。

CLOSED:不在连贯状态(这是为不便形容假想的状态,理论不存在)

以上内容心愿帮忙到大家


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:TCP三次握手和四次挥手以及11种状态
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址