|
通俗的理解TCP三次握手定律,小弟有什么说的不对的地方,希望大虾们多多补充!
tcp是属于可靠的,有连接的协议。tcp的连接过程称为三次握手
1:请求端发送一个syn段指明客户打算连接的服务器的端口,以及初始序列号syn1;
2:服务器发回包含服务器初始序列号syn2报文段作为应答,同时,将确认ack1设置为syn1+1来对请求端进行确认。
3:请求端必须将syn2+1来对服务器的syn2的确认.
我们用有趣的比喻来简单的理解这个过程。
第一握手:比如A要给B打电话.A拿起电话,拨号,通过电话服务商找到你所拨打的电话号码的地址,进行连接。
这就是一个TCP数据封装的过程,心里要说的话就是TCP数据,所拨的电话号码就是对方的IP地址,等对方接起
电话以前的等待就是TCP的listen状态,此时TCP首部中会包含一个syn1(同步序号)
第二次握手:这就是B接起电话,回复一个"喂",TCP数据就相当于"喂"字,TCP首部返回确认号ack1=syn1+1,一个同步序号syn2
第三次握手:就是你的回话了,就相当与告诉B我听到一样,返回一个确认号:ack2=syn2+1
这样双方就开始通信了,也就是三次握手结束了
现在再让我们来看看终止连接的过程。
建立一个连接需要三次握手,但终止一个连接要经过4次握手。这是由TCP的半关闭造成的。
当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。当一端收到一个FIN,它必须通知应用层另一端已经终止了那个
方向的数据传送。
1:客户端发送一个FIN1:ACK1序列号,告诉服务器端,客户端应用程序关闭。
2:服务器发回确认序列好ACK1+1
3:服务端发送一个FIN2:ACK2序列号,告诉客户端,服务端应用程序关闭。
4:客户端发回一个ACK2+1,确认关闭。
我们再拿打电话来比喻。刚才已经连接成功,可以通话了。此时
A:挂了吧!(如同第一次终止连接握手)
B:那好吧,挂了!(如同第二次终止连接握手)
B挂线.(如同第三次终止握手)/*这里就如同A先提出的挂线,很有礼貌的等待B先挂了,然后自己再挂线*/
A挂线(第四次终止握手)
TCP连接终止结束。
TCP的连接超时:就是打电话没人接,最后成忙音,
这里只是很简单的说了一下连接和终止的过程。
TCP/IP详解卷1有很详细的解说,有兴趣的朋友可以看看这本,很经典的书之一。 |
|