参考视频:Wireshark零基础入门到实战/网络抓包/流量分析必备Wireshark的示例包
/SampleCaptures
下面很多实验的包记录,能直接在这里获取(且更好)参考书:
文章目录
Wireshark基本使用# 搜索(ctrl+f、string)# 导出# 包过滤(input)伯克利(BPF)包过滤捕获过滤(capture filters)/ 展示过滤器(display filters) # 输出(output)pcap-ng、pcap定时保存环形缓存器 # 捕获选项(Options)显示选项(display options)解析名称(name resolution)自动停止捕获(stop capture automatically) # 杂项(about)各文件路径主题 数据包分析数据流追踪专家信息说明统计摘要说明协议分层统计网络节点和会话统计网络会话(conversations)网络节点(endpoint) 数据包长度图表分析IO图表(IO Graph)数据流图(Flow Graph) 命令行操作(tshark) 协议(物理层)帧(frame)(数据链路层)Ethernet II(网络层)IP协议# version# ttl(time to live)# fragment(IP分片) ARP(地址解析协议)实验分析`Ethernet II`问(`opcode 1 request`)答(`opcode 2 reply`) ICMP(网络控制消息协议)定义ping 原理实验分析 1:ping分析 2:ping(==请求==)icmp(Internet control message protocol)结构(==响应==)wireshark做了处理,能在请求中直接找到响应的帧(frame) 分析 3:tracert(路由跟踪) DNS(域名服务)实验 1分析(请求 request)dns查询(request)帧(frame)的分层dns报文的结构Flags(标记位s)(16bit)queries 分析(响应 response)实验 2客户端数据包递归数据包 DNS的 区域传送区域传送案例前三个数据包第4、5个数据包6、7号数据包TCP连接终止 TCP和UDPTCP是UDP是 TCP(传输控制协议)端口三次握手 [SYN] [SYN, ACK] [ACK]实验分析第一次握手 [SYN]第二次握手 [SYN, ACK]第三次握手 [ACK] 四次挥手 [FIN] [ACK] ... [FIN] [ACK]理解ACK、SEQ、Len的概念和相互关系==[PSH] 【未完】====RST 重置 [RST] 【未完】==TCP滑动窗口的原理TCP重传技术重传计时器机制 服务端主动申请重发多数据包丢失的处理 UDP(用户数据包协议)协议结构分析 DHCPDhcp工作流程DHCP协议的捕获分析:首次获取ipUPD作为传输协议释放(release)数据包发现(discover)数据包options 提供(offer)数据包请求(request)数据包确认(ACK)数据包 续租 HTTPHTTP数据包捕获 ==数据传输 【未完】== ==HTTPS 【未完】==Telnet ==~~eNSP(网络模拟器)【未开始】~~====~~部署方式 【未开始】~~==远程数据包捕获Wireshark
常见额网络监听软件
wiresharktcpdump(命令行)microsoft network monitor…kismetfiddler…
原理
捕获二进制流量转换成WireShark组装数据包分析捕获的数据包,识别协议等信息
优势(为啥流行)
开源、免费跨平台(windows、linux、mac…)可视化(不像命令行的tcpdump)(同时也支持命令行分析)强大的扩展
官网
/
(kali默认集成)
安装
Ubuntu 上 Wireshark 的安装与使用
对于win用户,会安装一个winpcap驱动。(这是因为wireshark不像snifft那样有自己的抓包驱动,)
winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统,
相对的,如果是linux下的抓包驱动是libcap。
基本使用
选择网卡(流量流入流出的关键)
根据流量和ifconfig确定一张对外的网卡。
这里是wlo1
捕获数据流量
过滤数据包
保存数据包
首先暂停。
pcap
# 搜索(ctrl+f、string)
# 导出
序号用.
隔开
# 包过滤(input)
伯克利(BPF)包过滤
BPF(Berkeley Packet Filter)采用与自然语言相近的语法,利用语法构造字符串确定保留具体符合规则的数据包,而忽略其他数据包。
捕获过滤(capture filters)/ 展示过滤器(display filters)
语法规则
protocol 哪里看?net和host的区别
net 网段
host 地址
案例演示
ip地址为192.168.4.5
host 192.168.4.5
源地址为192.168.4.5
src host 192.168.4.5
目标地址为192.168.4.5
dst host 192.168.4.5
目标端口为80
dst port 80
(所有端口port前可以添加tcp或udp)网络范围
net 192.168.4.0/24
wireshark包过滤器分类
筛选过滤器
抓取之后再筛选
捕获过滤器
抓取的时候过滤
选择要过滤的网卡、编写过滤规则
# 输出(output)
pcap-ng、pcap
定时保存
监听文件太大,会导致wireshark无法正常打开保存的文件
解决方案:设置自动创建新文件,每隔10秒创建一个文件
环形缓存器
使用wireshark进行网络监控,无论硬盘空间多大都有可能会被消耗殆尽
解决方案:环形缓存器。相当于每天保存固定数量的数据包,第二天的时候直接删除前面的数据包
# 捕获选项(Options)
显示选项(display options)
update list of packets in real-time实时更新抓包列表automatically scroll during live capture
自动滚动,显示最新的抓包数据
解析名称(name resolution)
自动停止捕获(stop capture automatically)
# 杂项(about)
各文件路径
主题
数据包分析
数据流追踪
功能:将TCP、UDP、SSL等数据流进行重组并完整呈现出来Analyze ⇒ Follow TCP stream
分
专家信息说明
analyze ⇒ expert information
统计摘要说明
对抓取的数据包进行全局统计
statistics ⇒ summary
协议分层统计
统计通信流量中不同协议占用的百分比,通过这个工具可以对主网流量有直观的了解,到底整个网络哪些流量占用最多,哪些占用最小等等
statistics ⇒ hierarchy
网络节点和会话统计
网络会话(conversations)
统计通讯会话之间接收和发送的数据包和字节数。通过这个工具可以找出网络中哪个会话(IP地址或端口号)最占用带宽
statistics ⇒ Conversations
网络节点(endpoint)
统计通讯会话中每个节点接收和发送的数据包和字节数。
通过这个工具,可以找出网络中哪个节点(IP地址或端口号)最占用带宽
statistics ⇒ endpoints
数据包长度
统计数据流量中包长度的分布
statistics ⇒ packet lengths
图表分析
IO图表(IO Graph)
对网络中的吞吐流量进行实时图形显示
statistics ⇒ IO Graph
数据流图(Flow Graph)
将会话通信过程图形可视化出来
statistics ⇒ flow Graph
命令行操作(tshark)
tsharkcapinfos协议
【网络基础全家桶】OSI七层、TCP/IP四层、TCP协议(三次握手、四次分手)
从网络模型层面分析,wireshark的界面分为物理层(单位bit)、数据链路层(frame)、网络层(package)
(物理层)帧(frame)
(数据链路层)Ethernet II
其中,mac地址前三个字节唯一表示一间硬件厂商。因此,这里直接显示了IntelCor和BeijingX…
(网络层)IP协议
# version
version 4 即 ipv4
# ttl(time to live)
另外一个需要关注的参数是 ttl(time to live)
同一个icmp协议请求
源主机的发送的报文
目标主机接收到的报文
为什么目标主机接收的ttl少了1???
因为他们之间还有一个路由器。
因此,通过ttl,能很清楚的分析出报文源地址到目标地址间经过多少台其他设备。
# fragment(IP分片)
实验数据来源:
发送一个超大ping(大于1500,分片阈值)
ip分片意思是,将一个数据流,分为更小的片段。是ip用于解决跨越不同网络时,可靠传输的特性。
分片的依据是OSI模型第二层的数据链路层所使用的“最大传输单元”(MTU max trans unit)
在多数时候,数据链路层使用的是以太网(ethernet),而以太网的默认mtu是1500。(这里不包括14字节的以太网头部本身)
当数据包被传输出去,首先会对比网络接口的mtu,判断是否需要将数据包分片。
设备将数据分为n个可以成功传输的数据包。
每个ip头的total length设为每片的总长度
分片标志(flags)设为1
设置ip的分片偏移
逐个发送数据
判断数据包是同一序列?
每个数据包有
identification
字段同一系列的分片数据包,这个字段相同
对于分片的最后一个数据包
没有设置偏移flags偏移是之前的总和
ARP(地址解析协议)
更多: /LawssssCat/article/details/104265811
网络通信,第一步肯定是判断目标地址是在本地还是在远程,然后获得mac地址。这时候需要arp协议
arp协议流程
检查arp缓存
发送arp请求(如果没有)
添加arp表项如果本地计算机arp缓存木有目标ip对应的mac地址,则会把自己的ip、mac广播
发送arp应答其他机器检查到广播的ip和mac地址会往自己的缓存中记录这一项
添加arp表项其他机器在“添加arp表项”后,会往该ip、mac地址发送自己的map、ip作为应答
广播的机器收到来自各地的ip和map,把他们更新到自己的arp缓存中。
实验
清理arp缓存
arp -n |sudo awk '/^[1-9]/{system("arp -d "$1)}'
开始抓包
ping目标地址
过滤arp
找到一项
who has 192.168.1.125(目标地址)?tell 192.168.1.10(本地ip)
分析
Ethernet II
问(opcode 1 request
)
> 注意 ,这时候:源(source)为本地发起ping的主机mac地址目标(destination)为`ff:ff:ff:ff:ff:ff`(广播)且 ==opcode为1==(request)
答(opcode 2 reply
)
> 注意。这时:源(source)为被ping的ip的mac地址目标(destination)不再为广播,而是发起ping的主机的mac地址且 ==opcode为2==(reply)
ICMP(网络控制消息协议)
完全理解icmp协议
ICMP协议的基本概念利用wireshark分析由ping以及tracert捕获的数据包,了解两者的异同点学会利用Wireshark驳货包含有ICMP协议的数据包
定义
ICMP(Internet Control Message Protocol 互联网控制消息协议)是TCP/IP协议族的核心协议之一。
负责提供在tcp/ip(传输/网络协议)网络上设备、服务协议、以及路由器可用性的信息。
大多数网络检修技巧和工具都是基于常用的icmp消息类型。
icmp依靠ip协议来完成其任务,通常也是ip协议的一个集成部分。
icmp和tcp和udp的目的不同,它一般不用于在网络系统中传输数据,通常不被用户、网络程序直接使用,而是结合进ping、以及tracert这样的诊断程序里面。
ping
很多人对ping有误解,以为它是一个命令,但实际上ping是一个用于检测设备之间连接性的工具。
ping
这个工具用于发送icmp echo
请求数据包。
正因如此,学习icmp对于网络安全有很大意义。
因为icmp本身的特点决定了它非常容易被用于攻击网络上的路由器,和主机。
比如说:
用户可以使用操作系统上规定的icmp的最大尺寸不超过64k这个规定,向网络上的主机发起
ping death
攻击。(这是一种拒绝服务攻击,因为当icmp的大小超过64k的时候,目标主机就有可能出现内存分配错误的情况。从而导致tcp/ip堆栈崩溃,最终导致服务器死机)另外,向目标主机长时间、连续、大量的发送icmp数据包,也会最终使系统瘫痪。(大量的icmp数据包会形成icmp风暴,使得服务器主机要使用大量的cpu资源来处理)
原理
客户端计算机向服务器发送Echo Request
服务器发送Echo Reply
返回客户端计算机通过检查Echo Reply
以确定连接质量实验
继续arp的实验环境,更换过滤条件arp or icmp
分析 1:ping
分析重点在于icmp头部的
type
和code
的内容。
type
: 表示icmp消息基于RFC
规范的类型和分类。code
: 表示icmp消息基于RFC
规范的子类型。
/video/BV1B5411h7t4?p=11
分析 2:ping
icmp协议两两一对icmp包被打在ip包里面。(Ip包总长度20字节,而后面的icmp包大小不固定)
ip协议长度20字节
(请求)icmp(Internet control message protocol)结构
type 报文类型,代表不同的引用(8=请求、0=响应、3=不可达、4=…)
code代表报文结果(如:type 8=请求情况下,code 0=请求成功)
(响应)wireshark做了处理,能在请求中直接找到响应的帧(frame)
可以看到,响应的icmp报文中,data和请求是一样的
分析 3:tracert(路由跟踪)
网络实用命令——traceroute/tracert
路由跟踪功能是用来识别一个设备到另一个设备的网络路径。
在一个简单的网络上,这个网络路径可能只经过一个路由器(甚至一个路由器也不经过)。但是在复杂的网络中,数据包可能会经过数十个路由器才会到达目的地。
对于网络通信检修来说,确定一个数据包到另一个地方所走的路径是非常重要的。
而想要进行路由跟踪,我们可以使用 tracert 工具。(使用icmp作为通信协议)。通过其跟踪结果,我们可以画出数据包所走的路径。
/video/BV1B5411h7t4?p=11
DNS(域名服务)
DNS(Domain Name Server)
如果我们打开浏览器访问一个网站,通常会产生两类流量
域名解析相关http或者https传递的网页内容
实验 1
下面我们监听chrome浏览器访问的流量这时会看到其他一些dns流量,不管。因为那是现在的浏览器额外做的处理。
分析(请求 request)
dns查询(request)帧(frame)的分层
前置知识
dns协议是应用层协议。
在dns查询中,使用最多的传输层协议是UDP(使用的端口最多是53)(有的时候也会使用tcp)
dns报文的结构
dns报文是变长的
前12字节规定了内容
后面的内容长度根据查询的内容改变而改变
固定长度内容中,包括:
事务的标识(
transaction
)标志(flags
)重要问题数量(questions
)(回答的)dns中的资源记录(answer RRs
)(RRS resource record
)(授权的)dns中的资源记录(Authority RRs
)(额外的)dns中的资源记录(Additional RRs
)
Flags(标记位s)(16bit)
标记位(flags)一共16bit,wireshark的报文中展示了前6组
第一组:报文类型(请求?响应?)
(request中)0
表示是个查询
(response中)1
表示是个响应
第二组:操作代码(标准查询?)
标准查询(0000
):(正常查询)已知域名,查询ip反向查询(0001
):已知ip,查询域名… 其他,如0010
(2)时候是一些服务器状态的查询
第三组:信息是否被截断
如果传输的信息比较常,需要用到截断,这时候这个bit为
1
。 否则,正常为0
场景一:
另外, 我们都知道,
dns用的是tcp:53或者udp:53
其中udp:53是最常见的。
那么什么时候用tcp:53呢?
信息被截断的时候。
udp的包比较小,最大215字节。如果服务端发现返回的信息比较长,会把响应中的
truncated
标志位设为1
。当客户端收到
truncated
为1
的响应,会重新发起一个子查询,这时候传输层的协议会选择使用tcp
场景二:
如果有主从dns服务器,那么主从服务器间进行数据传递使用的也是tcp:53
第三组、第四组(递归recursion相关)
第五组(认证相关)
queries
配过dns服务器的话,对这里的信息应该比较熟悉
其中
type A 指主机记录。
这个用于区分业务场景。
如:
如果你需要发送电子邮件,那么询问
dns
服务器的就是ms
记录若是**登录,你可能查询service location
的目录
IN (Internet name)
互联网域名
分析(响应 response)
和请求相比,响应的flags
有很多明显的不一样。响应的报文中包含了请求的queriesRRs(resource record)分别对应多出来的几行实验 2
客户端数据包
递归数据包
客户端数据包
仅仅在客户端看到的抓包信息,我们只知道成功获取了ip,但是不知道ip获取的过程。
因此还要看服务端的数据包
服务端数据包
服务端接收到数据包1,查询本地没有找到域名对应ip,同时发现flags上面设置了期望递归查询因此,第二个数据包就往其他dns服务器中查询这个域名的ip。数据包三表示,4.2.2.1
的dns服务器找到该域名ip,并返回该域名ip为72.32.92.4
数据包四,本地服务器继续把递归得到的结果返回给初始的客户端。
DNS的 区域传送
DNS的区域指的是DNS协议所授权管理的空间(或者说是DNS服务器的名称)
举例:
这个域名可能是一个DNS服务器对
负责的。
那么,(无论是内网的设备还是外部)设备希望把
域名解析成ip,那么就必须和这个域的dns进行联系。
但是这时候,网站多了一个“社区”功能,那么可能会增加一个dns服务器,专门用于处理 bbs的部分。那么这个新增的dns服务器就成了bbs这个子区域的‘权威’
同时子区域也能扩展子区域
那么区域传送指的是:出于冗余备份的需要,在两台设备之间传送区域数据。
比方说,在拥有多个dns服务的网络中,管理员通常会配置一台备用dns服务器,用于维护主服务器的信息拷贝,以防止主dns服务器不可用。
但如果配置不当,会导致任何匿名用户都可以获取dns服务器某域的所有记录,将整个企业的基础业务以及网络架构向外暴露
区域传送包括两种:
完整区域传送(AXFR full zone transfer)
将整个区域在设备间传送增量区域传送(IXFR incremental zone transfer)
仅仅传送区域信息的部分。
DNS基本操作详解
区域传送案例
前三个数据包
首先看到的是,通信协议用的是TCP,而不是DNS常用的UDP。
我们都知道,DNS是基于UDP传输协议的。但是DNS在如同区域传送这样的任务的时候,会使用TCP协议,因为TCP对于规模化的传输更有效。
由于是Tcp协议,所以我们看到,这里的前三个数据包是TCP三次握手的数据包
第4、5个数据包
wireshark仍然没有对这两个数据包标识dns信息
6、7号数据包
第六号数据包是客户端请求记录为了DNS,且有 AXFR 标识,即完整区域传送
服务器在第七个数据包中回复和区域记录(可以看到,数据量还是不小的,所以要用TCP保证安全传输)
TCP连接终止
DNS区域传送,最后以TCP连接断开作为结束。
TCP和UDP
TCP是
面向连接的可靠的基于ip的传输层协议其主要目的是为数据提供可靠的端到端传输。它能够处理数据的数据传输和错误修复,保证数据能够到达目的地。
UDP是
无连接的,面向事物的(简单的)不可靠的传输层协议TCP(传输控制协议)
为什么需要三次握手和四次挥手
TCP(Transmission Control Protocol 传输控制协议)。RSC7939中定义。
TCP是面向连接的可靠的传输协议。
无论哪一方,向对端发送数据,都必须先建立起连接。
端口
所有tcp通信都会使用源端口和目的端口(这些信息可以在tcp头部找到)。
为了能传输到目的应用中,tcp发起端必须知道目标应用的端口。(一般设计应用时协商确定。如果用了不同于设计的端口,那么传输就会失败。)
一般来说,tcp通信的源端口并不重要,可以随机选择。
共有65535个端口可以选择。
其中:
1~1023号端口属于标准端口,用于特定服务。1024属于临时端口,需要使用的时候,操作系统会在通信时候采用一定策略选择
示例
看图,1号包是由172.16.16.128:2826
发往212.58.226.142:80
。其中2826是临时端口,80一般用于http服务
wireshark维护了固定端口的服务列表
edit > preferences > name resolution
可以打开,在中间分层列表中会显示猜测出的协议名
三次握手 [SYN] [SYN, ACK] [ACK]
tcp之所以是可靠的,原因是建立连接,传输数据前,需要两台主机的三次握手(确认状态)开始。
下面首先了解tcp三次握手的原理:
clientsendsyn请求1
serverreceivesyn请求1
… sendack响应1 with syn请求2
clientreceiveack响应1 with syn请求2
… sendack响应2
… establish …serverack响应2
… establish …
(下图,tcp三次握手的图)
每次握手,对于发送方都会发送一个tcp包(报文)
tcp段包含了
源(地址、端口)、目标(地址、端口)初始序列号滑动窗口大小窗口扩大因子最大报文段长度…
另外还有一些标记位(flags):
7.syn:同步序列号
8.ack:应答回复
9. rst:复位连接(消除旧有的同步序列号)
10. psh:尽可能的将数据送往接收进程
11. fin:发送方完成数据发送
12. urg:
实验
(沿用之前的数据)开启监听、访问页面、保存监听记录。
选中一条 tcp 记录,右键follow > tcp stream
或者使用查询过滤条件
tcp.stream eq xx
(xx是表示第几个tcp stream)
分析
第一次握手 [SYN]
客户端:“请求连接”(syn)
源地址向目标地址发送握手,进行一些参数协商。
如:
源端口目标端口
flags…一些标识window size … (流量控制的)窗口大小options… 一些选项sequence number序列号tcp是传输层协议。只需要指定端口号即可。
不用指定ip(在网络层ip协议指定了)
不用指定mac地址(在数据链路层ethernet指定了)
第二次握手 [SYN, ACK]
服务端:收到(ack)
服务端:同意建立连接(syn)
和第一次握手对比。服务端发起的报文中,有自己新生成的 seq num,且ack num 为第一次报文的seq num 加一。
第三次握手 [ACK]
客户端:“收到,已开启连接”(ack)
四次挥手 [FIN] [ACK] … [FIN] [ACK]
server 和 client 均可发起挥手请求。发起挥手请求表示发起者已发完全部内容。
A no bit to send … sendFIN_1
B receiveFIN_1
… sendACK_1
… continue to send bit if has bit ready to send …A receiveACK_1
… waitFIN_2
… and receive other bit from B ………B no bit to send … sendFIN_2
A receiveFIN_2
… sendACK_2
… wait 2MSL … if receiveFIN_2
again … sendACK_2
again … colseB receiveACK_2
… close … other wise sendFIN_2
again … … … after n times sendFIN_2
and can’t receiveACK_2
… close …
理解ACK、SEQ、Len的概念和相互关系
TCP提供有序的数据传输,因此每个数据包都有一个序列号SEQ。当接收方收到乱序的数据包时候,会根据SEQ排序。
我们不需要知道SEQ的起始值这么算,但要知道其增长方式。
上图可知,同一个发起方,前一个SEQ+LEN=下一个SEQ
通过seq
可以对包进行排序可以查看丢包的情况(哪些序列号呃的包丢了、丢了多少个长度)
[PSH] 【未完】
数据包下载:/download/LawssssCat/13111019
TCP 的PUSH标志位
RST 重置 [RST] 【未完】
网络连接问题时出现。
TCP滑动窗口的原理
TCP协议里,实现了滑动窗口的机制。可以用于检查什么时候发送的数据包的丢失,且可以调整数据的传输速率(避免丢失情况的加剧)。
滑动窗口机制运用了数据接收方的数据窗口对数据流进行控制。
数据窗口是数据接收方自己遇到实际情况而定下来的值,保存在tcp的头部信息中。
这个值告诉了发送方,自己希望在tcp缓存空间中保留多少数据。(这个缓存空间是临时空间,是数据可以向上传递时,等待处理数据的应用层协议之前的一个临时存储空间。)
所以发送方一次只能发送数据窗口大小的数据量,==为了传输更多的数据,接收方必须发送确认数据包,来表示之前的数据已经接收到了。==同时也要处理占用tcp缓冲区的数据,然后清空缓冲区
正常情况
服务端繁忙:减少窗口大小
服务端故障:
窗口大小设置为0,但是连接保活(客户端周期性发送请求,检查服务端窗口大小)。一旦服务端故障排除,响应正常窗口大小,连接通信正常继续。
192.168.0.20
数据接收方
192.168.0.30
数据发送方窗口大小设为0后,马上恢复正常
接收方响应窗口大小为0,且之后的包活数据包的响应中,窗口大小均为0
wireshark高亮显示零窗口和包活数据包
eidt > preferences > protocol > tcp > analyze tcp sequence numbers
.
TCP重传技术
知识点
理解tcp数据包重传的基本原理理解快速重传的流程用wireshark分析tcp重传机制掌握sack技术的数据包传送原理
重点
重传计时器机制重传超时(RTO Retransmission TimeOut)
重传计时器机制
当发送方把数据data
发送出去,但是等待(RTO)
个时间,接收方没有发送TCP的[ACK]
数据包回来。那么发送方假设数据包没有发送成功,(即认为丢失了),那么就会进行数据重传Retransmission 1
,继续等待(RTO) x 1
个时间循环上面操作,同时RTO
时间“翻倍”。(除了翻倍,也有其他算法)
直到收到ACK
数据包,或者发送方达到最大重发次数。
服务端主动申请重发
如果接收方收到不符合顺序[SEQ]
的数据包,那么接收方就会知道数据包丢失了。且接收方必须接收到丢失的数据包。
因此,接收方会发送一个包含丢失包序列号[SEQ]
的[ACK]
数据包,那么发送方就会知道发送哪个数据包了。
(上图所示)当接收方收到SEQ=5000 size=500
的数据包,后接下来应该收到的是SEQ=5500 size=500
的数据包,但实际收到的是SEQ=6000 size=500
数据包。
那么接收方就能断定SEQ=5500 size=500
数据包丢失。接收方主动向发送方发送三个duplicate [ACK] ACK=5500
的数据包。那么发送方就会知道这个数据包丢失,同时使用Fast Restrasmission
的方式,把丢失的数据包再次发送一次。
Fast Restransmission?
通过这个手段发送数据包,其他在队列中的数据包会进入阻塞,知道这个丢失数据包被发送成功。
为什么是三个
duplicate [ACK] ACK=5500
?为什么是三个,而不是一个?
因为,网络传输过程中,经常会出现乱序。乱序数据包一样会触发接收方
Duplicate ACK
数据包的发送。’但是由于乱序(实际上收到了数据包,只是时间偏后)而重传是没有必要的。
因此不能让发送方一接收到这种数据包就重传。(至于为什么是三个。。。大概因为三个诸葛亮赛过一个臭皮匠把。。。)
多数据包丢失的处理
方案一
丢失的第一个数据包起,后面全部重传,效率低。但tcp协议,一开始的确是这么搞的。
方案二:NewReno
接收方循环查找丢失序列号的包,要求客户端重传。
这个方案在
RFC2582
和RFC3782
中有被定义。
这个方案效率高,但是当丢包量大的时候,需要开辟大量的
Fast Restrasmission
通道。
方案三:SQCK
接收方在发现缺失数据包的时候,(发送[TCP Dup]
的时候)顺便把收到的数据包告诉发送方。
RFC
中定义的
例子,如下图
8号包的 sack字段表示,5473-15049的序列号收到了。
(也就是说,1-5472的序列号没收到,那么发送方就会重发这些数据)
UDP(用户数据包协议)
UDP(User Datagram Protocol 用户数据包协议)
无连接协议意味着这是一种“不可靠的”服务,这使得udp的流量并不稳定。所以,udp会和其他一些服务或icmp一起使用,来确保连接的可靠性。
无连接协议(不会建立和断开连接、也没有类似tcp握手挥手的操作),提供高效的服务
如DNS、DHCP高度依赖数据包在网络中的传输速度,因此使用UDP作为传输层协议,并使用自身的错误检查、重传计时来保证数据的正确传输。
协议结构分析
UDP协议结构非常简单
源端口目标端口协议长度校验字段
需要强调的是,udp并不关心传输的可靠性,所以任何使用udp的应用在用的时候都必须使用特殊的步骤,从而保证传输的可靠性。
DHCP
/video/BV1B5411h7t4?p=12
DHCP协议的基本概念DHCP服务器为客户机提供IP地址的四个步骤利用wireshark捕获含有DHCP协议的数据包在Wireshark中分析DHCP协议提供IP地址的四个步骤
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的配置协议。主要用于给内部网络或网络服务提供商自动分配IP地址。
DHCP是一个应用层协议。能够让设备自动获取IP地址以及其他重要的网络资源(如DNS服务器和路由网关地址等等…)。
DHCP前身是bootstrap协议,是TCP/IP的应用层协议。bootstrap协议被创建出来用于给连接网络的设备自动分配地址,直到后来才被更加完善、复杂的dHCP协议所取代。
Dhcp工作流程
分为(上图)4个阶段。
Discover
dhcp客户端请求地址时候,并不知道dhcp服务器的位置。因此,dhcp客户端会在本地网络内以广播的形式发送数据包。
(这个数据包就被称作Discover
数据包,目的是发现网络中的dhcp服务器)
所有收到discover数据包的dhcp服务器都会发送响应数据包,这样客户端就可以知道网络中dhcp服务器的位置了。
offer
当dhcp服务器收到discover
数据包后,会在本地的地址池中寻找一个合适的ip地址(加上期间和其他的一些信息,如网关、dns服务器等),构造成offer
数据包发送回给dhcp客户端。(保证客户端,我可以为你提供ip地址)
request
dhcp客户端可能会收到非常多的offer
响应,所以必须从中选择一个。(一般,客户端会选择第一个offer)并回应一个广播request
数据包,以告诉所有的dhcp服务器,自己已经做出了选择。
当dhcp客户端成功获取ip地址以后,在地址租期使用一半的时候,会向选中的dhcp服务器单播
request
数据包,用于连续租期如果没有收到dhcp服务器的
[ACK]
数据包,会在地址租期剩下1/4的时候,广播request
数据包来延续租期
ACK
dhcp服务器收到request
数据包后,根据数据包携带的客户端mac地址来查找有没有相应的租约记录。
如果有,有发送ack
数据包作为回应,通知客户端可以使用分配的Ip地址
DHCP协议的捕获
DCHP(应用层)协议通过UDP(传输层协议)进行传输。所以我们可以在捕获过滤器中限制只捕获udp数据包
当主机的ip地址过期,或者重新启动系统的时候,才会重新请求ip地址。
所以,我们这里重启网卡
win
ipconfig /releaseipconfig /renew
linux
dhclient -r # 释放ipdhclient # 重新获取
bootp
条件过滤掉其他数据包
分析:首次获取ip
UPD作为传输协议
可以见到,dhcp使用的是udp作为传输协议。因为dhcp客户端对请求、响应的速度有很高的要求,且dhcp内部有保证可靠性的方法。(这都意味着,upd是最适合的协议)
需要说明的是,wireshar在处理dhcp的时候,仍然会使用bootstrap,所以我们会在packing detail面板中看到
bootstrap protocol
,而不是dhcp
释放(release)数据包
当用户不在使用ip地址的时候,需要向服务器发送release数据包,用于告诉服务器,客户端不再使用这个ip地址。(dhcp服务器就会释放掉这个网络的租约)
发现(discover)数据包
它是又(source)0.0.0.0:68
发往255.255.255.255:67
。
客户端使用0.0.0.0
是由于它目前还没有ip地址。
目标地址255.255.255.255
是独立的广播地址。(这能确保数据包能发送到网络中的所有设备上,从而让正在监听的dhcp服务器进行服务)
options
数据包有很多option
的内容,这个是用来对数据包进行扩展的,以提供更多的功能。
比较重要的有
Dhcp message Type (dhcp的消息类型)
这个一个字节长度和值均为1的值,表明它是一个发现数据包
另外
数据包类型,在请求头中也有记录。
client identifier(客户端标志符)
这里包含客户端身份的一些额外信息
Requested IP Address(所请求的ip地址)
这里记录了客户端所希望得到的ip地址。
通常是之前用过的ip地址
parameter request list(请求的参数列表)
列出了客户端希望从服务器接收到的不同配置项
(如下图,是一个其他重要网络设备的ip地址)
提供(offer)数据包
(下图)这个数据包是从192.168.1.2
(dhcp服务器)发往192.168.1.10
(客户端被分配到的ip)
mac地址通信
尽管说目标地址是
192.168.1.10
,但客户端还没有这个地址,所以服务器会首先尝试使用mac地址如果说,通过mac地址通信失败,那么就会把
offer
数据包广播出去
transaction ID
可以看到,
offer
数据包的transaction ID
和请求包是一样的
这个
offer
(提供)数据包由服务器发出,用于向客户端提供服务,提供了dhcp服务器自己的信息以及给客户端提供的地址
这个信息可以和
discover
数据包中的option向对比着看
请求(request)数据包
在客户端收到dhcp的offer
数据包后,会用请求(request
)数据包作为接收的确认。
值得注意的是,这个数据包仍然是以
0.0.0.0
为源地址(source)发出的。因为这时候,客户端还没有完成ip地址的获取过程。
这时候,虽然也是广播,但是数据包知道dhcp服务器的存在,
确认(ACK)数据包
这个数据包由dhcp服务器发送,包括
给客户端发送请求的ip地址,并在数据库中记录了相关的信息
续租
这时候,客户端是有被分配的ip,且知道dhcp服务器的。
因此,discover和offer变得没有必要了。
客户端和服务端只需要发送request和ack的过程即可。
HTTP
HTTP协议的基本概念以及工作流程捕获HTTP数据包的方法分析HTTP的连接数据包HTTP数据包的筛选技术分析HTTP的数据传输数据包HTTP(hyptertext transfer protocol 超文本传输协议)(应用层协议)是万维网的传输机制。
允许浏览器通过连接web服务器来浏览网页。
http是web系统最为核心的应用。它是web服务器和客户端之间进行数据传输的规则。
web服务器就是我们平时所说的网站(信息内容的发布者),而最常见的客户端就是浏览器(用于信息的接收)。
HTTP是一个无状态的协议。
所谓的无状态,指的是客户端(web浏览器)和服务器之间不需要建立持久的连接。
这意味着当一个客户端向服务端发送请求,然后服务器发出响应之后,连接就关闭了。
服务器并不会保留连接的相关信息
HTTP采用的是请求/响应模型
客户端向服务器发送请求,服务器处理请求并返回适当的响应
所有的HTTP连接(html、图片、文本…),都被构造成一套请求/响应
在这个过程中,要经过4个阶段
(TCP三次握手)建立连接(客户端)发送请求信息(服务端)发送响应信息(TCP四次挥手)关闭连接
HTTP数据包捕获
筛选出GET请求的数据包
/cryptaes
数据传输 【未完】
HTTPS 【未完】
/video/BV1B5411h7t4?p=15
Telnet
telnet-cooked.pcap (libpcap) A telnet session in “cooked” (per-line) mode.
密码明文传输(下图)
eNSP(网络模拟器)【未开始】
eNSP(Enterprise Network Simulation Platform)
网络有网络设备和计算机构成,eNSP是模拟网络拓扑关系的软件
官网
安装依赖
winpcap(下面两者有集成,不需要单独安装)wiresharkvirtualbox
/CN_TangZheng/article/details/102964435?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
部署方式 【未开始】
远程数据包捕获
方案一:开启远程桌面,rdp服务,在系统中安装wireshark进行抓包分析
缺点:远程登录过程中,会产生无关与目的远程连接数据流量。方案二:
wireshark远程抓包:
服务器(winpcap)(rpcapd)
客户端(wireshark)
/video/BV1fE411Q7xY?p=6
如果觉得《Wireshark - 【学习笔记】(Ubuntu18.04) 协议分析(IP ARP ICMP DNS UDP TCP DHCP HTTP HTTPS FTP Telnet)》对你有帮助,请点赞、收藏,并留下你的观点哦!