《深入理解Linux网络技术内幕》阅读笔记(二十)

本文深入探讨内核如何通过IP封包ID选择机制来确保每次传输的IPID变化,以及Netlink消息如何最终被发送到系统中。解释了inet_peer结构在维护远程主机连接时的作用,并详细阐述了ipaddressadd命令的处理流程。此外,文章还介绍了IP-over-IP的概念及其应用,以及IPv4设计时的安全考量和IPsec在不同场景下的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
这里写图片描述
上图流程中,为何要两次查询来了解正在请求者是否已有一个项目具有相同的目的地地址呢?因此类似项目可能在读取锁放开以及写入锁被取得之间的时间建立而加入该树中。
inet_peer结构:内核会为最近联系过的每台远程主机都维护一个此结构的实例。
IP封包ID选择:
1.不能分段的封包(DF=1):加入这种情况是为了处理window系统IP协议栈中的bug。ID会间接从sock数据结构中取出,每次包裹函数访问该结构时,其值都会递增。这可以确保每次传输时IP ID 都会改变。
2.可以分段的封包(DF=0):ip_select_ident会处理ID。
/个人结论↓/
Netlink发送消息最终调用函数(其实就是把消息放入sock结构的sk_receive_queue队列,然后调用sock结构的函数指针sk_data_ready通知拥有sock的进程,有消息到达了):

858 static int __netlink_sendskb(struct sock *sk, struct sk_buff *skb)
859 {
860         int len = skb->len;
861 
862         skb_queue_tail(&sk->sk_receive_queue, skb);
863         sk->sk_data_ready(sk, len);
864         return len;
865 }

/个人结论↑/
这里写图片描述
如上图所示,若命令为ip address add 则是由函数ipaddr_modify处理。
IP-over-IP,也称为IP隧道或IPIP,就是传输在其他IP封包内的IP封包。该协议在VPN等中有其用处。
IPv4设计时并没有考虑安全问题。因此,开发出了几种细致度有所不同的方法:应用程序点多点方法,如SSL,主机点对点方法,若IPsec等。SSL需要应用程序使用它的安全层(位于TCP之上),而IPsec(多数人所谓的VPN)就不是这样,IPsec位于L3层之上,因此,对于应用程序而言是看不见的。虽然IPv4和IPv6都可以使用IPsec,但是,IPsec更适合IPv6.
unsigned char __pad1,__pad2: 因为当位置对齐32位边界时,内存的存取速度会比较快。Linux内核数据结构通常会采用无用字段(__padn)做填充,以便使其尺寸为32位的倍数。这就是__pad1,__pad2的用途,除此别无它用。
ipv4_devconf结构是存储每个设备的配置,而ipv4_config存储的配置则是用于主机身上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值