既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
| OP | 16比特 | 操作类型: 1 ARP请求 2 ARP应答 3 RARP请求 4 RARP应答 |
| Ethernet Address of sender | 48比特 | 发送方以太网地址。这个字段和ARP报文首部的源以太网地址字段是重复信息。 |
| IP Address of sender | 32比特 | 发送方的IP地址。 |
| Ethernet Address of destination | 48比特 | 接收方的以太网地址。发送ARP请求时,该处填充值为0x00.00.00.00.00.00。 |
| IP Address of destination | 32比特 | 接收方的IP地址。 |
3.3 抓包分析
3.3.1 先arp -d把arp表清空。
arp -a查看ARP表已被清空。抓192.168.240.130的ip
3.3.2 过滤ARP协议的数据包
显示过滤器中输入:arp,过滤ARP协议的数据包。
3.3.3 Ping 目标IP
第一个包是ARP请求包,第二个包是ARP响应包。
3.3.4 第一个数据包请求分析
目标地址(Destination字段)是 Broadcast,就是广播的意思
第一处:ARP后面的括号里是 request,说明这是个请求包
第二处:源IP、源MAC、目标IP都有值,目标MAC却全是0,意思就是告诉他们:我不知道这个IP的MAC地址。
3.3.5 第二个数据包应答分析
第一处:ARP后面的括号里是 reply,说明这是个响应包
第二处:源IP、源MAC、目标IP、目标MAC都有值,接收方可以从这里获取IP对应的MAC地址。
3.3.6 arp -a 查看ARP表
ARP的学习能力:解析成功的MAC地址会被临时缓存,以节约资源。
3.3.7 再次访问Ping 目标IP
第二次访问,ARP表中已经缓存了MAC地址,所以这次ARP请求不再广播,而是直接从ARP表中获取。
4. ICMP抓包分析
4.1 ICMP介绍
ICMP(Internet Control Message Protocol)网际报文控制协议,用于传输错误报告控制信息,对网络安全有极其重要的意义。
例如请求的服务不可用、主机或路由不可达,ICMP协议依靠IP协议来完成任务,是IP协议的一个集成部分。
通常不被用户网络程序直接使用,多用于ping和tracert等这样的诊断程序。
4.2 报文格式
ICMP协议是IP的一个组成部分,负责传递 。
字段 | 长度 | 含义 |
Type | 1字节 | 消息类型: 0:回显应答报文 8:请求回显报文 |
Code | 1字节 | 消息代码,此处值为0。 |
Checksum | 2字节 | 检验和。 |
Identifier | 2字节 | 标识符,发送端标示此发送的报文 |
Sequence Number | 2字节 | 序列号,发送端发送的报文的顺序号。每发送一次顺序号就加1。 |
Data | 可变 | 选项数据,是一个可变长的字段,其中包含要返回给发送者的数据。回显应答通常返回与所收到的数据完全相同的数据。 |
4.3 抓包分析
ping是用来测试网络连通性的命令。
一旦发出ping命令,主机会发出连续的测试数据包到网络中,在通常的情况下,主机会收到回应数据包,ping采用的是ICMP协议。
4.3.1 确定目标地址
选择192.168.240.130作为目标地址。
4.3.2 第一个数据包进行分析
报文由IP首部和ICMP报文组成。
4.3.3 第二个数据包进行分析
4.3.4 错误诊断
“Type:0,Code:0”表示报文类型为诊断报文类型请正常的包。ICMP提供多种类型的消息为源端节点提供网络额故障信息反馈,报文类型可归纳如下:
ICMP消息类型代码对应表
类型Type | 代码Code | 描述 |
0 | 0 | 回显应答(ping应答) |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
3 | 4 | 需要进行分片但设置不分片比特 |
3 | 5 | 源站选路失败 |
3 | 6 | 目的网络不认识 |
3 | 7 | 目的主机不认识 |
3 | 8 | 源主机被隔离(作废不用) |
3 | 9 | 目的网络被强制禁止 |
3 | 10 | 目的主机被强制禁止 |
3 | 11 | 由于TOS,网络不可达 |
3 | 12 | 由于TOS,主机不可达 |
3 | 13 | 由于过滤,通信被强制禁止 |
3 | 14 | 主机越权 |
3 | 15 | 优先权中止生效 |
4 | 0 | 源端被关闭 |
5 | 0 | 对网络重定向 |
5 | 1 | 对主机重定向 |
5 | 2 | 对服务类型和网络重定向 |
5 | 3 | 对服务类型和主机重定向 |
8 | 0 | 请求回显(ping请求) |
9 | 0 | 路由器通告 |
10 | 0 | 路由器请求告 |
11 | 0 | 传输期间生存时间为0 |
11 | 1 | 在数据报组装期间生存时间为0 |
12 | 0 | 坏的IP首部 |
12 | 1 | 缺少必须的选项 |
13 | 0 | 时间戳请求(作废不用) |
14 | 0 | 时间戳应答(作废不用) |
15 | 0 | 信息请求(作废不用) |
16 | 0 | 信息应答(作废不用) |
17 | 0 | 地址掩码请求 |
18 | 0 | 地址掩码应答 |
5. UDP抓包分析
5.1 udp介绍
UDP(User Datagram Protocol)用户数据报协议,提供面向事务的简单不可靠信息传送服务。
- 将网络数据流压缩成数据包的形式。每一个数据包的前8个字节保存包头信息,剩余的包含具体的传输数据。
- 虽然UDP是不可靠的传输协议,但它是分发信息的理想协议,例如在屏幕上报告股票市场、显示航空信息;
- 在路由信息协议RIP(Routing Information Protocol)中修改路由表、QQ聊天、迅雷、网络电话等。
- TCP的效率不一定比UDP低,只要窗口足够大,TCP也可以不受往返时间的约束而源源不断地传数据。
1)UDP的优势
-
UDP 协议的头长度不到TCP头的一半,所以同样大小的包里UDP携带的净数据比TCP包多。
-
没有Seq和Ack等概念,省去了建立连接的开销,DNS解析就使用UDP协议。
2)UDP的劣势
-
超过MTU的时候,发送方的网络层负责分片,接收方收到分片后再组装起来,这个过程会消耗资源,降低性能。
-
没有重传机制,丢包由应用层处理,某个写操作有6个包,当有一个丢失的时候,就要将6个包重新发送。
- 分片机制存在弱点,接收方是根据包中的“More fragments”的flag来判断是否包已接收完,1表示还有分片,0表示最后一个分片,可以组装了。
如果持续发送flag为1的UDP,接收方无法组装,就有可能耗尽内存。
5.2 UDP协议的数据格式(传输层) – 8byte
字段 | 长度 | 描述 |
Source Port | 2字节 | 标识哪个应用程序发送(发送进程)。 |
Destination Port | 2字节 | 标识哪个应用程序接收(接收进程)。 |
Length | 2字节 | UDP首部加上UDP数据的字节数,最小为8。 |
Checksum | 2字节 | 覆盖UDP首部和UDP数据,是可选的。 |
data octets | 变长 | UDP负载,可选的。 |
5.3 抓包分析
5.3.1 捕获到UDP数据包
5.3.2 物理层
表示这是第1262帧数据报的详细信息。其中包的大小为2528个字节
5.3.3 数据链路层
表示以太网帧头部信息。源MAC和目标MAC地址
5.3.4网络层
5.3.5 传输层
5.3.6 数据区
6. TCP抓包分析
6.1 tcp介绍
TCP(Transmission Control Protocol)传输控制协议,一种面向连接、可靠、基于IP的传输层协议,主要目的是为数据提供可靠的端到端传输。
在OSI模型的第四层工作,能够处理数据的顺序和错误恢复,最终保证数据能够到达其应到达的地方。
6.1.1 标志位
SYN: 同步,在建立连接时用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
FIN: 终止,FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
ACK: 确认,ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。
DUP ACK:重复,重复确认报文,有重复报文,一般是是丢包或延迟引起的,从这个报文看应该是丢包了。
URG:紧急,当URG=1时,表示报文段中有紧急数据,应尽快传送
PSH:推送,当发送端PSH=1时,接收端尽快的交付给应用进程
RST:复位,当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接
6.1.2 端口
客户端与不同服务器建立连接时,源端口和目标端口可不同。
6.1.3 TCP三次握手
6.1.4 TCP四次挥手
TCP四次断开,例如关闭页面的时候就会断开连接
6.1.5 TCP概念
1. 发送窗口
无法简单的看出发送窗口的大小,发送窗口会由网络因素决定。发送窗口定义了一次发的字节,而MSS定义了这些字节通过多少个包发送。
2. 拥塞窗口(cwnd)
描述源端在拥塞控制情况下一次最多能发送的数据包的数量。
在发送方维护一个虚拟的拥塞窗口,并利用各种算法使它尽可能接近真实的拥塞点。
网络对发送窗口的限制,就是通过拥塞窗口实现的。
3. 在途字节数(bytes in flight)
已经发送出去,但尚未被确认的字节数。
在途字节数 = Seq + Len - Ack
其中Seq和Len来自上一个数据发送方的包,而Ack来自上一个数据接收方的包。
4. 拥塞点(congestion point)
发生拥塞时候的在途字节数就是该时刻的网络拥塞点。
先从Wireshark中找到一连串重传包中的第一个,再根据该Seq找到原始包最后计算该原始包发送时刻的在途字节数。
5. 慢启动
RFC建议初始拥塞窗口发送2、3、或4个MSS,如果发出去的包都能得到确认,则表明还没到拥塞点,可以收到n个确认增加n个MSS
6. 拥塞避免
慢启动持续一段时间后,拥塞窗口达到一个较大的值,就得放慢RFC建议在每个往返时间增加1个MSS,比如发了16个MSS全部确认,那么就增加到17个MSS
7. 超时重传
发出去的包在等待一段时间(RTO)后,没有收到确认,就只能重传了
8. 快速重传(Fast Retransmit)
不以时间驱动,而以数据驱动重传。如果包没有连续到达,就ACK最后那个可能被丢了的包,如果发送方连续收到3次相同的ACK,就重传。
9. SACK(Selective Acknowledgment)
选择性确认重传,ACK还是Fast Retransmit的ACK,SACK则是汇报收到的数据,在发送端就可以根据回传的SACK来知道哪些数据到了,哪些没有到。
10. 延迟确认(Delayed ACK)
如果收到一个包后暂时没什么数据发给对方,那就延迟一段时间再确认。假如这段时间恰好有数据要发送,那数据和确认信息可以在一个包中发送。
11. LSO
LSO拯救CPU而出的创意,为了缓解CPU的压力,把它的一部分工作外包给了网卡,比如TCP的分段。
启用LSO之后,TCP层就可以把大于MSS的数据块直接传给网卡,让网卡负责分段。
比如“Seq=348586,Len=2776”,被网卡分为“Seq=348586,Len=1388”和“Seq=349974,Len=1388”两个包。
在发送端抓包相当于站在CPU角度,只看到一个分段前的大包,而接收端就可以看到两个包。
所以才会出现只见重传包,不见原始包的情况。
12. Nagle算法
在发出去的数据还没有被确认之前,假如又有小数据生成,那就把小数据收集起来,凑满一个MSS或等收到确认后再发送。
13. Vegas算法
通过监控网络状态来调整发包速度。
当网络状态良好时,数据包的RTT比较稳定,这时可以增大拥塞窗口;
当网络开始繁忙时,数据包开始排队,RTT就会变大,这时就减小拥塞窗口。
6.1.6 选项字段
PTR(Pointer Record):指针记录,PTR记录解析IP地址到域名
TTL(Time to live):
存活时间,限制数据包在网络中存在的时间,防止数据包不断的在IP互联网络上循环,初始值一般为64,每经过一个路由减去1。
通过TTL过滤运营商劫持包,假的包是抢先应答的,所以和真实包的TTL可能不同(例如ip.ttl == 54)
Seq:数据段的序号,当接收端收到乱序的包,就能根据此序号重新排序,当前Seq等上一个Seq号与长度相加获取到
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
6.1.6 选项字段
PTR(Pointer Record):指针记录,PTR记录解析IP地址到域名
TTL(Time to live):
存活时间,限制数据包在网络中存在的时间,防止数据包不断的在IP互联网络上循环,初始值一般为64,每经过一个路由减去1。
通过TTL过滤运营商劫持包,假的包是抢先应答的,所以和真实包的TTL可能不同(例如ip.ttl == 54)
Seq:数据段的序号,当接收端收到乱序的包,就能根据此序号重新排序,当前Seq等上一个Seq号与长度相加获取到
[外链图片转存中…(img-c6G1cqJU-1715819648092)]
[外链图片转存中…(img-PuSf6lmu-1715819648092)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新