首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IP 数据包接收过程

我们通过 图1 来展示 net_rx_action 函数的处理过程: ?...图1 net_rx_action 处理过程 网络层的处理接口保存在 ptype_base 数组中,其元素的类型为 packet_type 结构,而索引为网络层协议的类型,所以通过网络层协议的类型就能找到对应的处理接口...处理IP数据包 通过上面的分析,我们知道当内核接收到一个 IP 数据包后,会调用 ip_rcv 函数处理这个数据包,下面我们来分析一下 ip_rcv 函数的实现: int ip_rcv(struct...函数首先判断数据包是否为一个 IP 分片(IP 分片将在下一篇文章介绍,暂时可以忽略),如果是就调用 ip_defrag 函数对数据包进行分片重组处理。...如果数据包不是一个分片或者分片重组成功,那么最终调用 ip_local_deliver_finish 函数处理数据包

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    IPv6数据包的分片和重组

    2、IPv6和IPv4分片的差异化 2.1、中间节点的处理方式不同 首先IPv6和IPv4不同的是IPv6只允许在源节点分片和目的节点重组,中间节点路由器只做转发,不再对IPv6数据包重组或再次分片,当收到的分片数据包依然大于...4、如何分片和重组的呢? 4.1、源节点分片数据包 当源节点决定发送一个数据包,并且大于其设定的MTU时,需要对数据进行分片之后再发送。...Note: 由于中间节点路由器不针对分片数据包重组和再分片,所以源节点的MTU最好定义为所有节点的MTU最小值。...4.2、目的节点重组数据包 当目的节点收到各个分片数据包,通过源和目的地址、Identification、Fragment Offset和M Flag进行连接得到重组数据包重组后的数据包的不可分片部分...5.2、IPv6数据包重组 目的节点收到了如下三个数据包: Payload Length=1392;Next Header=Fragment Header for IPv6(44);Fragment Header

    1.7K20

    通信|IPv4数据包的分片和重组

    ,所以就可能碰到IP分片和重组等问题。...——MTU 大衣柜是有自己的标准的,那么对于IP数据包这样的数据流分片要参照什么标准呢?...3、分片和重组的相关定义 大衣柜的各个部分都是有对应标准,或者人为标号来规定各个分片的连接方式以方便再次重组。 那么IP网络中是如何定义这种连接的呢?...首先IP包里的Total Length中包括了数据包头长和数据包的净长度,数据包净长度为Total Length-IHL*4,因此此数据包的净长度为3000-5*4=2980。...更简单的一个算法就是使用最后一个分片的Fragment Offset*8+最后一个分片的长度即为原始数据包的总长度:61*8+312=488+312=800。 以上就是IPv4数据包的分片和重组内容。

    2.2K41

    通信|IPv6数据包的分片和重组

    2、IPv6和IPv4分片的差异化 2.1、中间节点的处理方式不同 首先IPv6和IPv4不同的是IPv6只允许在源节点分片和目的节点重组,中间节点路由器只做转发,不再对IPv6数据包重组或再次分片,当收到的分片数据包依然大于...4、如何分片和重组的呢? 4.1、源节点分片数据包 当源节点决定发送一个数据包,并且大于其设定的MTU时,需要对数据进行分片之后再发送。...Note: 由于中间节点路由器不针对分片数据包重组和再分片,所以源节点的MTU最好定义为所有节点的MTU最小值。...4.2、目的节点重组数据包 当目的节点收到各个分片数据包,通过源和目的地址、Identification、Fragment Offset和M Flag进行连接得到重组数据包重组后的数据包的不可分片部分...5.2、IPv6数据包重组 目的节点收到了如下三个数据包: Payload Length=1392;Next Header=Fragment Header for IPv6(44);Fragment Header

    3.8K41

    Linux 1.2.13 -- IP分片重组源码分析

    Linux 1.2.13 -- IP分片重组源码分析 本文源码解析参考: 深入理解TCP/IP协议的实现之ip分片重组 – 基于linux1.2.13 计网理论部分参考: << 自顶向下学习计算机网络...而接收端会接收到IP重组后得到的完整UDP数据报,然后进行校验和检验后,将payload传递给应用程序,整个过程中UDP协议并不会对接收的应用程序进行分段: 上图存在一些问题,没有算上udp header...---- IP分片重组源码分析 上面铺垫了很多理论知识,从本节开始,我们进入实践环节,看看IP分片重组过程是否如我们所言一般。...} return(NULL); } ip_rcv ip_rcv函数负责完成一个IP数据报的接收过程 /* * This function receives all incoming IP datagrams...协议是不可靠协议,虽然IP层需要进行分片和重组,但是不会使用ACK,重传等机制确保该过程的可靠性,而仅仅使用超时定时器来判断分组重组过程是否超时,如果超时,则回应一个ICMP重组超时错误报文

    50220

    Linux处理数据包过程

    当用户空间响应(应用程序生成新的数据包)时,响应数据包是本机产生的新数据,在响应包流出之前,需要做路由决策,根据目标决定从哪个网卡流出。...但Linux主机默认未开启ip_forward功能,这使得数据包无法转发而被丢弃。...Linux主机和路由器不同,路由器本身就是为了转发数据包,所以路由器内部默认就能在不同网卡间转发数据包,而Linux主机默认则不能转发。...如下图: 另外,IP地址是属于内核的(不仅如此,整个tcp/ip协议栈都属于内核,包括端口号),只要能和其中一个地址通信,就能和另一个地址通信(这么说是不准确的,即使地址属于内核,但还存在一个检查数据包是否丢弃的问题...ipv4/ip_forward 0 [root@xuexi ~]# sysctl -a | grep ip_forward net.ipv4.ip_forward = 0 net.ipv4.ip_forward_use_pmtu

    1.9K40

    网络数据包的接收过程

    Linux 网络架构 Linux 网络初始化 网络设备子系统初始化 网卡驱动初始化 协议栈初始化 数据包的接收过程 硬中断处理 ksoftirqd 软中断处理 协议栈处理 应用层处理 总结 这里深度理解一下在...Linux下网络包的接收过程,为了简单起见,我们用udp来举例,如下: int main(){ int serverSocketFd = socket(AF_INET, SOCK_DGRAM,...数据包的接收过程 硬中断处理 首先当数据帧从网线到达网卡,网卡在分配给自己的 ringBuffer 中寻找可用的内存位置,找到后 DMA 会把数据拷贝到网卡之前关联的内存里。...注意:当RingBuffer满的时候,新来的数据包将给丢弃。ifconfig查看网卡的时候,可以里面有个overruns,表示因为环形队列满被丢弃的包。...在这个初始化过程中,把自己的DMA准备好,把NAPI的poll函数地址告诉内核 启动网卡,分配RX,TX队列,注册中断对应的处理函数 当上面都ready之后,就可以打开硬中断,等待数据包的到来了: 网卡将数据帧

    37411

    网络数据包的接收过程

    Linux 网络架构 Linux 网络初始化 网络设备子系统初始化 网卡驱动初始化 协议栈初始化 数据包的接收过程 硬中断处理 ksoftirqd 软中断处理 协议栈处理 应用层处理 总结 这里深度理解一下在...Linux下网络包的接收过程,为了简单起见,我们用udp来举例,如下: int main(){ int serverSocketFd = socket(AF_INET, SOCK_DGRAM,...数据包的接收过程 硬中断处理 首先当数据帧从网线到达网卡,网卡在分配给自己的 ringBuffer 中寻找可用的内存位置,找到后 DMA 会把数据拷贝到网卡之前关联的内存里。...注意:当RingBuffer满的时候,新来的数据包将给丢弃。ifconfig查看网卡的时候,可以里面有个overruns,表示因为环形队列满被丢弃的包。...在这个初始化过程中,把自己的DMA准备好,把NAPI的poll函数地址告诉内核 启动网卡,分配RX,TX队列,注册中断对应的处理函数 当上面都ready之后,就可以打开硬中断,等待数据包的到来了: 网卡将数据帧

    39411

    TCPIP 之IP数据报ip分片ip分片过程

    )的值为00H ---- 总长度字段占16位: IP分组的总字节数(首部+数据) 最大IP分组的总长度: 65535B 最小的IP分组首部: 20B IP分组可以封装的最大数据: 65535-20=65515B...IP分组封装的是哪个协议的数据包 实现复用/分解 E.g. 6为TCP,表示封装的为TCP段; 17为UDP, 表示封装的是UDP数据报 ---- 首部校验和字段占16位:实现对IP分组首部的差错检测...之间:目的是补齐整个 首部,符合32位对齐,即保证首部长度是4字节的倍数 ip分片 在介绍ip数据报首部字段的时候,我们忽略了第二行字段的介绍,因为这一行的字段涉及到ip数据报的分片,我们将先介绍ip...image.png 大IP分组向较小MTU链路转发时, 可以被“分片” (fragmented) 1个IP分组分为多片IP分组 IP分片到达目的主机后进行“重组”(reassembled) IP首部的相关字段用于标识分片以及确定分片的相对顺序...相对偏移量 片偏移字段以8字节为单位 ip分片过程 假设原IP分组总长度为L,待转发链路的MTU为M 若L>M,且DF=0,则可以/需要分片 分片时每个分片的标识复制原IP分组的标识 通常分片时,除最后一个分片

    5.3K20

    71张图详解IP 地址、IP 路由、分片和重组、三层转发、ARP、ICMP

    IP 路由 IP 路由是设备根据 IP 地址对数据进行转发的操作。当一个数据包到达路由器时,路由器根据数据包的目的地址查询路由表,根据查询结果将数据包转发出去,这个过程就是 IP 路由。 ?...数据链路MTU表 IP 报文的分片与重组 当遇到 IP 数据包大于数据链路 MTU 时,往往无法直接发送出去,主机或路由器就会对 IP 数据包进行分片处理。...经过分片后的 IP 数据,只会在目标主机上进行重组,中途经过路由器时不会进行重组。 ?...IP报文的分片与重组 路径MTU发现 分片机制有两点不足: 加重路由器的处理性能; 在分片传输中,一旦某个分片丢失,会造成整个 IP 数据包作废。...标志位含义 分片偏移( FO:Fragment Offset ) 字段长度为 13 比特,表示分片在整个数据包中的位置。作用是告诉重组分片的设备,应该按照什么样的顺序重组数据包

    1.6K31

    71张图详解IP 地址、IP 路由、分片和重组、三层转发、ARP、ICMP

    IP 路由 IP 路由是设备根据 IP 地址对数据进行转发的操作。当一个数据包到达路由器时,路由器根据数据包的目的地址查询路由表,根据查询结果将数据包转发出去,这个过程就是 IP 路由。...数据链路MTU表 IP 报文的分片与重组 当遇到 IP 数据包大于数据链路 MTU 时,往往无法直接发送出去,主机或路由器就会对 IP 数据包进行分片处理。...经过分片后的 IP 数据,只会在目标主机上进行重组,中途经过路由器时不会进行重组。...IP报文的分片与重组 路径MTU发现 分片机制有两点不足: 加重路由器的处理性能; 在分片传输中,一旦某个分片丢失,会造成整个 IP 数据包作废。...标志位含义 分片偏移( FO:Fragment Offset ) 字段长度为 13 比特,表示分片在整个数据包中的位置。作用是告诉重组分片的设备,应该按照什么样的顺序重组数据包

    95121

    DHCP 分配 IP 地址的过程

    简单的来说,就是每当一个设备加入子网之后,他还没有 IP 地址,然后 DHCP 服务器就会为他分配一个不同其他设备的 IPIP,就是为了防止冲突的。这个呢,广泛用于路由器和现代交换机。...分配过程 请求IP租约:当一台设备加入子网,他没有被分配 IP 地址。...提供IP租约:当 DHCP 服务器(一般指路由器)收到 DHCP 报文段,将会提供一个不冲突的 IP 地址,原地址为自身 IP,一般是网关地址,进行 IP 单播,以太网帧上存在目标和源的 MAC 地址。...选择IP租约:当设备获得 IP 地址后,将会进行一次广播,让子网中其他 DHCP 服务器,收回对此设备分配的多余的 IP 地址。...(子网存在多种 DHCP 服务器时) 确认IP租约:客户在获得了一个IP地址以后,就可以发送一个ARP请求来避免由于 DHCP 服务器地址池重叠而引发的IP冲突。

    2.4K20

    解密IP分片与重组:数据传输中的关键技术

    引言在上一章节中,我们详细讨论了IP的分类和无分类原则的原理以及其在网络通信中的应用。IP分片与重组是在数据包传输过程中起到关键作用的机制。...当数据包的大小超过网络链路的MTU(最大传输单元)限制时,IP分片将数据包分割为多个较小的分片进行传输。这些分片在网络中独立传输,到达目的地后,通过IP重组机制将它们重新组合成完整的数据包。...这种分片和重组过程确保了大尺寸的数据包能够在网络中进行传输,同时保证了数据的完整性和可靠性。在本章节中,我们将深入探讨IP分片与重组的工作原理。...假设有一份较大的数据在TCP层不进行分段,在传输过程中发生了丢包现象,TCP会进行重传,但重传的单位却是整个大份数据(尽管IP层会将数据切分为多个小包,每个小包的长度为MTU)。...不同的数据链路具有不同的最大传输单元(MTU),当数据包的大小超过MTU限制时,IP分片将数据包分割为多个较小的分片进行传输,到达目的地后通过IP重组机制重新组合成完整的数据包

    86810

    浅谈网络数据包传递过程中涉及的话题

    地址(在这里指的是默认网关A端口的mac),在这里需要指出的是,一个数据包在传输过程中,目的IP和源IP是永远不变的,一直是主机和服务器的IP,而目的mac和源mac却是一直变化的,这也是arp协议存在的一个理由吧...数据包进入router0的A端口后,进行的是一个拆包和封包的过程,路由器是三层设备,数据还是会从最底层走向最高层,每层把数据包进行拆解,得到自己想到的东西,走到最高层后又从最高层走向最底层并从B口流出,...每个数据包都有个重要的seq number,这是tcp数据包进行分段(下面会有解释)成多个数据包进行传输,每个数据包打上的序号标签,用于在目的地进行数据包重组,这不就是通信网中的报文分组交换,分组交换方式有两种...需要特别指出的是每个数据包的报头都会有目的端口,源端口和自己的序列号(为了数据包重组成原始数据);但再进行IP分片后,只有第一片含有TCP/UDP表头,其他片没有,但所有片都会有IP层的表头,如源IP和目的...IP,以及分片偏移量(为了重组成一个原始数据包)等。

    1.6K50
    领券