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

本文是《深入理解Linux网络技术内幕》的阅读笔记,主要探讨了Linux内核如何处理网络校验和,包括不同类型的硬件校验和能力、接收和发送封包时的校验和状态,以及路由器接收到的封包处理方式。同时,解释了MTU限制和ip_options_compile函数在编译IP选项时的作用。
摘要由CSDN通过智能技术生成

IP校验和始终由内核在软件中计算和验证。
net_device->features字段会表明设备的能力。除了各种可以设定的标志外,有些标志可用于定义硬件校验和计算能力:
NETIF_F_NO_CSUM:此设备很可靠,不需要使用任何L4校验和。
NETIF_F_IP_CSUM:此设备可以在硬件中计算L4校验和,但是只针对使用IPv4的TCP和UDP。
NETIF_F_HW_CSUM:此设备可以为任何协议在硬件中计算L4校验和。
当一个封包被接收时,skb->csum可能包含其L4校验和。skb->ip_summed字段则会记录L4校验和的状态。
CHECKSUM_NONE:
csum中的校验和无效,究其原因有:1.设备不提供硬件校验和计算。2.设备计算了硬件校验和,并发现数据帧已损坏。3.校验和必须重新计算并验证。
CHECKSUM_HW:
NIC以L4报头和有效载荷计算了校验和,然后把校验和拷贝到skb->csum字段。软件不仅必须把伪报头的检验和加至skb->csum,还必须验证最后所得的校验和。
CHECKSUM_UNNECESSARY:
NIC已经计算并验证了L4报头以及伪报头的校验和。所以软件无需对L4校验和与验证工作再做任何事。
当封包传输后,csum代表指向缓冲区内的地点的指针,不再是校验和本身。而此地点也就是硬件适配卡要把它即将计算的校验和存放的地方。因此,在封包传输期间,只有当校验和是在硬件中计算时,才会用到此字段。
CHECKSUM_NONE:
协议已经处理了校验和,设备不需要做任何事。当你转发一个出口数据帧时,L4校验和已经准备好,因为已经由传送端主机计算好了。
CHECKSUM_HW:
协议只把伪报头

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值