看了linux IP层的代码,这里做一个简单总结,具体对照上图说明:
- 下层报文由路径PRE_ROUTING进入IP层,在RT节点经过路由决策将目地为本机的报文通过LOCAL_IN路径送至上层协议.非本机的报文由FOWARDING到达EM节点,而由本地产生的报文在RT节点经过路由决策后将通过LOCAL_OUT进入EM节点。流至EM节点的所有报文将通过POST_ROUTING流出IP层。
- IP分片和重组是相当重要的,IP重组发生在LOCAL_IN路径上,即对到达本机的报文使用IP重组。
- IP分片实际可以发生在3个地方,首先POST_ROUTING路径上会进行分片,此处应该是主要应对转发的报文。
在LOCAL_OUT路径上会进行分片,主要针对的是本地产生的UDP,ICMP,RAW IP报文。还有一个可能对载荷发生分片的地方是在IP层上面的传输层, 对于TCP,SCTP等协议是能知道MTU相关的,因此其可以完成相关工作,再加上IP层工作偏多,因此就将部分工作转移到针对以上协议的传输层。
- 在整个IP层的主要路径上有穿插有netfilter框架入口,如上图。在PRE_ROUTING,LOCAL_IN,LOCAL_OUT,IP_FORWARDING,POST_ROUTING都有netfilter入口,netfilter的主要作用是使后续的开发者能通过在netfilter中注册模块来在各个主要路径上获取报文信息以及改变报文在协议栈中的流向。
- linux网络设备对象本身是不带IP等属性的,因为这并不是网络设备必须的属性,因此linux对于这些附带属性使用一个通用结构存储管理,并将其附加在网络设备对象上。
- 用户空间常常需要进行与路由,设备IP等内核相关的操作,linux在这方面使用netlink和proc等机制完成用户空间与内核空间的交互。两者的不同在于netlink主要是为用户空间的程序提供交互接口,而proc文件系统主要是直接与用户交互。
linux-3.6
面码
时间: 2024-10-12 01:43:25