【TCP】TCP三次握手与四次挥手
一、TCP三次握手
第一次握手:Client 将标志位 SYN=1 ,随机产生一个值 seq=J ,并将该数据包发送给 Server 。此时,Client 进入SYN_SENT 状态,等待 Server 确认。
第二次握手:Server 收到数据包后由标志位 SYN=1 知道Client请求建立连接,Server 将标志位 SYN 和 ACK 都置为 1 ,ack=J+1,随机产生一个值 seq=K ,并将该数据包发送给 Client 以确认连接请求,Server 进入 SYN_RCVD 状态。此时,Server 进入 SYC_RCVD 状态。
第三次握手:Client 收到确认后,检查 ack 是否为 J+1 ,ACK 是否为 1 。
如果正确,则将标志位 ACK 置为 1 ,ack=K+1 ,并将该数据包发送给 Server 。此时,Client 进入 ESTABLISHED 状态。
Server 检查 ack 是否为 K+1 ,ACK 是否为 1 ,如果正确则连接建立成功。此时 Server 进入 ESTABLISHED 状态,完成三次握手,随后 Client 与 Server 之间可以开始传输数据了。
Client 和 Server 互相做了一次 SYNC 和 ACK 。
问题:TCP为什么需要三次握手,为什么不是两次?
为了防止已失效的连接请求报文突然又传送到了服务端,因而产生错误。
客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达 Server 。
若不采用“三次握手”,那么只要 Server 发出确认数据包,新的连接就建立了。由于 Client 此时并未发出建立连接的请求,所以其不会理睬 Server 的确认,也不与 Server 通信;而这时 Server 一直在等待 Client 的请求,这样 Server 就白白浪费了一定的资源。
若采用“三次握手”,在这种情况下,由于 Server 端没有收到来自客户端的确认,则就会知道 Client 并没有要求建立请求,就不会建立连接。
二、TCP四次挥手
第一次挥手:Client 发送一个 FIN=M ,用来关闭 Client 到 Server 的数据传送。此时,Client 进入 FIN_WAIT_1 状态。
第二次挥手,Server 收到 FIN 后,发送一个 ACK 给 Client ,确认序号为 M+(与 SYN 相同,一个 FIN 占用一个序号)。此时,Server 进入 CLOSE_WAIT 状态。注意,TCP 链接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接收。
第三次挥手,Server 发送一个 FIN=N ,用来关闭 Server 到 Client 的数据传送。此时 Server 进入 LAST_ACK 状态。
第四次挥手,Client 收到 FIN 后,此时 Client 进入 TIME_WAIT 状态。接着,Client 发送一个 ACK 给 Server ,确认序号为 N+ 。Server 接收到后,此时 Server 进入 CLOSED 状态,完成四次挥手。
问题:TCP为什么需要四次挥手?
首先TCP 是全双工模式,需要双向都断开连接。
当主机 1 发出 FIN
报文段时,只是表示主机 1 已经没有数据要发送了,主机 1 告诉主机 2 ,它的数据已经全部发送完毕了;但是,这个时候主机 1 还是可以接受来自主机 2 的数据;
当主机 2 返回 ACK
报文段时,表示它已经知道主机 1 没有数据发送了,但是主机 2 还是可以发送数据到主机 1 的。
因为主机 2 此时可能还有数据想要发送给主机 1 ,所以挥手不能像握手只有三次,而是多了那么“一次”!
当主机 2 也发送了 FIN
报文段时,这个时候就表示主机 2 也没有数据要发送了,就会告诉主机 1 ,我也没有数据要发送了,之后彼此就会愉快的中断这次 TCP 连接。
问题:为什么需要TIME_WAIT?
因为在第四步的时候,client发送的ACK可能丢失并导致server重新发送FIN消息,TIME_WAIT维护连接状态.
如果执行主动关闭的一方client不进入到TIME_WAIT状态就关闭连接那会发生什么呢?当重传的FIN消息到达时,因为TCP已经不再有连接的信息了,所以就用RST(重新启动)消息应答,导致server进入错误的状态而不是有序终止状态,如果发送最后ACK消息的一方处于TIME_WAIT状态并仍然记录着连接的信息,它就可以正确的响应对等方server的FIN消息了.
【TCP】TCP三次握手与四次挥手的更多相关文章
- TCP的三次握手与四次挥手
TCP的三次握手与四次挥手 一.TCP(Transmission Control Protocol 传输控制协议) TCP是面向对连接,可靠的进程到进程通信的协议 TCP是提供全双工服务,即数据可在同 ...
- 你应该这么理解TCP的三次握手和四次挥手
前言: TCP协议是计算机的基础,他本身是一个非常非常复杂的协议. 本文只是蜻蜓点水,将从网络基础以及TCP的相关概念介绍开始,之后再将三次握手,四次挥手这些内容来阐述. 最后介绍一些常见问题,并给出 ...
- TCP/IP三次握手与四次挥手的正确姿势
0.史上最容易理解的:TCP三次握手,四次挥手 https://cloud.tencent.com/developer/news/257281 A 理解TCP/IP三次握手与四次挥手的正确姿势http ...
- TCP的三次握手与四次挥手详解
TCP的三次握手与四次挥手是TCP创建连接和关闭连接的核心流程,我们就从一个TCP结构图开始探究中的奥秘 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序 ...
- 【图解】给面试官解释TCP的三次握手与四次挥手-Web运用原理及网络基础
作者 | Jeskson 来源 | 达达前端小酒馆 轻松了解HTTP协议 为什么要学习网络协议呢?为什么要学习计算机完了呢?显然这很重要,至少能够帮助你找到工作的原因之一,学习网络知识点太多太多,没有 ...
- TCP的三次握手与四次挥手笔记
TCP的三次握手与四次挥手笔记 TCP Flags URG: 紧急指针标志 ACK:确认序号标志 PSH:push标志 RST:重置连接标志 SYN:同步序号,用于建立连接过程 FIN: finish ...
- TCP的三次握手与四次挥手理解及面试题
TCP的三次握手与四次挥手理解及面试题(很全面) 转载自:https://blog.csdn.net/qq_38950316/article/details/81087809 本文经过借鉴书籍资料.他 ...
- TCP 的三次握手和四次挥手
参考资料: 1.TCP的三次握手与四次挥手理解及面试题: 2.Http协议三次握手和四次挥手: 3.TCP通信的三次握手和四次撒手的详细流程(顿悟) 前置: 序号(也称序列号) - Sequence ...
- WireShark抓包分析以及对TCP/IP三次握手与四次挥手的分析
WireShark抓包分析TCP/IP三次握手与四次挥手 Wireshark介绍: Wireshark(前称Ethereal)是一个网络封包分析软件.功能十分强大,是一个可以在多个操作系统平台上的开源 ...
- 【计算机网络】TCP的三次握手与四次挥手
今天讲一下TCP的三次握手与四次挥手 1.首先说TCP 协议的特点:TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠.有序.无丢失和不重复问题.TCP 是TCP/IP 体系中 ...
随机推荐
- 《Machine Learning - 李宏毅》视频笔记(完结)
https://www.youtube.com/watch?v=CXgbekl66jc&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49 https://www. ...
- ZROI 暑期高端峰会 A班 Day3 图论
最短路 NOI2019 D2T1 弹跳 KD 树 线段树套set -> 线段树套并查集? POI2014/2015 ??? \(n\) 个点 \(m\) 条边 DAG.求删掉每个点后 \(1\) ...
- UDF——文件编码造成UDF编译失败
有时候我们觉得我们的代码写得很正确的,但是在Fluent当中编译的时候一直编译不通过,提示我们错误,我们根据Fluent当中的错误提示去找到源代码中对应的行,却发现没有错误提示当中的问题,出现这个问题 ...
- 腾讯云VPS注意事项
这几天腾讯云VPS搞活动 买了2台服务器, 1台是1核2G1M带宽,一年99 1台是2核4G6M带宽,三年1499 前几年一直在用阿里云,感觉价格太贵,价格上腾讯云,搞活动真的优惠比较大, 最近也准备 ...
- word2vec学习总结
目录 1.简介 2.从统计语言模型开始 2.1序列概率模型 2.2 N元统计模型 3.深度序列模型 3.1神经概率模型 3.2 one-hot向量表示法 3.3 word2vec 3.4word2ve ...
- 【IntelliJ IDEA学习之三】IntelliJ IDEA常用快捷键
版本:IntelliJIDEA2018.1.4 按场景列举一.打开设置CTRL + ALT + S:打开设置(File-->Settings...)Ctrl + Shift + Alt + S: ...
- 【06月19日】A股滚动市盈率PE最低排名
仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 方大集团(SZ000055) - 滚动市盈率PE:2.59 - 滚动市净率PB:1.16 - 滚动年化股息收益率:3.91% - 建筑 ...
- 高系统的分布性有状态的中间层Actor模型
写在前面 https://www.cnblogs.com/gengzhe/p/ray_actor.html Orleans是基于Actor模型思想的.NET领域的框架,它提供了一种直接而简单的方法来构 ...
- Git/SVN提交代码规范
feat - 新功能 feature fix - 修复 bug docs - 文档注释 style - 代码格式(不影响代码运行的变动) refactor - 重构.优化(既不增加新功能,也不是修复b ...
- Tomcat 部署 Jenkins (Linux系统)
环境说明:Linux环境,CentOS 7版本. 关于部署tomcat,见上一篇博客:https://www.cnblogs.com/lelelong/p/10252225.html 接着,在Tomc ...