网络TCP建立连接为什么需要三次握手而结束要四次
来源:互联网 发布:苹果软件 编辑:程序博客网 时间:2024/05/29 03:00
举个打电话的例子:
A : 你好我是A,你听得到我在说话吗
B : 听到了,我是B,你听到我在说话吗
A : 嗯,听到了
建立连接,开始聊天!
为什么TCP协议终止链接要四次?
1、当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B。
2、主机B收到A发送的FIN,表示收到了,就会发送ACK回复。
3、但这是B可能还在发送数据,没有想要关闭数据口的意思,所以FIN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A。
4、A收到B发来的FIN,知道B的数据也发送完了,回复ACK, A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。
A为什么等待2MSL,从TIME_WAIT到CLOSE?
在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
这个网上转载的例子不错:
三次握手:
A:“喂,你听得到吗?”A->SYN_SEND
B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED
A:“我能听到你,今天balabala……”B->ESTABLISHED
四次挥手:
A:“喂,我不说了。”A->FIN_WAIT1
B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2
B:”好了,说完了,我也不说了。”B->LAST_ACK
A:”我知道了。”A->TIME_WAIT | B->CLOSED
A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED
链接:https://zhuanlan.zhihu.com/p/21940234
参考:http://blog.chinaunix.net/uid-25002135-id-3314682.html
http://www.cnblogs.com/vamei/archive/2012/12/16/2812188.html
- 网络TCP建立连接为什么需要三次握手而结束要四次
- 网络TCP建立连接为什么需要三次握手而结束要四次
- 网络TCP建立连接为什么需要三次握手而结束要四次
- 网络TCP建立连接为什么需要三次握手而结束要四次
- TCP建立连接为什么需要三次握手而结束要四次
- TCP建立连接为什么需要三次握手而结束要四次
- tcp协议建立连接 为什么是三次握手 而 断开连接需要四次?
- TCP为什么要三次握手而结束要四次
- 转载:TCP为什么要三次握手而结束要四次
- TCP需要三次握手才能建立,而断开连接则需要四次握手
- 为什么TCP连接需要三次握手而分开需要四次握手
- 为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?
- 为什么TCP连接需要三次握手分开需要四次握手
- 为什么TCP连接需要三次握手分开需要四次握手?
- 为什么TCP连接需要三次握手分开需要四次握手
- 为什么TCP连接需要三次握手分开需要四次握手
- 为什么TCP连接需要三次握手分开需要四次握手?
- 为什么TCP连接需要三次握手分开需要四次握手?
- 翻转链表
- hdu 1059 Dividing
- 第9章缓动动画
- C语言打印1000内的完数
- 解决mybatis的SELECT command denied to user 'root'@'192.168.1.47' for table 'user'的报错。mysql用户权限修改,表权限修改。
- 网络TCP建立连接为什么需要三次握手而结束要四次
- 常用排序算法-冒泡排序
- bzoj 2730 点连通求割点
- RESTful API的由来
- oracle 之除数不为0
- [jzoj3889]【NOIP2014模拟10.25B组】序列问题
- [转]pycharm的一些快捷键
- 机器学习——推荐系统 知识点总结
- hexo入门学习(二):关联GitHub