三次握手,四次挥手速记版
本文同步发表于微信公众号微信搜索程语新视界即可关注每个工作日都有文章更新三次握手和四次挥手是 TCP 协议中建立与关闭连接的关键机制常因流程抽象而难以记忆。结合权威资料和通俗类比以下是清晰、易记的要点三次握手建立连接目的确认双方收发能力正常并协商初始序列号ISN。过程客户端 → 服务端发送SYN1, seqx请求连接。服务端 → 客户端回复SYN1, ACK1, ackx1, seqy确认 请求连接。客户端 → 服务端发送ACK1, acky1确认连接。为什么不能是两次两次无法确认客户端的接收能力。若第二次握手后服务端认为连接已建立但客户端未收到响应会导致服务端浪费资源等待。四次挥手关闭连接目的安全关闭双向连接确保数据全部传输完毕。过程假设客户端主动关闭客户端 → 服务端发送FIN1不再发送数据。服务端 → 客户端回复ACK确认收到关闭请求。服务端 → 客户端发送FIN1自己也准备关闭。客户端 → 服务端回复ACK进入TIME_WAIT等待 2MSL 后关闭。为什么是四次而非三次TCP 是全双工协议双方需独立关闭数据流。服务端收到客户端的FIN后可能仍有数据未发送完因此ACK和FIN不能合并。关键状态与细节三次握手状态客户端CLOSED → SYN_SENT → ESTABLISHED服务端LISTEN → SYN_RCVD → ESTABLISHED四次挥手状态客户端ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED服务端ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSEDTIME_WAIT 作用确保最后ACK被服务端收到。若丢失服务端会重传FIN同时防止旧连接报文干扰新连接。如果还是记不住可以按照实际生活例子来记比喻三次握手 电话确认“喂你听得到吗” → “听得到”你听得到我吗 → “听得到”四次挥手 道别“我先挂了哈” → “好” → “我也挂了” → “嗯”。TCP三次握手和四次挥手是TCP协议建立和断开连接的核心过程其本质可理解为通信双方在开始对话前和结束对话后为确保沟通顺畅而进行的“打招呼”与“告别”。三次握手建立连接这个过程好比两个人通过电话确认通信线路畅通。第一次握手询问客户端主动联系服务器发送一个带有“SYN”标志的报文。这好比打电话时客户端说“你好我是A能听到吗我想和你通话。”第二次握手确认与回应服务器收到后回复一个同时带有“SYN”和“ACK”标志的报文。这相当于服务器回答“你好A我能听到。我是B我也准备好了。”第三次握手最终确认客户端收到服务器的回复后再发送一个“ACK”报文。这就像客户端最后说“好的B我确认我们连接上了可以开始通话了。”至此连接建立。之所以需要三次而非两次是为了防止因网络延迟导致失效的连接请求占用服务器资源确保连接的可靠性。四次挥手断开连接这个过程好比两个人结束通话时的礼貌告别。由于TCP连接是全双工的双方可同时收发数据断开需要两个方向分别关闭。第一次挥手单方面结束发送主动关闭方例如客户端发送一个“FIN”报文。这表示“我要说的话都说完了不会再发送新数据了。”第二次挥手确认收到结束请求被动关闭方例如服务器收到“FIN”后立即回复一个“ACK”报文。这表示“好的我知道你不再发送了。”但此时服务器可能还有数据需要发送给客户端。第三次挥手另一方结束发送当服务器也完成数据发送后它发送自己的“FIN”报文给客户端。这表示“我这边也说完了也不再发送数据了。”第四次挥手最终确认客户端收到服务器的“FIN”后回复一个“ACK”报文。这表示“明白我们正式结束通话。”之后服务器会立即关闭连接。客户端则会等待一个短暂的时间TIME_WAIT状态以确保服务器收到了最后的确认报文然后才完全关闭连接。之所以是四次挥手是因为服务器在收到客户端的结束请求后通常需要时间处理完剩余数据其确认ACK和自身的结束请求FIN无法像握手时那样合并发送因此比三次握手多了一次交互。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2474194.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!