TCP的三次握手和四次挥手

关于TCP三次握手和四次挥手的解释

https://www.cnblogs.com/zhuzhenwei918/p/7465467.html

https://blog.csdn.net/baixiaoshi/article/details/67712853

https://blog.csdn.net/xifeijian/article/details/12777187

我的一些个人理解:

为什么是“三次握手”?

建立连接时,A先向B发个建立连接的请求,然后等待B的回应(根据超时重发机制,若规定时间内没收到回复,就会再发一次建立连接的请求,达到重发规定次数还是没收到回复A就不再等待了),接着B收到后给A一个回应并且开始等待A的回应(与前边的A一样,也会有超时重发机制和次数限制,换句话说等待时间有限,等不到回应就放弃了),最后A收到B的回应再给B发一个回应,连接就建立了。

仿照两个人的交流就是这样的:

A:我有点事想和你说,你现在在吗?    上午九点                SYN

B:我现在在的,你在吗?                上午九点零一              ACK+SYN

A:我也在的,okay,开聊吧。         上午九点零二            ACK

如果不是“三次握手”会怎样?比如是两次握手的话。

A:我有点事想和你说,你现在在吗?    上午九点                       

九点零一时,A没收到回应,就再发一次请求:你现在在吗?

九点零二时,A还是没收到回应,又发一次请求:你现在在吗?

。。。

九点零五时,A依然没收到回应,于是不再等待,放弃请求,干其他事去了。

。。。

B:我现在在的。                下午四点

如果是两次握手,那么当B回复他在的时候他以为连接建立了,然而A上午九点发的请求,B下午四点才回应,A不会在那傻等7个小时的,不然太浪费时间了,A可能会由于迟迟收不到回应早就放弃去干其他事了。

接下来B就会傻等,这样太浪费B的时间了。

所以三次握手,可以节省双方时间,当B回复他现在在的时候,他会发个消息给A,等到四点零五仍然收不到A的回应就视为放弃,不再傻等了。

 

为什么断开连接要四次挥手?

实际上,建立连接也可以看作双方互相发了共4个消息,只不过B发的两个消息--“我收到你的请求了”和“你现在在吗?”合并成一个消息发了出去,所以一共就3个消息,对应3次握手,那么断开连接能不能这样简化呢?

来看一下断开连接的过程:

A:我事情已经说完了,打算挂电话了。   (A将不再说话,但是还会听B说话)                 FIN

B:知道了,你先别挂,我事情还没说完呢。  (这是告诉A,我收到你打算挂电话的消息了)        ACK

B:。。。。。冬天到了,天气冷了,多穿衣服啊。。。。。。。。。。。(具体的数据)

B:恩,就这些事,说完了,我也没事了,打算挂电话了 (B的数据传送完了,打算挂电话)        FIN

A:知道了,挂了啊。 (告诉B,我已经断开连接)                                                    ACK

然后B收到A的最后一个断开连接的确认,不再说话,也挂断了。

从上边来看,这没法简化,因为B需要发给A两个消息----“我收到你打算挂电话的消息了(ACK)”和“我也打算挂了(FIN)”,这俩消息之间B有可能得传数据给A。所以先发ACK,然后接着把最后的数据传过去,传完之后发个FIN,很明显,ACK和FIN之间隔着数据,不能合并。

更进一步看,建立连接的过程中,只有请求和确认,没有具体的事情要谈,所以相邻的请求和应答可以合并成一个消息发出去;而断开连接时,可能有一方事情还没说完(首先提出断开的肯定是事情已经说完了的),相邻的FIN和ACK之间还有数据要传送,所以二者不能合并。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值