TCP/IP三次握手与四次握手
原文地址 http://blog.csdn.net/whuslei/article/details/6667471
http://blog.csdn.net/wo2niliye/article/details/48447933
建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:
先来看看如何建立连接的。
首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。
那如何断开连接呢?简单的过程如下:
【注意】中断连接端可以是Client端,也可以是Server端。
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
整个过程Client端所经历的状态如下:
而Server端所经历的过程如下:转载请注明:blog.csdn.net/whuslei
【注意】 在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。
【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
转载于:https://www.cnblogs.com/carlos-liye/p/6681310.html
TCP/IP三次握手与四次握手相关推荐
- TCP的三次挥手、四次握手
三次握手 相关参数的描述: 消息类型 描述 SYN 同步序列编号 用来初始化和建立连接的 ACK 确认字符 帮助对方确认收到的SYN消息 SYN-ACK 本地的SYN消息和较早的ACK数据包 FIN ...
- TCP/IP协议三次握手与四次握手流程解析
原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...
- 在深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP
如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...
- 再深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP
转载地址: https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/network/2015_0708_65.html 如果对网络 ...
- 【运维面试】面试官问到tcp/ip三次握手,四次挥手,这么回答就对了
我之前面试过很多运维人员,每次都绕不开tcp/ip三次握手,四次挥手: 面试者的回答也是八仙过海各显神通 有讲故事的,有画图的,有把自己讲晕了的: 那这个该怎么回答呢? 我总结下来可以这么来说: 三次 ...
- 网络基础4(TCP三次握手,四次握手,TCP流量控制,TCP状态转换 , TCP异常断开,设置TCP属性,端口复用)
TCP协议 TCP通信时序 下图是一次TCP通讯的时序图.TCP连接建立断开.包含大家熟知的三次握手和四次握手. TCP通讯时序 在这个例子中,首先客户端主动发起连接.发送请求,然后服务器端响应请求, ...
- 使用tcpdump探测TCP/IP三次握手
读计算机应该就同说过TCP/IP三次握手,但是都没有去验证过,今天心血来潮,去验证了一下,于是乎写下了这篇博客,可能写的可能有问题,还请多多指教 包括我学习,还有从很多资料来看资料,第三次握手,应该会 ...
- 详情讲述Linux网络编程关注的问题丨epoll原理丨reactor模型丨三次挥手丨四次握手丨多线程丨单线程丨C/C++Linux丨C++后端开发
90分钟搞懂linux网络编程关注的问题 1. 三次挥手,四次握手 2. epoll实现原理剖析 3. reactor模型封装 单线程.多线程以及多进程 视频讲解如下,点击观看: 详情讲述Linux网 ...
- 什么是三次握手和四次握手
什么是三次握手和四次握手 1. 三次握手 1.1 什么是三次握手 (three-way handshake)? 1.2 TCP建立连接可以两次握手吗?为什么? 1.3 可以采用四次握手吗?为什么? 1 ...
- 以女朋友为例讲解 TCP/IP 三次握手与四次挥手
来自:开源中国,作者:Champin 链接:https://my.oschina.net/u/3708120/blog/1581023 背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一 ...
最新文章
- 再理解RankNet算法
- 关于onreadystatechange属性(转)
- 怎么在苹果Mac虚拟机上安装Win7
- pandas输出列名_pandas中的DataFrame按指定顺序输出所有列的方法
- 树莓派使用STEP3:更换镜像源
- 解析DataWorks数据集成中测试连通性失败问题
- Qt工作笔记-使用QGraphicsItem绘制复杂的图形
- 首次击败美国!2019《财富》世界500强公布:129家中国公司上榜
- 非旋转Treap及可持久化[Merge,Split]
- mysql 分表查询外连接_SQL多表连接查询实例(内连接外连接)
- 辽宁电信TY12008-Z_智能机顶盒2.0_S905MB_线刷固件包
- MT6739充电IC集成步骤
- 如何使用Loadrunner12在win10系统 最新版本谷歌浏览器录制脚本
- 2020-GKCTF-Reverse
- 灰色预测残差修正 matlab,基于残差修正灰色预测模型的长期电力负荷预测方法与流程...
- C 喵帕斯之平地摔 SDUT
- habor-deploy docker https 私有仓库搭建
- INT303 Big Data 个人笔记
- 苹果笔的代替笔有哪些?Ipad好用电容笔测评
- 【论文阅读】PAIRWISE LINKAGE FOR POINT CLOUD SEGMENTATION-ISPRS-luxiaohu
热门文章
- 关于erlang的套接字编程
- LaTeX 基础笔记。开篇
- sqlserver 中事务与错误机制的处理
- Oracl数据库中大数据的备份-1
- 用 .NET 3.5 创建 ToJSON() 扩展方法
- tesorflow 填充‘same’与‘valid’
- C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题
- Page directive: illegal to have multiple occurrences of contentType with different values
- 状态栏编程(显示系统时间和进度条)
- 信管家源代码c语言,用队列实现按层次创建二叉树的源代码,最好是C语言