您的位置:首页 > 理论基础 > 计算机网络

TCP 三次握手四次挥手及理由(二 连接与断开)

2016-07-20 17:00 465 查看
TCP是一个面向连接的协议。无论哪一方想另一方发送数据之前,都必须在双方之间建立一条连接。下面就来讨论一下连接的建立和断开。

话不多说,先看一下TCP建立连接时的时序图



如图示,请求端主机A发送一个SYN指明需要建立一条连接(第一次握手)

当主机B收到主机A的SYN报文段后,如果允许连接,主机B向主机A返回ACK并发送SYN报文 (第二次握手)

主机A在收到主机B的ACK和SYN后向主句B发送ACK表示收到请求。(第三次握手 )

当第三次握手后连接就建立完成,连接双方就可以进行通信,这就是TCP的三次握手。

那么很多人就问了,为什么TCP是三次握手而不是两次、四次、五次、八次、X+1次呢?接下来咱聊一聊为什么是 三次。

TCP相对于UDP的可靠性体现在很多方面 ,最主要的还是它的面向连接特性。TCP是全双工通信,数据要通信那么就得有一个通信通道吧,双发在通信之前是不是得先确定一下自己的通道是否完好吧,怎样确定呢?那就用最原始的方式,派个人去看一看路是不是通的,然后发起端派了一个SYN去了,这个SYN就这样带着请求去了,到了目的地后接收端看到来了一个连接请求当然是非常高兴的,同时接收端通过这个SYN知道了 (第一次握手)他和对端通信的接收通道是好的它就给对方回了一个ACK,然而她不知道自己的发送端是否完好,于是接收端也派了一个SYN去探路同时(第二次握手),当然发送端收到这个ACK后知道它发往对端的 SYN已经到达,同时还给他带了个一个小媳妇–对端的SYN,这样发送端就知道了他的收发通道都是好的。

现在进行了两次握手了如果开始通信的话接收端是不敢给你回消息的,因为她不知道自己的发送通道是否完好,万一发到不该发的地方咋办。所以当发起端收到SYN后将返回一个ACK表明已经收到SYN请求,接收端收到ACK后知道对端已经收到信息,自己的发送通道是好的(第三次握手)。

现在双方的收发都已经确定是好的,可以通信了。那可以发起第四次握手吗?当然可以啦,为什么不行呢?你可以一直握手,可是有什么用吗?既然收发通道都已接近确定可以 用了为甚 还要浪费感情呢?

所以握手次数应不少于三次,然而超过三次有太浪费感情了,所以就是三次了,简单高效。

三次握手完了就来聊聊四次挥手,和以前一样,先上图



相比于三次握手,四次挥手就相对容易理解了,挥手就是要断开连接,然而TCP是全双工的,双方都得断开中间的收发通道,于是主机A先发送FIN(断开标志)给主机B,告诉主机B它要关闭自己的发通道了(第一次挥手),主机B收到后给主机A回复一个ACK表示同意,同时也关闭了自己的收通道(第二次挥手),挥手两次后A向B的发通道关了,同时B向A的收通道关了,但是B向A的发和A到B的收还没关,于是B给A发送了FIN告诉要关闭发通道了(第三次挥手),A收到来自A的FIN后向B返回一个ACK表示同意,同时关闭收通道(第四次挥手)这样一个连接就断开了。

辣么可不可以少挥几次?如果想一直站着茅坑不拉屎的话就可以,难道这样腿不会算吗?那多挥几次呢?通道都关了你是挥给谁看呢,自己吗?知道的以为是在给自己挥手(神经病),不知道的还以为你是在抽风呢。

最后在来一张总的时序图吧



就这样一次TCP连接的建立与断开就完成了,有什么不对的地方还望各位看官斧正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tcp