摘要:
概述 邻居项查找是通过neigh_lookup相关函数来进行的; ___neigh_lookup_noref,该函数根据输出设备和主键值(IPv4为下一跳ip地址)在邻居项hash表中查找,找到则返回该项; neigh_lookup,该函数调用了___neigh_lookup_noref函数,并且在 阅读全文
posted @ 2019-10-28 20:41
AlexAlex
阅读(1689)
评论(0)
推荐(0)
摘要:
概述 IP层输出数据包会根据路由的下一跳查询邻居项,如果不存在则会调用__neigh_create创建邻居项,然后调用邻居项的output函数进行输出; __neigh_create完成邻居项的创建,进行初始化之后,加入到邻居项hash表,然后返回,其中,如果hash表中有与新建邻居项相同的项会复用 阅读全文
posted @ 2019-10-28 20:40
AlexAlex
阅读(1157)
评论(0)
推荐(0)
摘要:
概述 邻居子系统支持多种实现,例如ARP,ND等,这些实现需要在其初始化的时候,调用neigh_table_init将邻居表项添加到全局邻居子系统数组中,并对实例中的字段(如hash,定时器等)进行相关初始化; 源码分析 分析过程以ARP为例,引出邻居表的初始化,在arp_init初始化中,调用ne 阅读全文
posted @ 2019-10-28 20:39
AlexAlex
阅读(1112)
评论(0)
推荐(0)
摘要:
概述 ip_fragment函数用于判断是否进行分片,在没有设置DF标记的情况下进入分片,如果设置了DF标记,则继续判断,如果不允许DF分片或者收到的最大分片大于MTU大小,则回复ICMP,释放skb,其余情况仍然需要走分片; ip_do_fragment是详细的分片流程,整个过程分为快速分片和慢速 阅读全文
posted @ 2019-10-28 20:37
AlexAlex
阅读(3121)
评论(0)
推荐(0)
摘要:
概述 ip_output-设置输出设备和协议,然后经过POST_ROUTING钩子点,最后调用ip_finish_output; ip_finish_output-对skb进行分片判断,需要分片,则分片后输出,不需要分片则知直接输出; ip_finish_output2-对skb的头部空间进行检查, 阅读全文
posted @ 2019-10-28 20:36
AlexAlex
阅读(2958)
评论(0)
推荐(1)
摘要:
概述 ip层在构造好ip头,检查完分片之后,会调用邻居子系统的输出函数neigh_output进行输出,输出分为有二层头缓存和没有两种情况,有缓存时调用neigh_hh_output进行快速输出,没有缓存时,则调用邻居子系统的输出回调函数进行慢速输出; 源码分析 1 static inline in 阅读全文
posted @ 2019-10-28 20:36
AlexAlex
阅读(1907)
评论(0)
推荐(1)
摘要:
概述 将要从本地发出的数据包,会在构造了ip头之后,调用ip_local_out函数,该函数设置数据包的总长度和校验和,然后经过netfilter的LOCAL_OUT钩子点进行检查过滤,如果通过,则调用dst_output函数,实际上调用的是ip数据包输出函数ip_output; 源码分析 1 in 阅读全文
posted @ 2019-10-28 20:35
AlexAlex
阅读(2376)
评论(1)
推荐(0)
摘要:
概述 ip_queue_xmit是ip层提供给tcp层发送回调,大多数tcp发送都会使用这个回调,tcp层使用tcp_transmit_skb封装了tcp头之后,调用该函数,该函数提供了路由查找校验、封装ip头和ip选项的功能,封装完成之后调用ip_local_out发送数据包; ip_build_ 阅读全文
posted @ 2019-10-28 20:34
AlexAlex
阅读(2169)
评论(0)
推荐(0)
摘要:
概述 tcp_transmit_skb的作用是复制或者拷贝skb,构造skb中的tcp首部,并将调用网络层的发送函数发送skb;在发送前,首先需要克隆或者复制skb,因为在成功发送到网络设备之后,skb会释放,而tcp层不能真正的释放,是需要等到对该数据段的ack才可以释放;然后构造tcp首部和选项 阅读全文
posted @ 2019-10-28 20:33
AlexAlex
阅读(2303)
评论(0)
推荐(0)
摘要:
概述 tcp_write_xmit函数完成对待发送数据的分段发送,过程中会遍历发送队列,进行窗口检查,需要TSO分段则分段,然后调用tcp_transmit_skb发送数据段; 源码分析 1 static bool tcp_write_xmit(struct sock *sk, unsigned i 阅读全文
posted @ 2019-10-28 14:44
AlexAlex
阅读(2351)
评论(0)
推荐(0)

浙公网安备 33010602011771号