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三次握手、四次挥手详解(Wireshark实践) -> 正文阅读

[网络协议]TCP三次握手、四次挥手详解(Wireshark实践)

一、ACK、SYN、FIN等标识位

在这里插入图片描述

ACK (Acknowledge character,确认字符)在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1。

SYN(synchronization,同步) 在连接建立时用来同步序号。SYN:同步序列编号(Synchronize Sequence Numbers)。
当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1。
因此, SYN置1就表示这是一个连接请求或连接接受报文。

FIN (finis,终结) 用来释放一个连接。
当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

URG: 紧急指针( urgent pointer)有效。

PSH: 接收方应该尽快将这个报文段交给应用层。

RST: 重建连接。

窗口大小:用于流量控制。
在这里插入图片描述

二、整体过程说明图

在这里插入图片描述

三、三次握手

在这里插入图片描述
三次握手的核心是: 确认每一次包的序列号。

tcp三次握手过程:

1、首先由Client发出请求连接即 SYN=1,声明客户端序号是 seq=x(随机产生)

2、然后Server 进行回复确认,即 SYN=1 ,声明服务端序号是 seq=y(随机产生),并设置为ACK=x+1

3、最后Client 再进行一次确认,设置 ACK=y+1

TCP连接状态详解:

服务器端:LISTEN:侦听来自远方的TCP端口的连接请求

客户端:SYN-SENT:在发送连接请求后等待匹配的连接请求

服务器端:SYN-RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认

客户端/服务器端:ESTABLISHED:代表一个打开的连接

在这里插入图片描述

四、四次挥手

在这里插入图片描述
假设Client端发起中断连接请求,也就是发送FIN报文。

Server端接到FIN报文后,意思是说我Client端没有数据要发给你了,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。

所以你先发送ACK,告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。

这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。

当Server端确定数据已发送完成,则向Client端发送FIN报文,告诉Client端,好了,我这边数据发完了,准备好关闭连接了。

Client端收到FIN报文后,就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。

端收到ACK后,就知道可以断开连接了。
Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。

Ok,TCP连接就这样关闭了!

五、数据包的大致结构

第一行:数据包整体概述,
第二行:链路层详细信息,主要的是双方的mac地址(关注mac)
第三行:网络层详细信息,主要的是双方的IP地址(关注IP)
第四行:传输层的详细信息,主要的是双方的端口号(关注端口号)。

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

六、Wireshark中看TCP三次握手、四次断开

模拟一下tcp会话建立

我们通过Xshell远程连接Kali Linux就会捕获到完整的TCP3次握手的链接。

先清空数据包然后筛选tcp开始抓包

三次握手

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

在这里插入图片描述
到这里三次握手过程就结束了

流程图显示

在这里插入图片描述
在这里插入图片描述
前面3个就是TCP建立链接的过程,后面的就是相互通信的过程了这个时候seq就会根据数据包的大小改变。
在这里插入图片描述
清空数据包来看一下断开链接是一个什么样的过程
在这里插入图片描述

四次挥手

流程图显示
把窗口拉到最下面只看4个数据包
在这里插入图片描述
过程: 我们在终端输入EXIT实际上是在我们Kali 上执行的命令,表示我们SSHD的Server端向客户端发起关闭链接请求。

第一次挥手:服务端发送一个[FIN+ACK],表示自己没有数据要发送了,想断开连接,并进入FIN_WAIT_1状态。

第二次挥手: 客户端收到FIN后,知道不会再有数据从服务端传来,发送 ACK进行确认,
确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),客户端进入CLOSE_WAIT(关闭等待)状态。

第三次挥手: 客户端发送[FIN+ACK]给对方,表示自己没有数据要发送了,
客户端进入LAST_ACK状态,然后直接断开TCP会话的连接,释放相应的资源。

第四次挥手: 服务户端收到了客户端的FIN信令后,进入TIMED_WAIT状态,并发送ACK确认消息。
服务端在TIMED_WAIT 状态下,等待一段时间,没有数据到来,就认为对面已经收到了自己发送的ACK并正确关闭了进入CLOSE状态,
自己也断开了TCP 连接,释放所有资源。当客户端收到服务端的ACK回应后,会进入CLOSE状态并关闭本端的会话接口,释放相应资源。

参考链接

网络基础之网络协议篇——Egon林海峰老师

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:20:34  更:2022-09-15 02:20:44 
 
开发: 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年5日历 -2024/5/19 9:08:50-

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