Linux icmp 学习笔记 之三 icmp相关疑问分析

在上一节的分析中,曾留下3个疑问:

在分析icmp数据包处理流程之前,我有如下疑问:

1、为什么要为每一个cpu创建一个仅用于发送icmp报文的socket呢,不使用socket不也是可以把icmp报文发送出去吗?

2、ping的工作原理是什么呢?

3、Traceroute的工作原理是什么呢?

1、对于第一个问题,通过上一节的分析,应该有如下原因

a)加锁访问,保证同一时刻只能发送一个icmp报文。因为socket->sk_lock.slock有一个自旋锁的定义,使用这个自旋锁,就可以保证同一时刻只要发送一个icmp报文。而如果不是socket,我们就需要创建新的结构体,来保证同一时刻只发送一个icmp报文,既然代码中已经有现成的结构了,就没有必要创建新的结构体

b)在linux内核中,把icmp、igmp、tcp、udp均作为四层处理流程来看待,而对于tcp、udp等四层数据,收发数据包都是使用socket来实现的,已经有了一套比较完善的机制,包括ip_append_data、ip_push_pending_frames等函数,所以对于icmp也适用这一套机制,没有必要专门为icmp创建新的机制。

2、对于ping的工作原理,主要是通过echo_request、echo_reply来实现的。

其中echo_request是使用应用层来实现的,根据下面的echo格式,在linux实现中,是将identifier设置为ping请求的进程id,而Sequence则作为请求的计数值,通过源、目的ip地址、identifier、Sequence就可以区分不同的ping应答。

TYPE(8/0)

CODE(0)

Checksum

identifier

Sequence

Option

3、对于traceroute的工作原理,主要是根据echo_request、echo_reply、time_exceeded这3个icmp类型数据包实现的。

首先traceroute进程会连续发送ttl值为1 、2、3、4、5、6...的echo request数据包,而中间的路由器站点收到ttl为0的数据包后,就会发送time_exceed的icmp差错报文,这样traceroute进程就会知道每一个中间站点的ip地址,而目的地址的pc或者路由器收到echo_request类型的数据包,即会回复echo_reply类型的数据包,这就traceroute的工作流程。

TYPE(11)

CODE(0-1)

Checksum

Not usedmust set 0

Option


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux操作系统中,ICMP协议的处理函数是在IP协议处理完以后调用的。具体来说,Linux中使用inet_add_protocol将ICMP处理函数相关的数据结构添加到inet_protos数组中,以便处理收到的ICMP报文。此外,ICMP攻击在网络安全中是一个重要的问题。针对ICMP泛洪攻击,可以采取一些防范措施,如限速、合法性检查、丢弃不需要处理的报文和不响应不可达报文等。限速可以通过限制ICMP报文的速率来减轻设备的处理压力。合法性检查和丢弃不需要处理的报文可以防止一些不合法的ICMP报文对设备造成影响。而不响应不可达报文可以保护设备的CPU资源,防止被大量的端口不可达或网络不可达报文攻击。以上措施可以帮助保护设备免受ICMP攻击的影响。123 #### 引用[.reference_title] - *1* [Linux icmp 学习笔记 之二 icmp数据处理流程](https://blog.csdn.net/weixin_39880666/article/details/116875751)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* *3* [Linux内核网络协议栈之ICMP协议](https://blog.csdn.net/weixin_71478434/article/details/126589363)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值