IP之Fragmentation

4.2.3 Fragmentation and Reassembly

IP的MTU是65536bytes;而Ethernet的MTU为1518bytes,所以需要分片,而router可能会对packet再次分片。

注意:分片的payload部分一定是8bytes的倍数。

属于同一个packet的所有分片的identifier field(位于IP header)的值相同,在flags field中的more fragments bit(位于IP header)设置为0表示是最后一个分片。fragmentation offset field(位于IP header)表示了该分片在IP packet中的位置,以8bytes为单位。要组装分片就是要用到以上3中信息。

分片的实现

TCPlayer调用ip_queue_ximit()将packet发送到IP layer,routing完成之后,会调用ip_queue_xmit2(),它检查packet的长度是否超过了link layer的
MTU,如果超过了,就调用ip_fragment(),它负责分片,分片时需要让每个分片的payload部分是8bytes的倍数。这些函数位于src/net/ipv4/ip_output.c。

组包的实现

大部分的函数位于src/net/ipv4/ip_fragment.c,当数据包来自于link layer时,ip_rcv()被调用,它调用ip_route_input()来做routing,routing后发现该packet需要提交给TCPlayer,ip_local_deliver()被调用,如果more bit和fragmentation offset不为0,则ip_defrag()被调用。

每个packet的分片被存放在一个叫做ipq_hash的hash table中,该ipq_hash是一个iqp structure

的数组,而hash用的hash function叫做ipqhashfn(),ipqhashfn()的参数:identifier, source IP address, destination IP address和上层协议的服务类型。ip_defrag()先调用ip_find(),ip_find()调用ipqhashfn()来定位ipq structure,如果定位失败,ipq_frag_create() 会产生一个新的ipq queue,ipq_frag_intern()会将该queue插入到hash table中。ip_defrag() 调用 ip_frag_queue() 来将分片放到queue中。如果所有的分片都已收到,则ip_frag_reasm()被调用,用来组装数据包。

[此为原创,转载请标明出处,谢谢!]

时间: 2024-10-17 19:16:59

IP之Fragmentation的相关文章

计算机网络 4.网络层与IP协议

网络中的每一台主机和路由器都有一个网络层部分.而路由器中也没有网络层以上的层次.网络层是协议栈中最复杂的层次. 转发forwarding:当一个分组到达某路由器的输入链路时.该路由器将分组移动到适当的输出链路. 选路routing:当分组从发送方流向接收方时.网络层必须决定这些分组所採用的路由或路径.而计算这些路径的算法被称为选路算法routing algorithm. 转发是路由器将分组从输入链路接口转移到适当的输出链路接口的本地动作.而选路分组由源到目的地时.决定端到端路径的网络范围的进程.

初探Linux网络协议栈

一点声明原文链接: http://www.ecsl.cs.sunysb.edu/elibrary/linux/network/LinuxKernel.pdf 译者注: 原文写于2003年,文中描述的不少内容已经发生了改变,在不影响愿意的情况下,我擅自增删了一些内容. 翻译过程中找到的好资料: How SKBs Work Evaluation of TCP retransmission delays Congestion Control in Linux TCP Anatomy of the Li

鼎点网络服务器租赁

DDoS防护亟需下一代解决方案 139w.com 鼎点网络 一 .DDoS***格局的巨大改变 在过去3年,Spamhaus黑名单长度剧增达到了难以置信的数十亿条:同时,随着IoT物联网的蓬勃发展,到2020年物联网设备的数量预测将超过500亿台,随之而来的物联网终端的***与威胁将与日俱增. 一切预示着全新安全***时代的到来.研究表明,企业不能再仅仅依赖于针对阻止单一***而设计,操作繁琐.行动迟缓.防护粗暴的过时Anti-DDoS 设备. DDoS***的动机不断变化 IDC行业研究表明,

[dpdk] 熟悉SDK与初步使用 (三)(IP Fragmentation源码分析)

对例子IP Fragmentation的熟悉,使用,以及源码分析. 问题一: main()函数大概是这样的:标红的三行将与下面叙述的事情相关 int main(int argc, char **argv) { ... ... /* init EAL */ ret = rte_eal_init(argc, argv); if (ret < 0) rte_exit(EXIT_FAILURE, "rte_eal_init failed"); ... ... /* launch per-

浅谈IP分片和组装的原理

分片是分组交换的思想体现,也是IP协议解决的两个主要问题之一.在IP协议中的分片算法主要解决不同物理网络最大传输单元(MTU) 的不同造成的传输问题.但是分组在传输过程中不断地分片和重组会带来很大的工作量还会增加一些不安全的因素.IP分片是网络上传输IP报文的一种技术手段.IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组.这一过程称为分片(fragmentation).每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MTU(Maximum Transmiss

Linux下的socket编程实践(一) 网络基本知识以及 TCP/IP简述

ISO/OSI七层参考模型 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后再转化为1.0,也就是我们常说的数模转换与模数转换).这一层的数据叫做比特.(标志:RJ-45) 2.数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问.这一层通常还提供错误检测和纠正,以确保数据的可靠传输,交换机属于本层. 3.网络层:在位于不同地理位置的网络中的两个主机系

IP协议详解

IP协议详解 前言 本屌今天可算是累坏了,一大早起来本来寻思赶快centOS虚拟机玩玩吧,那天刚装了系统,本来的虚拟机没了,今天想着先把centOS装上,结果给个系统不停的给我扯淡啊,显示虚拟机上不去网,好不容易上去网了,ping不通主机,主机ping不通虚拟机,各种办法都试了,最后我吧VMware8那块网卡禁用了,卧槽!!啥都好了,本屌一直鼓捣到晚上八点,从早晨10点多.服了我自己了. 引入 在前面的学习中,我们简单地IP接力和IP地址后,咱们今天具体的说说IP协议的具体细节和设计哲学. IP

TCP/IP详解学习笔记(2)-数据链路层

转http://blog.csdn.net/goodboy1881/article/details/665061 ———————————————————————————————————————————— 数据链路层有三个目的: 为IP模块发送和 接收IP数据报. 为ARP模块发送ARP请求和接收ARP应答. 为RARP发送RARP请 求和接收RARP应答 ip大家都听说过.至于ARP和RARP,ARP叫做地址解析协议,是用IP地址换MAC地址的一种协议,而RARP则叫做逆地址解析协议,在tcp/

Android网络编程系列 一 TCP/IP协议族之链路层

这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 数据链路层有三个目的: 为IP模块发送和 接收IP数据报. 为ARP模块发送ARP请求和接收ARP应答. 为RARP发送RARP请 求和接收RARP应答 ip大家都听说过.至于ARP和RARP,ARP叫做地址解析协议,是用IP地址换MAC地址的一种协议,而RARP则叫做逆地址解析协议,在tcp/ip协议的后面章节会介绍它们(在局域网里面用ARP协议可以很容易的搞瘫痪网络哦) 数据链路层的协议还是很多的,有我们最常用的以太