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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> wireshark——TCP&UDP协议 -> 正文阅读

[网络协议]wireshark——TCP&UDP协议

TCP协议

定义

Transmission Control Protocol,即传输控制协议。是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议,由IETF的RFC793说明。

TCP报文格式
在这里插入图片描述

功能

在计算机网络OSI模型中,它完成第四层传输层所指定的功能,给数据提供可靠的端到端的传输,能够处理顺序传输和恢复错误,并且保证数据能够到达目的地。

端口号

1、TCP段结构中端口地址都是16比特,可以有在0~65535范围内的端口号。1至1023号端口属于标准端口组,往往是特定的服务所使用的。而1024至65535号端口则是临时端口,需要使用时,操作系统会在通信时以随机的方式或者采用一定的策略进行选择。
2、所有TCP通信都会使用源端口和目的端口,这些信息可以在每个TCP数据包的头部找到。为了能够将数据传输到远程服务器或设备的特定应用中去,TCP数据包必须知道远程服务所监听的端口。

例子:

在这里插入图片描述
分析: 查看第一个数据包的TCP头部。可以看到这个数据包源地址和目的地址,它的源端口号是2826,属于临时端口,它是由操作系统选取的。目的端口是80端口,这是一个标准端口,这个端口通常提供给使用HTTP的Web服务器。

查看wireshark的端口关联的常用服务
选择菜单栏的“Edit”——“Preference”——“Name Resolution”——勾选“Resolve transport names”,就可以打开传输端口的解析,在Packet Details面板就能显示啦,但有时wireshark的解析不一定对,我的另一个文章有解释哟https://blog.csdn.net/Woolemon/article/details/124004225

所有基于TCP的通信都以相同的方式工作
选择一个随机的源端口与一个已知的目标端口进行通信。在发出数据包之后,远程设备就会与源设备使用建立起的端口进行通信。

为了提高传送效率避免出现丢包现象
发送方需要知道接收方的接收窗口和网络带宽哪一个才是瓶颈,然后在限制的范围内发送。一口气能发送的数据量等于TCP窗口大小。

TCP三次握手

在这里插入图片描述
Seq:请求的序列号,ACK:确认序列号,SYN和ACK:控制位。

1、第一次握手
在第一次握手 建立连接时,客户端会向服务器发送SYN数据包(SYN=1,seq=x),并进入SYN_SENT状态,等待服务器的确认。
2、第二次握手 分为两步来完成的,即SYN加上ACK,也就是请求和确认数据包。
(1)服务器收到了客户端的请求,向客户端回复一个确认信息(ack=x+1)。
(2)服务器再向客户端发送一个SYN包(seq=y)从而建立连接请求,此时服务器进入了SYN_RCVD状态。
3、第三次握手 客户端收到服务器的回复,也就是SYN加上ACK数据包。此时,客户端也要向服务器发送确认数据包(ACK)并置发送序号。
发送完毕之后,客户端和服务器就进入了ESTABLISHED的状态,从而完成了三次握手。客户端和服务端就可以开始传输数据了。

  • 发送方下一个Seq的值=上一个数据包的Seq值加上数据包长度Len=接收方这次的ACK值。
  • 第一个数据包长度Len是不包括TCP头的长度,其他数据包Len的值尽管为0,但其实这里面是包含有TCP头的,另外TCP的确认ACK是可以累加的。
  • 当出现了丢包的情况,接收方只要通过前一个Seq+Len的值再减去下一个Seq的差,就可以判断丢了哪些包。
  • 如:假设接收方并未收到2号数据包,那么这里可以先计算一下1号数据包的Seq+Len的值,假设为4131971144,再减去下一个数据包的Seq,假设结果是1448,那么就可以知道有Len=1448的数据包丢失了。

将TCP数据包的序列号恢复为原始值
选择菜单栏的“Edit”——“Preference”——展开窗口左侧的“Protocols”——选择“TCP”——取消勾选“Analyze TCP sequence numbers”——单击OK

TCP通信断开

在TCP通信中,每次握手之后都会有断开的操作,一旦TCP通信结束,就会使用4个数据包以及一个FIN标志表明连接的结束。
在这里插入图片描述
TCP的断开步骤如下

1、客户端向服务器发送一个设置了FIN和ACK标志位的TCP数据包,告诉服务器通信完成。
2、服务器收到客户端发来的数据包后,发送一个ACK数据包来回应客户端。
3、服务器再向客户端传输一个自己的FIN/ACK数据包。
4、客户端收到服务器的FIN/ACK数据包后,再向服务器发送一个ACK数据包,之后就结束通信过程。

TCP 通信重置重传

原因:正常情况下,TCP通信的连接都会以TCP的四次握手断开。但现实中,网络连接有时会出现断掉,有可能是遭受到了网络攻击,也有可能是出现了配置错误的情况等等。此时就需要建立TCP通信重置告诉对方,即使用设置了RST标志的TCP数据包,表示出现了连接被异常终止或拒绝连接的请求。

在TCP重传的理论中,重传计时器是用于决定是否有必要进行数据包重传的一个主要机制。
重传计时器:维护着一个叫做重传超时(Retransmission timeout,RTO)的值。
往返时间(Round-trip time,RTT):从发送数据包到接收到确认数据包的时间。

判断包是否丢失

1、在使用TCP进行数据包的传送时,重传计时器就会被启动。
2、当收到数据包的ACK,也就是确认数据包时,计时器就会停止。
3、然后将若干个往返时间求和并计算平均值,就可以得出最终的RTO值。一旦RTO值被确定下来,重传计时器就被应用于每个传输的数据包,从而确定数据包是否丢失。

!注意在最终计算出RTO值之前,数据的传输操作将会一直依赖于默认的RTT值。这个设置用于主机之间的初始通信,并基于接收到的数据包的RTT进行调整,从而形成真正的RTO值。

什么时候重传

1、当数据包发送出去,但接收方没有发送TCP ACK数据包时,发送方就假设原来发送的数据包并没有发送到目标主机,认为它丢失了,于是就进行重传。
2、因为Seq序列号可以帮助数据进行有序的传输,如果接收方遇到不符合顺序的序列号,就知道数据包丢失了,然后接收方会发送重复的包含丢失数据包序列号的ACK数据包给发送方,发送方看到就会立刻发起快速重传的机制。

每次的重传,都会导致RTO的值翻倍,直至收到ACK数据包,或者发送方达到配置的最大重传次数为止。

wireshark中将TCP重传数据包标志
Edit——Preferences——Protocols——tcp——将analyze tcp sequence numbers勾选——apply——ok

判断数据包是否是重传

当接收端接收到第一个数据包之后,往往很快就可以看到用于响应的TCP ACK数据包。但如果第二个数据包是一个TCP Retransmission数据包,则这个是重传数据包。

重传数据包特征

重传数据包和第一个数据包的Data区段,也就是所传输数据的主体内容,是完全一致的。
展开查看Packet Details面板中的TCP,还可以发现相应的RTO的值等信息,并且这个RTO与每个数据包的发送时间是相吻合的,呈指数增长。

UDP协议

定义

UDP指的是User Datagram rotocol,即用户数据报协议,是在现代网络中最常使用的另外一种第四层的协议。是无连接的传输层协议,提供面向事物的、简单的、不可靠的信息传输服务。

UDP报文格式
在这里插入图片描述

TCP与UDP主要区别

TCP是为了满足带有内在错误检测的可靠数据传输,那么UDP主要是为了提供高速的传输,并不会正式地建立和结束主机之间的连接,也不会像TCP那样存在握手和终止的过程。

UDP协议特点

1、因为UDP是无连接协议,是一种不可靠的服务,所以UDP的流量一点都不稳定。
2、UDP能提供高速的传输,其他协议常常需要结合它。比如,应用层协议DNS和DHCP需要高度依赖数据包在网络上的传输速度,因此需要使用UDP协议,并利用它们自身的错误检查以及重传计时来保证数据的正确传输。
3、UDP并不关心传输的可靠性,所以任何使用UDP的应用在必要的时候都需要采取特殊的步骤,从而保证传输的可靠性。

捕获tcp和udp数据包

TCP三次握手数据包捕获
如:

1、打开wireshark,然后设置储存捕获到的tcp文件(Capture——Options——在Capture Filter里输入tcp——在Flie里填入文件路径)
2、打开一个网站 ,开始捕获数据包
3、打开刚刚储存捕获到的tcp文件,对数据包进行特定条件筛选(通过“Edit”->“Find Packet”,在弹出的对话框中以String的形式搜索字符串->网站的名称),根据http数据包就能知道源IP地址以及目标IP地址
4、利用筛选器,输入筛选条件ip.addr==源地址的ip && ip.addr==目标地址ip,获得两个IP地址之间的流量
5、寻找Tcp的三次握手

方法一:逐一查看数据包,根据数据包中seq以及ack的值进行匹配
方法二:将握手相关的数据包着色直接显示(选择一个握手的数据包——右键——colorize converstation——tcp——选一个颜色),在根据数据包中seq以及ack的值进行筛选

6、将Tcp的三次握手三个数据包导出来,
(将TCP三次握手的数据中标志(右键——make packet)——选择“File”->“Export Specified Packets”->在弹出的对话框中给文件起一个名字->在“packet Range”选择maked packets>选择“保存”)那么只包含有三个数据包的捕获文件就生成了。

捕获DUP数据包
如:

如果要捕获UDP的数据包,最简单的便是开启了QQ的视频聊天,因为QQ视频所使用的是UDP协议,所以抓取的包大部分是采用UDP协议的包。然后就可以根据数据包分析啦

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

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