深入理解Linux网络技术内幕——IPv4 概念
来源:互联网 发布:网络大电影的宣发 编辑:程序博客网 时间:2024/04/30 06:24
1.大蓝图
大蓝图展示了IPv4协议与其他子系统之间的联系,保罗设备驱动、Netfilter、L4 层协议等之间的互动。
IPv4协议中的报文
我们可以大致看出数据在IPv4协议中的流向,
接收报文
设备驱动处理完硬件介绍到的数据后,IPv4协议的ip_rcv函数(net_receive_skb调用)得到了属于IPv4的报文,接着调用ip_rcv_finish对报文进行分析。判断是该转发还是交付本地上层协议。
如果是本地报文,则传给ip_local_deliver处理,如果是转发,那就交付ip_forward进行转发处理。
发送报文
对于接收到的属于转发的报文(来自ip_forward_finish)以及L4层传下来的报文,需要进行分析后传给设备驱动,发往其他系统。其流程主要是通过ip_finish_ouput进行。最后调用hard_start_xmit传给网卡设备驱动程序。
IPv4协议的任务
健康检查:
(略)
防火墙:
Netfilter在报文的生存周期里会多次被调用,以便处理报文。
处理选项:
应用程序设定的一些选项。
分段/重组:
IP报头的len选项可以表达64k数据段的长度,但是实际网络中不能传输那么大的数据,网络传输中一般有一个MTU,当要传输的数据报数据段超过这个MTU时,就必须进行分段、重组。
接收、传输与转发:
(略)
IP报头
服务类型:
(Type of service:TOS) 服务于Qos,现在用于差别服务,用于对报文进行差别对待。
标志:
重要字段
DF:不分段
MF:分段
分段偏移量:用于分段/重组
存活时间: 报文多少秒后就要被抛弃
协议:L4层协议标志
选项:
提供给应用程序对IP报文 是否进行分段、如何传输、路由选择等进行拓展。
分段和重组
前面已经说过,IP报头的len字段可以表达64k数据段的报文长度,但是实际网络无法传输这样大的数据,而存在MTU,报文长度超过MTU时,会被分成若干个长度为MTU的报分段(最后一个分段可能比较小),再分别进行传输。
IP分段一般在目的主机进行重组,(中间设备如果需要查看整个ip报文,那么也需要进行报文重组)。
分段和重组工作会占用CPU和内存,且可能会占用多余的网络带宽,产生比较大的开开销。有时我们需要避免分段和重组。
理论上上层协议不知道IP层在何时进行分段和重组操作,但是应用程序可以通过使用比其可以使用的MTU更小的尺寸传输数据,以避免报文分段工作。(可以看做吧分段放在应用层处理,但实际上它确实能够改善响应时间)。
路径MTU的发现
与用户配置、出口设备、默认值576、ICMP检测等相关。
检验和
检验报文是否错误、甚至修复错误。
0 0
- 深入理解Linux网络技术内幕——IPv4 概念
- 深入理解Linux网络技术内幕——IPv4 报文的接收(转发与本地传递)
- 深入理解Linux网络技术内幕——IPv4 报文的传输发送
- 深入理解Linux网络技术内幕——IPv4选项的处理
- 深入理解Linux网络技术内幕——IPv4 分段与重组
- 深入理解Linux网络技术内幕——网络设备初始化
- 深入理解Linux网络技术内幕——协议处理函数
- 《深入理解linux网络技术内幕》初识
- 深入理解linux网络技术内幕笔记
- 深入理解linux网络技术内幕--通知链
- 深入理解linux网络技术内幕第一笔
- 深入理解Linux网络技术内幕——Notification内核通知表链
- 深入理解Linux网络技术内幕——用户空间与内核空间交互
- 深入理解Linux网络技术内幕——PCI层和网络接口卡
- 深入理解Linux网络技术内幕——内核基础架构和组件初始化
- 深入理解Linux网络技术内幕——设备的注册与初始化(一)
- 深入理解Linux网络技术内幕——设备的注册与初始化(二)
- 深入理解Linux网络技术内幕——虚拟设备初始化小结
- 嵌入式linux驱动与软件详解之二 button驱动与程序
- 云服务器,价格其实不便宜,但为什么还要用呢
- PHP OPENSSL 函数手册翻译备查 -- openssl_verify
- 【Linux开发】Daemon后台运行及守护进程
- 正交匹配追踪(OMP)其它改进算法
- 深入理解Linux网络技术内幕——IPv4 概念
- django-celely
- FragmentTabHost简单小例子
- Busybox制作ARM(iTOP4412) 根文件系统
- 仿淘宝商品详情页面下拉黏滞效果
- JS、CSS以及img对DOMContentLoaded事件的影响
- 第十二章 动态内存
- class文件的格式
- 调试技巧MFC中TRACE宏的使用