ip协议
老王不让用
芝兰生于幽谷,不以无人而不芳; 君子修身立德,不为穷困而改节
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux内核协议栈 IPv4分片重组Ⅲ之分片回收和重组
这篇笔记来看看分片重组功能额外的一些实现细节,包括:IP分片队列的回收; 哈希表的重新散列;IP分片队列的回收首先,最正常的情况就是收到了所有的IP分片,然后将其组装成一个完整的IP报文,然后递交给上层。情况最差的,就是在规定的时间内没有收到全部的分片,这时需要有老化机制,使得之前缓存的片段能够被释放,否则对系统是一种负担。重组完成后的IP分片队列回收在ip_frag_reasm()中,并没有看到有对IP分片队列的明确回收操作,相关的两个动作如下:/* Build a new IP转载 2020-10-23 10:34:48 · 1886 阅读 · 0 评论 -
linux内核协议栈 IPv4分片重组Ⅱ之 ip_defrag() 接口
Table of Contents1IP片段接收入口 ip_local_deliver()2 IP片段重组ip_defrag()2.1 查找IP分片队列 ip_find()2.1.1哈希查找分片队列 inet_frag_find()2.1.2新建IP分片队列inet_frag_create()2.2 重组IP报文 ip_frag_queue()2.2.1所有分片均已收到重组ip报文 ip_frag_reasm()1IP片段接收入口 ip_local_delive...转载 2020-10-23 10:25:26 · 2679 阅读 · 1 评论 -
linux内核协议栈 IPv4分片重组Ⅰ之相关数据结构
目录1 IP分片重组控制信息数据结构1.1网络命名空间 struct netns_ipv41.2 IPv4分片哈希表struct inet_frags1.3 IP分片队列struct ipq [ inet_frag_queue]1.4 IPv4分片关系图2 IPv4分片初始化ipfrag_init2.1 ip4_frag_match()2.2 ip4_frag_init()1 IP分片重组控制信息数据结构1.1网络命名空间 struct netns_ipv4...转载 2020-10-22 22:02:28 · 1539 阅读 · 0 评论 -
linux协议栈 IPv4之发送过程中的分段处理ip_fragment()
目录1 分片位置2 ip_fragment()代码分析1 分片位置分段是网络层的一个重要任务,网络层需要对两方面的IP数据包进行分段:本地产生的数据包; 转发的数据包;这两种数据包的长度如果超过了出口设备的MTU(或者PMTU),则网络层必须先对数据包进行分段,使其适配出口设备的MTU。IPv4使用 ip_fragment() 处理分段,在设计时,要求该函数能够处理所有的情况,但是在实现过程中,充分考虑了实际可能的情况,对某些场景的处理进行了优化,下面分情况介绍。对于本机发送转载 2020-10-22 14:28:34 · 1846 阅读 · 0 评论 -
linux内核协议栈 IPv4之发送接口: ip_append_data() Ⅱ 【UDP使用】
目录1 ip_append_data 功能说明1.1关键点1.2 struct cork1.3 struct ipcm_cookie2 ip报文数据区构造ip_append_data()3 ip报文发送(构造 ip 首部) ip_push_pending_frames()4 清除发送队列 ip_flush_pending_frames()1 ip_append_data 功能说明1.1关键点该函数的设计目标是将要发送的数据按照便于IP协议分段的方式组织成一个个s...转载 2020-10-21 21:39:04 · 742 阅读 · 0 评论 -
linux内核协议栈 IPv4之发送接口: ip_append_data() Ⅰ 【UDP使用】
目录1 ip_append_data 函数功能概述2 skb数据组织策略2.1 情形12.2 情形22.3 情形31 ip_append_data 函数功能概述ip_append_data() 主要是由 udp 使用。因为 ip_append_data() 的实现非常的复杂,涉及 skb 对数据的组织方式,以及各种出于性能考虑的分配策略,所以在分析其代码实现之前,有必要先讨论下内核实际采取的数据组织方式。首先需要明确 ip_append_data() 要实现的功能:ip_转载 2020-10-21 21:01:36 · 545 阅读 · 0 评论 -
linux内核协议栈 IPv4之发送接口 ip_queue_xmi()【TCP使用】
ip_queue_xmi() 接口主要由tcp使用,主要就干了两件事:如果还没有查询过路由,那么查路由; 构造IP首部,然后调用IPv4协议内部的接口继续发送;注意:该函数并没有处理分段,所以调用者应该保证传入的 skb 不会超过设备的 MTU,而 tcp 在组包的时候有考虑尽量不会让IP层进行分段,所以 tcp 可以调用该接口,而 udp 的发送过程并没有这种保证,所以该接口并不合适 udp。int ip_queue_xmit(struct sk_buff *skb, int ipfrago转载 2020-10-21 15:55:25 · 524 阅读 · 0 评论 -
linux内核协议栈 IPv4之发送接口概述
目录前言1 上层协议发送接口1.1 ip_queue_xmit()1.2 ip_build_and_send_pkt()1.3 ip_send_reply()1.4 ip_append_data()1.5 ip_push_pending_frames()2IP层内部发送过程2.1 ip_local_out()2.2 已过 LOCAL_OUT 链 dst_output()2.2.1 ip_output()2.3 已过 POST_ROUTING 链 ip_fin.转载 2020-10-21 14:40:55 · 973 阅读 · 0 评论 -
linux内核协议栈 IPv4之接收数据包流程
在IPv4之协议族初始化中有介绍,当设备接口层处理完输入数据包后,如果发现该报文应该由IP协议进一步处理,那么将会调用ip_rcv()函数。这篇笔记就从该函数入手,一直到将数据包递交给更高层协议为止,从宏观角度分析下数据包在IP层的传递过程。主要涉及如下文件:源代码路径 说明 net/ipv4/ip_input.c IP协议输入报文处理过程 net/ipv4/ip_forward.c IP协议转发报文处理过程 从设备接口层接收ip报文接收 ip_rcv()我们知道,转载 2020-10-20 22:59:14 · 2101 阅读 · 1 评论 -
linux内核协议栈 IP地址数据结构
目录1 网络设备struct net_device2 IP配置块struct in_device2.1 IP地址struct in_ifaddr2.2 IP地址作用域2.3 系统配置 struct ipv4_devconf3 IP配置块的创建与销毁inetdev_init()/inetdev_destroy()4 源IP地址选择inet_select_addr()1 网络设备struct net_deviceIP地址是和主机相关的,但是在linux内核中,IP地...转载 2020-10-20 20:08:52 · 1784 阅读 · 0 评论
分享