TCP的三次握手、四次挥手!就像打电话一样简单!

目录

学前必会

三次握手详解

和打电话一样

为什么必须要三次?

四次挥手详解

和挂电话一样

为什么要四次挥手?

[第四次为何要等待 2*MSL?](#第四次为何要等待 2*MSL?)


相关面试题:

  • 说一下三次握手、四次挥手的过程
  • 三次握手四次挥手的目的是什么?
  • 为什么要三次握手?两次不行吗?
  • 为什么挥手要四次?
  • 每次的状态是什么样的?

学前必会

三次握手四次挥手的作用

在TCP/IP模型中,我们都知道在传输层的TCP协议是面向连接 的能保证可靠的数据传输,而学习三次握手、四次挥手其实就是学习TCP协议的连接断开过程

三次握手四次挥手需要标志位

而学习三次握手四次挥手,我们需要用到的有标志位的几个内容

  • ACK:acknowledgement 确认报文
  • seq:sequence 顺序
  • SYN:synchronous 建立联机
  • FIN:finish 结束

三次握手详解

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

第一次:客户端发送一个带有SYN( sql=x )标志的数据包给服务端,客户端状态变为syn_sent状态。

第二次:服务端接收成功后,回传一个带有SYN(sql=y)/ACK(sql=x+1)标志的数据包传递确认信息。其中syn代表询问你能否收到我的信息,ack应答我收到了你的信息。

第三次:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。

和打电话一样

三次询问可以确定我们都能说话,且都能听到对方说话。

其实三次握手就是确定客户端和服务区能收能发的过程。

为什么必须要三次?

从打电话那个图我们也可以很好理解

三次握手就能确认双方收发功能都正常,缺一不可。

若缺少第三次握手,服务器是无法确定自己可以发送信息的,而四次又没有必要,所以三次刚好,即能完成任务又不浪费资源~

四次挥手详解

挥手其实就是断开连接的过程!

第一次挥手:客户端发送一个FIN(seq=x)的数据包给服务器,告诉对方我发完了,自己进入FIN-WAIT-1状态。

第二次挥手:服务区收到后,发送一个ACK(ack=x+1)的数据包给客户端,然后服务器变为CLOSE-WAIT状态,客户端收到后进入FIN-WAIT-2状态。

第三次挥手:服务器发送一个FIN(seq=y)的数据包给客户端,服务器变为LAST-ACK状态。

第四次挥手:客户端收到服务器的FIN后,返回给服务器一个ACK(seq=y+1)的数据包,客户端进入TIME-WAIT状态,服务器收到ACK后进入CLOSE状态。如果客户端等到2msl后依旧没有收到信息则默认服务器已正常关闭,然后自己也进入关闭状态。

和挂电话一样

为什么要四次挥手?

TCP 是全双工通信,可以双向传输数据。

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。

当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。

和三次握手一样,但是挥手多了一次就是因为 中间可能还有信息没有发完,所以第二次和第三次的ACK和FIN不能合并发送!没有发完的信息在这两次回收之前发完!

这就好像打电话时候的 "你等我把话说完" "巴拉巴拉巴拉~~" "好了,挂了吧"

第四次为何要等待 2*MSL?

第四次挥手时,客户端发送给服务器的 ACK 有可能丢失,如果服务端因为某些原因而没有收到 ACK 的话,服务端就会重发 FIN,如果客户端在 2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。

相关推荐
严谨的麻辣烫13 小时前
数据中心出口与住宅出口的技术差异:从 ASN 到 TCP 行为的一次拆解
网络·网络协议·tcp/ip
Freed&13 小时前
Zabbix TCP连接状态自定义监控完整部署手册
网络·tcp/ip·zabbix
学着改变27514 小时前
手持式超声波流量计为何首选行澳科技?便携巡检与外夹计量的性能标杆
大数据·网络·人工智能·科技·产品运营·量子计算
kyriewen14 小时前
今年裁了16万技术人——但字节前端岗反而涨了23%
前端·javascript·面试
IT古董15 小时前
【MES学习笔记系列】MES 厂商与产品对比
笔记·学习
2501_9159214315 小时前
抓包鹰 Traceeagle 解除证书绑定,SSL Pinning 解除
网络·网络协议·网络安全·ios·adb·https·ssl
Lucky_Turtle15 小时前
【SSL】letsencrypt域名证书申请,Cloudflare域名
网络·网络协议·ssl
wangyue_msn_8615 小时前
Agent知识学习笔记——03 RAG
笔记·学习·ai编程
嘶哈哈哈15 小时前
# 异构十电机机架数学建模:从单电机力矩到受约束控制分配
笔记
呱呱巨基15 小时前
Linux 查找命令
linux·笔记·学习·查找命令