扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇文章给大家分享的是有关TCP三次握手和四次挥手及其状态是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
龙安ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
三次握手:
TCP的三次握手过程:
C端发送SYN(SYN=1)标志,同时发送一个SEQ number(SEQ为一个随机数),表示要和S端进行连接。(C: SYN_SENT S: LISTEN )
S端接收到这个含有(SYN=1)的包之后,表示要接受这个包,则回复一个ACK number(ACK=SEQ+1 ),然后也回复一个SYN=1,ACK=1的包。( C:SYN_SENT, S:SYN_REVD)
C端回复一个ACK number包(ACK=SEQ+1), ACK = 1,然后连接就建立了,剩下的工作就是去传输了。(C: ESTABLISHED S:ESTABLISHED)
疑问:
这个地方之前自己存在一个误区,误以为SYN 和 SYN number是一个东西,结果导致两者混淆,一直没有真正理解这个三次握手,造成错误一直持续到现在,悔之晚矣。多加几个疑问,
就会不再想当然了。
图中,可以看到第一条,首先10.0.0.61 向10.1.3.32 发送了一个SYN包,及SYN的标志位为1,并且发送了一个Seq number=2856901853,
第二条:10.1.3.32接收到请求后,返回了一个SYN+ACK包,及确认以及连接包,Ack number=2856901853+1,然后随机发了一个Seq=3836060639的随机数。
第三条:10.0.0.61 接收到请求后,返回了一个ACK包,ACK number=3836060639+1 ,然后发了一个Seq=随机数。
通过以上三条,则建立了一个有状态的连接,随后进行的是一个数据传输的过程。
三次握手的本质是,双方可靠的交换了一个Seq号,通过该Seq号,确认了后续传输的有序性。
四次挥手:
四次挥手的过程,首先一个很重要的提醒是百度百科中的一句话,及TCP是全双工的,所以需要来去双方都来关闭连接。
假设A已经传完了所有的数据
A发送一个FIN标志位为1的包,表明自己已经完成了传输。
B发送一个ACK表示自己已经知道了,并且关闭了来自于A->B的连接。
过了一会儿,B也传完了所有的数据,接着B发送了一个FIN标志为1的包,然后就传给了A。
A一看来了个FIN的标志,从而说明已经收到了B的断开连接的信号,然后A发了一个ACK=1的包,正式断开了所有连接。
仔细一看这段描述,发现有几个问题,首先A发了一个FIN=1的包,只是说明A已经将该传的都传完了,至于B收到与否,A到底管不管,或者知道不知道。
所以,显然,事情不应该如上面所说,如同三次握手一样,必须存在着Seq number的介入。
正确过程如下:
A发送一个FIN=1的包,并且有个Seq number。(A:FIN_WAIT_1 B:ESTABLISHED)
B收到后,返回一个ACK=1的包,并且返回一个Ack number= Seq number+1的包。(A: FIN_WAIT_1 B:CLOSE_WAIT)
B传输完毕后,和另外一个连接一样,发一个FIN=1的包,并同时携带一个Seq number。(A:FIN_WAIT_2 B:LAST_ACK)
A收到后,返回一个ACK=1的包,并同时把Ack number = seq number +1的包发给A。(A:TIME_WAIT B:CLOSED)
以上就是TCP三次握手和四次挥手及其状态是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流