当前位置: 首页 > article >正文

level-icmp(ping)详细过程_6

29a73ba738697e948b3583e2ec0f7be3.png

313189ed3723a0cb855f8e9f37a5824c.png

TCP/IP协议栈将地址信息和协议分解标识符相结合, 以决定一个数据报是否被正确接收, 以及哪个实体将会处理该数据报。有几层还会检测数值( 例如校验和) , 以保证内容在传输中没有损坏

1、TCP/lP中的复用、分解和封装

虽然它不是TCP/IP协议族的真实部分, 但我们也能自底向上地说明从链路层开始如何进行分解, 这里使用以太网作为例子。我们在第3章讨论几种链路层协议。以太网帧包含一48位的目的地址(又称为链路层或介质访问控制( MAC ) 地址) 和一个16位的以太网类型字段0x0800(十六进制) 表示这个帧包含IPv4数据报。0x0806和0x 86DD分别表示ARP和IP v6假设目的地址与接收方的一个地址匹配, 这个帧将被接收并校验差错, 以太网类型字段用于选择处理它的网络层协议。    

如果接收到的帧包含一个IP数据报, 以太网头部和尾部信息将被清除, 并将剩余字节(包含帧的有效载荷) 交给IP层来处理。IP层检测一系列的字段, 包括数据报中的目标IP地址。如果目标地址与自已的一个IP地址匹配, 并且数据报头部( I P不检测有效载荷) 没有错误, 则检测8 位的IPv4协议字段( 在IPv6中称为下一个头部字段) , 以决定接下来调用哪个协议来处理。常见的值包括1 ( ICMP)、2 ( IGMP)、4 (IPv4)、6(TCP) 和17(UDP)。数值4 (41 ,表示IPv6 ) 的含义是有趣的, 因为它表示一个IP数据报可能出现在另一个IP数据报的有效载荷中。它违反了分层和封装的原有概念, 但是作为隧道投术的基础, 我们在第3 章进行更多讨论。

如果网络层( IPv4或IPv6)认为传入的数据报有效, 并且已确定正确的传输层协议, 则将数据报(必要时由分片重组而成) 交给传输层处理。在传输层中, 大部分协议(包括TCP和UDP) 通过端口号将复用分解到适当的应用。

2、Tcp/ip协议栈四层结构

Tcp/ip协议栈分为四层,分别是

应用层(HTTP、FTP 等)

传输层(TCP、UDP)

网络层(IP、ICMP)

链路层(以太网、ARP)

3、ping操作在level-ip中的处理流程    

3.1  netdev_receive() 链路层(Link Layer),也称为网络接口层(Network Interface Layer)

核心职责:

处理从物理网络设备(如网卡)接收到的原始数据帧

链路层操作:

解析以太网帧头(如 MAC 地址、协议类型 EtherType)。

校验数据完整性(如 CRC 校验)。

剥离链路层头部,将有效载荷(如IP数据包传递给上层协议栈(网络层)

       数据流路径:

网卡接收数据帧 → DMA 写入内核缓冲区。

触发中断 → 调用网卡驱动接收函数(链路层处理)。

netif_receive_skb(或类似函数)解析以太网头部,确定上层协议(如 IPv4/IPv6)。

将数据包递交给网络层(IP 协议处理)。

   3.2  ip_rcv() 属于网络层(Network Layer)即IP层

核心职责:

处理从链路层(如以太网、Wi-Fi)传递上来的 IP 数据包。

网络层操作:

IP 头部校验:验证 IP 数据包的完整性(如校验和、版本号)。

路由决策:判断数据包是发往本机、需要转发,还是应丢弃。

分片重组:若IP数据包在传输过程中被分片(Fragment),在此重组为完整数据包。    

协议分发:根据 IP 头部的 Protocol 字段(如 TCP=6、UDP=17、ICMP=1),将数

据包递交给传输层或 ICMP 层处理。

       3.3  icmpv4_incoming (icmp_rcv) ICMPv4 属于网络层Network Layer,与IP协议协同工作

       核心功能:

错误报告(如 Destination Unreachable、Time Exceeded)。

诊断与控制(如 Echo Request/Reply(ping)、Timestamp Request/Reply)。

路径控制(如 Redirect 消息)。

846e36486a8ef927b2080870fd98edf5.png

处理 Destination Unreachable(目标不可达)

流程:    

解析不可达原因(如网络不可达、端口不可达)。

提取原始触发报文(触发错误的数据包头部)。

通知上层协议(如 TCP 触发超时重传)。

3.4  ip_output

       下次继续分解。测试效果如下:

c3c2c42b8ba27f66d4826055b3db9e50.png

tap0的mac是临时虚拟的。

欢迎关注:

往期相关:

level-ip connect详细过程_5

Linux下level-ip安装及测试_4

Linux下tun/tap ping操作代码例子_3

Linux虚拟网卡设备tun/tap介绍_2

linux下安装tun模块详细教程

3_TCP/IP连接三次握手与断开四次挥手


http://www.kler.cn/a/527843.html

相关文章:

  • “LoRA技术中参数初始化策略:为何A参数采用正态分布而B参数初始化为0”
  • 【gRPC-gateway】初探grpc网关,插件安装,默认实现,go案例
  • http和https的区别?
  • 【ArcMap零基础训练营】03 常用数据网站的数据下载及处理
  • SpringBoot整合Swagger UI 用于提供接口可视化界面
  • LINUX部署微服务项目步骤
  • 输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
  • 团体程序设计天梯赛-练习集——L1-028 判断素数
  • 课程设计|结构力学
  • 蓝桥杯真题k倍区间
  • C# Winform enter键怎么去关联button
  • 分层多维度应急管理系统的设计
  • 疯狂拆单词01
  • 文件上传功能(一)
  • 抽象类与抽象方法详解
  • Matrials studio 软件安装步骤(百度网盘链接)
  • 【RocketMQ 存储】- broker 端存储批量消息的逻辑
  • CE-PBFT:大规模联盟区块链的高可用一致性算法
  • Unet 改进:在encoder和decoder间加入TransformerBlock
  • 【leetcode强化练习·二叉树】同时运用两种思维解题
  • 【Java异步编程】CompletableFuture基础(1):创建不同线程的子任务、子任务链式调用与异常处理
  • 黑马点评 - 商铺类型缓存练习题(Redis List实现)
  • Hive:复杂数据类型之Map函数
  • 深度学习之“数据的相关性”
  • 人工智能导论--第1章-知识点与学习笔记
  • 用一个例子详细说明python单例模式