linux ip 层实现读后感

看了linux IP层的代码,这里做一个简单总结,具体对照上图说明:

  1. 下层报文由路径PRE_ROUTING进入IP层,在RT节点经过路由决策将目地为本机的报文通过LOCAL_IN路径送至上层协议.非本机的报文由FOWARDING到达EM节点,而由本地产生的报文在RT节点经过路由决策后将通过LOCAL_OUT进入EM节点。流至EM节点的所有报文将通过POST_ROUTING流出IP层。
  2. IP分片和重组是相当重要的,IP重组发生在LOCAL_IN路径上,即对到达本机的报文使用IP重组。
  3. IP分片实际可以发生在3个地方,首先POST_ROUTING路径上会进行分片,此处应该是主要应对转发的报文。

    在LOCAL_OUT路径上会进行分片,主要针对的是本地产生的UDP,ICMP,RAW IP报文。还有一个可能对载荷发生分片的地方是在IP层上面的传输层, 对于TCP,SCTP等协议是能知道MTU相关的,因此其可以完成相关工作,再加上IP层工作偏多,因此就将部分工作转移到针对以上协议的传输层。

  4. 在整个IP层的主要路径上有穿插有netfilter框架入口,如上图。在PRE_ROUTING,LOCAL_IN,LOCAL_OUT,IP_FORWARDING,POST_ROUTING都有netfilter入口,netfilter的主要作用是使后续的开发者能通过在netfilter中注册模块来在各个主要路径上获取报文信息以及改变报文在协议栈中的流向。
  5. linux网络设备对象本身是不带IP等属性的,因为这并不是网络设备必须的属性,因此linux对于这些附带属性使用一个通用结构存储管理,并将其附加在网络设备对象上。
  6. 用户空间常常需要进行与路由,设备IP等内核相关的操作,linux在这方面使用netlink和proc等机制完成用户空间与内核空间的交互。两者的不同在于netlink主要是为用户空间的程序提供交互接口,而proc文件系统主要是直接与用户交互。

linux-3.6

面码

时间: 2024-08-11 07:35:49

linux ip 层实现读后感的相关文章

Linux netfilter 学习笔记 之十二 ip层netfilter的NAT模块代码分析

本节主要是分析NAT模块相关的hook函数与target函数,主要是理清NAT模块实现的原理等. 1.NAT相关的hook函数分析 NAT模块主要是在NF_IP_PREROUTING.NF_IP_POSTROUTING.NF_IP_LOCAL_OUT.NF_IP_LOCAL_IN四个节点上进行NAT操作,在上一节中我们知道nat表中只有PREROUTING.POSTROUTING.LOCAL_OUT三条链,而没有NF_IP_LOCAL_IN链,所以不能创建在LOCAL_IN hook点的SNAT

Linux 网卡驱动学习(六)(应用层、tcp 层、ip 层、设备层和驱动层作用解析)

本文将介绍网络连接建立的过程.收发包流程,以及当中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 1.应用层 对于使用socket进行网络连接的server端程序.我们会先调用socket函数创建一个套接字: fd = socket(AF_INET, SOCK_STREAM, 0); 以上指定了连接协议,socket调用返回一个文件句柄,与socket文件相应的inode不在磁盘上,而是存在于内存. 之后我们指定监听的port.同意与哪些ip建立连接,并调用bind完毕port绑定:

Linux netfilter 学习笔记 之十一 ip层netfilter的NAT模块初始化以及NAT原理

1.NAT的原理 NAT会修改数据包的ip层的源或者目的ip地址.在实际应用中,NAT 主要用于实现私有网络访问公共网络的功能. 1.1 SNAT 源目的地址转换,即对ip数据包的源ip地址进行转换操作,典型的应用即是网关,网关的lan侧会下挂至少两台设备,而这两台设备的ip地址都是lan侧地址,而lan侧设备又要访问公网,这就需要SNAT大展身手了,通过将lan侧发送的ip数据包的源ip地址转换成公网地址即可以访问公网了. 1.2 DNAT 目的地址转换主要是将ip数据包的目的ip地址进行修改

第二十二章 TCP/IP层的实现

                      第二十二章    TCP/IP层的实现        我比较喜欢先难后易,如果把GPU显示管理.和网络管理拿下后:我会从头整理.改写一遍APO操作系统.这样,就会形成APO操作系统的锥形.也获得了全局观.内核CPU线路.和用户CPU线路,你可以将它们看成是独立的2个32位CPU核:内核CPU主要任务是实时处理.硬件中断,256个实时线程包含了一些中断程序的后半部.用户CPU主要是动态优先级进程.线程调度,各种应用程序的运行:2个核之间是通过消息交互.句

用Netcat,SSH构建的IP层加密隧道搭建VPN

[关于题外话在最后] 写作本文主要基于两点,首先是因为我前段时间写了几篇关于VPN的新解,收到了很多的邮件反馈,我也思考了很多,另一个方面是因为很多人问我怎么用QQ,P2P搭建一个IP层的VPN,我的回答是"我也不知道".我确实不知道,根本就没有试过,只是有个这样那样的想法...我主要是没有能力去Hack这些非Linux上的东西...所以说,我写这篇文章,用UNIX的方法"将多个小工具结合起来"实现我的那些没有实现的想法,抛砖引玉一下. 声明: 本文没有技术含量,甚

TCP/IP协议之IP层

TCP/IP协议的结构参见下图.有应用层,运输层,网络层,链路层. 但是如果更细化的话,其实还有几层没在这上面体现出来. 1 表示层:数据格式化,代码转换,加密. 没有协议 2 会话层:解除或者建立与其他结点的联系.没有协议 3 物理层:以二进制形式在物理链路上传输数据.协议有ISO2100,IEEE802 在上图中加上这三层协议.就构成了OSI七层协议网络模型.从上到下分别是应用层,表示层,会话层,传输层,网络层.数据链路层,物理层. 为什么一个数据传输要分成这么多层呢.统一为一个模块不行么.

IP 层收发报文简要剖析1-ip报文的输入

ip层数据包处理场景如下: 网络层处理数据包文时需要和路由表以及邻居系统打交道.输入数据时,提供输入接口给链路层调用,并调用传输层的输入接口将数据输入到传输层. 在输出数据时,提供输出接口给传输层,并调用链路层的输出接口将数据输出到链路层.在输入输出数据时,需要查找路由表 通过netfiler处理等操作. 一.ip数据报文输入 ip_rcv &ip_rcv_finish &ip_rcv_finish2 1.在inet_init中注册了类型为ETH_P_IP协议的数据包的回调ip_rcv 2

Linux用户层直接操作GPIO

Linux用户层直接操作GPIO 在一个老手的指导下,应用层可以直接操作GPIO,具体指设置GPIO的输入输出以及输出电平高或者低.这个大大地提高了灵活性,官方的文档有GPIO Sysfs Interface for Userspace,GPIO Sysfs. 这里我记录一下使用过例子: # RK30_PIN0_PD4 # A0-7 -> 0-7 / B0-7 -> 8-15 / C0-7 -> 16-23 / D0-7 -> 24-31 echo 28 > /sys/cla

Why 使用TLS记录协议封装IP层VPN IS A Bad Idea

一个很自然的想法,使用TLS封装一个IP数据报实现一个第三层的VPN.这种想法一定是经过了深思熟虑的,但是不幸的是,这是个错误的想法.有一篇文章<Why TCP Over TCP Is A Bad Idea>,详细解释了Why.事实上重传叠加问题是无法解决的,要知道,TCP的RTO计算是极其复杂的,影响它的因素也很多,这就是说,只要你用一个TCP封装另一个TCP,外层TCP丢包,且RTO小于内层TCP的RTO,连接就会崩溃.而以上这个条件是很容易满足的.       用TLS来封装IP数据报是