1.从协议设计的角度讲,各层分开设计有利于实现。
2.某些场景需要这些重复功能
举例来说,TCP和MAC层都有checksum,但是这种设计并非冗余
1)某些应用不需要经过MAC层,比如TCP本地回环通信
还有内核态和用户态调用socket通信
这种情况下,TCP层单独的校验和就派上用场了
2)如果硬件支持的话
接收到的数据包skb->ip_summed==CHECKSUM_COMPLETE,只需要校验伪首部和。
发送数据包时,skb->ip_summed==CHECKSUM_PARTIAL,也只需要计算伪首部校验和
注:硬件并非直接更改内核,也没有这个可能。只是收到包时,驱动可以根据硬件汇报的状态修改相应字段
3.从另一方面考虑,能不能去掉一层
例如能不能去掉TCP层?ip层加上checksum、重传等功能,可否代替TCP?
1)TCP多了拥塞控制,能及时调整发送速率,这部分功能至关重要。
而IP是尽可能发送
2)TCP为应用提供可靠服务
IP尽可能投递,所有的包同等对待,包的顺序等无法保证。
注:上述内容部分来自于论坛讨论及课堂,如有异议,请及时回复
转载请注明出处
阅读(824) | 评论(0) | 转发(0) |