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。

相关推荐
007php0072 小时前
mySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据
数据库·redis·git·mysql·面试·职场和发展·php
Love Song残响2 小时前
深入解析TCP/IP协议栈:从底层到应用层
网络·tcp/ip·php
深情的小陈同学2 小时前
工作学习笔记 —— 支持手机端的添加表单行操作
笔记·学习·ai编程
鱼跃鹰飞2 小时前
JMM 三大特性(原子性 / 可见性 / 有序性)面试精简版
java·jvm·面试
线束线缆组件品替网3 小时前
IO Audio Technologies 音频线缆抗干扰与带宽设计要点
网络·人工智能·汽车·电脑·音视频·材料工程
am心3 小时前
学习笔记-小程序-导入商品浏览功能实现
笔记·学习
布谷歌3 小时前
开发笔记:如何消除秘钥数据对RPC负荷、日志、系统安全的伤害?
网络·笔记·网络协议·rpc
咒法师无翅鱼3 小时前
【西电计网学习笔记】网络层【RIP,OSPF,ARP,ICMP,IGMP,逻辑寻址(ABCD四类)】
网络
Ares-Wang3 小时前
网络》》以太网交换安全
网络·安全
XiaoHu02073 小时前
Linux网络编程套接字
linux·服务器·网络·git