IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP/IP三次握手四次挥手详解 -> 正文阅读

[网络协议]TCP/IP三次握手四次挥手详解

TCP结构图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三次握手执行过程

第一次握手:客户端发送一个SYN报文,随机产生一个seq = x,此时客户端进入SYN-SENT状态(发送了请求,等待被连接状态).
1.SYN = 1,seq=x.
第二次握手:服务端收到客户端建立连接的请求,发送自己的SYN报文作为应答,生成自己的序列号seq= y,把客户端的序列号加1作为自己ack的值,ack=x+1,此时服务端进入SYN-RCVD(接收到客户端的请求,.并响应客户端的请求,等待被确认)
2:SYN=1,ACK=1,1表示确认收到,seq=y,ack=x+1, 希望对方下一次发送, 从序号x+1开始
第三次握手:客户端收到同意的报文后,向服务端发送了一个确认报文,表示已经收到服务器端的同意连接的报文,把服务端的序列号加1作为ack 的值,发送完客户端进入ESTAB-LISHED状态
3:ACK=1,seq=x+1,ack=y+1

为什么需要三次握手?

第一次握手:客户端发送网络包,服务端收到了。

? 这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

第二次握手:服务端发包,客户端收到了。

? 这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务端并不能确认客户端的接收能力是否正常。

第三次握手:客户端发包,服务端收到了。

? 这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。

所以,只有三次握手才能确认双方的接收与发送能力是否正常。

四次挥手

在这里插入图片描述
第一次:客户端需要释放连接,所以向服务器端发送是释放连接请求,FIN=1,seq=u,发送完毕客户端进入FIN-WAIT-1(中断等待状态1)
1:FIN=1,seq=u
第二次:服务端收到释放连接请求后,发送ACK报文响应客户端:ACK=1,seq=v,ack=u+1,服务端进入CLOSE-WAIT(关闭等待状态),此时还可以发送数据
2.ACK=1,seq=v,ack=u+1 下次请求序号为u+1
第三次挥手:服务端响应完数据并打算断开请求,向客户端发送释放连接请求:FIN=1,seq=w,ack=u+1,发送完毕后,服务端进入LAST_ACK(最后确认状态)
3:FIN=1,seq=w,ack=u+1
第四次;客户端收到释放连接请求后,向服务端发送一个确认报文,客户端进入TIME-WAIT,并等待2MSL时间,若此时间没有收再次收到服务器端的重发请求(FIN释放连接请求),则进入CLOSED状态.
4.ACK=1,seq=u+1,ack=w+1.

为什么需要四次挥手

对于四次挥手,因为 TCP 是全双工通信,在主动关闭方发送 FIN 包后,接收端可能还要发送数据,不能立即关闭服务器端到客户端的数据通道,所以也就不能将服务器端的 FIN 包与对客户端的ACK 包合并发送,只能先确认 ACK,然后服务器待无需发送数据时再发送 FIN 包,所以四次挥手时必须是四次数据包的交互。

挥手次数比握手多一次,是因为握手过程,通信只需要处理连接。而挥手过程,通信需要处理数据+连接

四次挥手释放连接时,等待2MSL的意义?

1.保证客户端发送的最后一个ACK报文段能够到达服务端。
为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
2防止“已失效的连接请求报文段”出现在本连接中
客户端在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。

TCP和UDP的区别

  1. 连接方式不同。

? TCP需要三次握手建立连接。UDP是无连接的。

? TCP: 需要建立连接之后才能发送消息

? UDP: 只要监听了ip+port, 符合条件的请求就能接收到

  1. 数据完整性不同。

? TCP是可靠的。UDP不能保证数据完整性的。

  1. 数据内容类型不同。

? TCP是字节流。UDP是报文,即对字节数据的再次封装。

  1. 可接收目标主机数量不同。

? TCP是标准的点对点。UDP可以是一对一,一对多,多对多数据传输。

  1. 首部开销不同。

? TCP首部开销20字节。UDP首部开销8字节。

  1. 传输效率不同

? UDP比TCP传输效率更高。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 13:08:02  更:2022-10-17 13:11:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:37:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码