TCP三次握手与四次挥手
来源:互联网 发布:南京纬创软件 编辑:程序博客网 时间:2024/06/15 17:08
【背景】TCP的可靠性依据:
①.基于请求确认机制
②基于序号,只有经过确认的消息才是可靠的。
③TCP是面向连接 、 全双工、给予字节流的
④基于信号机制可以保证数据按序到达,以及丢包重传问题
⑤基于滑动窗口(按缓冲区大小)进行流量控制,(永远填自己的缓冲区大小)
⑥TCP如果出现大面积丢包,TCP执行自己的网络拥塞避免算法
⑦TCP当中维护了四种定时器: 重传定时器 、 坚持定时器 、 保活定时器、时间等待定时器。
【三次握手】
1.为什么不是两次握手?
因为主要是防止已失效的连接请求(SYN=1[同步请求标志])报文段突然有效传达到了B,但B收到此失效的连接报文请求段后,就误认为是A又发出的一次新的连接请求。
如果是三次握手的话,B由于收不到确认,就知道A并没有要求建立连接的需求。
2.为什么不是四次握手呢?
因为最后一次握手的时候,当服务器发送数据后,自己就会进入ESTABLISH状态,进入这个状态,系统为了方便管理,首先会去描述它,(此时客户端A真正的连接还没有建立,但服务器却已经建立了),因为服务器是1对多的关系,而客户端是1对1的关系。势必这会对服务器应相互比较大。
所以,应该让这种消耗就分配到客户端上。进行三次握手,客服端发出最后一次握手时,客户端就会建立连接。
最后一次握手,不保证数据的可靠性,它带来的消耗分配到客户端是比较合理的。
3.Tcp连接是全双工的,双方只有经过确认的消息才是可靠的 。
当客户端发起请求后,服务器端要经过确认,整体下来就至少需要三次握手了。
【四次挥手】
1.为什么要四次挥手
基于全双工模式,双方是平等的,分手是两个人的事情。
当一方发起请求我们分手吧,经过确认发送:我们可以分手了,此时还需要将自己的 事情做完,自己还有一部分数据没有发完。发完之后,就发送那好吧,我们分手吧。
经过确认,双方都进入closed状态。
2.主动断开链接的一方为什么要进入TIME_WAIT状态?
进入TIME_WAIT状态,会启动时间等待计时器设置的时间是2MSL(MSL最长报文段寿命)。
原因有两个:
①为了保证A发送的最后一个ACK报文段能够到达B这个ACK报文段有可能丢失,因此处于LAST_ACK状态的B,因为收不到对方发送的FIN_ACK报文段的确认,B会超时重传FIN_ACK,而A就能在2MSl时间内收到这个重传的FIN_ACK报文段。接着A重传一次确认,重新启动2MSL计时器。
②防止已失效的连接请求出现在本连接中,A在发送完最后一个ACK报文段后,在经过时间2MSL,就可以是本连接持续时间内所产生的所有报文段都从网络中消失。
- Tcp三次握手与四次挥手
- Tcp三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP三次握手与四次挥手!
- TCP三次握手与四次挥手
- TCP三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- TCP的三次握手与四次挥手
- TCP/IP三次握手与四次挥手
- C++ bind参数绑定
- leetcode 452. Minimum Number of Arrows to Burst Balloons
- spacemacs操作卡顿的解决方法
- 应用JavaScript(一):表单验证
- 搭建自己的Nuget服务器
- TCP三次握手与四次挥手
- Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
- LCS求最长公共子串
- Linux权限
- web安全色
- Babelfish POJ
- 单变量线性回归中的梯度下降法求解代价函数的最小值
- Linux下安装Mongodb
- LeetCode