![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux网络层
文章平均质量分 62
fanxiaoyu321
天道酬勤
展开
-
libnl资料
开发指导:http://www.infradead.org/~tgr/libnl/doc/core.html#_introductionAPI手册:http://www.infradead.org/~tgr/libnl/doc/api/index.html原创 2021-07-03 00:11:21 · 234 阅读 · 0 评论 -
IP地址管理
IP地址是和主机相关的,但是在linux内核中,IP地址却是配置到网卡的,即struct net_device中,在网络设备结构中,字段ip_ptr和ip6_ptr分别指向该网络设备的IP配置块和IPv6配置块,下面我们只关注IP配置块,ip_ptr指针实际指向的结构是struct in_device对象。struct net_device{... void *ip_ptr; /* IPv...原创 2020-03-08 11:15:21 · 1007 阅读 · 0 评论 -
IPv4之分片重组(三)
这篇笔记来看看分片重组功能额外的一些细节实现,包括:IP分片队列的回收;哈希表的重新散列;IP分片队列的回收首先,最正常的情况就是收到了所有的IP分片,然后将其组装成一个完整的IP报文,然后递交给上层。情况最差的,就是在规定的时间内没有收到全部的分片,这时需要有老化机制,使得之前缓存的片段能够被释放,否则对系统是一种负担。重组完成后的IP分片队列回收在ip_frag_reasm()...原创 2020-02-27 23:12:10 · 1283 阅读 · 0 评论 -
IPv4之分片重组(二)
继上一篇IPv4之接收过程中的分片重组(一),这篇笔记从整体上看linux是如何进行IP片段重组的。在接收路径上的ip_local_deliver()函数中,此时已经确认数据包是给本机的,会首先调用ip_defrag()判断是否是一个完整的IP报文,即是否需要进行重组,如果一切ok,那么继续过防火墙的LOCAL_IN点,继续数据包的接收流程,这里重点看报文重组逻辑:int ip_local_d...原创 2020-01-05 13:34:37 · 892 阅读 · 1 评论 -
IPv4之分片重组(一)
/* Process an incoming IP datagram fragment. */int ip_defrag(struct sk_buff *skb, u32 user){ struct ipq *qp; struct net *net; IP_INC_STATS_BH(IPSTATS_MIB_REASMREQDS); net = skb->dev ? skb-&...原创 2020-01-05 13:24:07 · 2646 阅读 · 3 评论 -
IPv4之报文分片
文章目录重要说明分片时机: ip_finish_output()报文分片: ip_fragment()分片是网络层的一个重要任务,IPv4需要对两种IP数据包进行分片:本地产生的数据包;转发的数据包;这两种数据包的长度如果超过了出口设备的MTU(或者PMTU),IPv4就会对数据包进行分片处理,使其适配出口设备的MTU。重要说明IPv4使用ip_fragment()函数执行分片处理,在设计时,要求该函数能够处理所有的情况。在实现过程中,可能高层协议已经为分片进行了一些准备工作,所以代码也充分原创 2019-12-29 22:42:14 · 2297 阅读 · 0 评论 -
IPv4之数据包发送流程
文章目录高层协议发送接口ip_queue_xmit()ip_build_and_send_pkt()ip_send_reply()ip_append_data()ip_push_pending_frames()IP内部数据包发送流程ip_local_out()ip_output()ip_finish_output()ip_finish_output2()3. 小结网络层的数据包发送过程应该分两个层次来看:网络层提供了哪些接口给高层协议(tcp、udp等)使用;网络层内部在收到要发送的数据包后做了哪些原创 2019-07-07 14:25:36 · 916 阅读 · 1 评论 -
IPv4之发送接口: ip_queue_xmi()
如IPv4输出之概述所介绍,该接口主要由tcp使用,tcp的大多数报文的发送也均是由该接口完成。int ip_queue_xmit(struct sk_buff *skb, int ipfragok){ struct sock *sk = skb->sk; struct inet_sock *inet = inet_sk(sk); struct ip_options *opt = ...原创 2019-07-07 15:34:52 · 659 阅读 · 0 评论 -
IPv4之数据包发送接口ip_append_data(二)
文章目录要点说明struct corkstruct ipcm_cookieip_append_data()ip_push_pending_frames()清除发送队列:ip_flush_pending_frames()这篇笔记分析了ip_append_data()函数的实现细节。要点说明看代码前,先来看看对该函数一些关键点进行说明:该函数的设计目标是将要发送的数据封装成一个个方便IP层处理的skb,它并不负责实际的发送,调用者需要调用ip_push_pending_frames()进行实际的数据发原创 2018-12-12 23:23:25 · 767 阅读 · 1 评论 -
IPv4之数据包发送接口ip_append_data(一)
如IPv4之发送接口概述所介绍,ip_append_data()主要是由udp使用。因为ip_append_data()的实现非常的复杂,涉及skb对数据的组织方式,以及各种出于性能考虑的分配策略,所以在分析其代码实现之前,有必要先讨论下内核实际采取的数据组织方式。函数功能首先需要明确ip_append_data()要实现的功能:ip_append_data()的任务就是将多个片段合并成一个大的IP报文,该函数仅仅做合并工作,并不实际发送报文,如果要发送,调用者后面应该主动调用ip_push_pen原创 2018-12-12 22:47:26 · 740 阅读 · 0 评论 -
IPv4之接收数据包流程
文章目录接收报文入口: ip_rcv()路由查询: ip_rcv_finish()数据包输入到本机: ip_local_delivery()向高层协议分发: ip_local_deliver_finish()转发数据包: ip_forward()ip_forward_finish()总结在IPv4之协议族初始化中有介绍,IPv4协议会向设备接口层注册接收处理函数,使得ETH_P_IP类型的数据包将会交由ip_rcv()函数处理。这篇笔记就从该函数入手,一直到将数据包递交给更高层协议为止,从宏观角度分析下数原创 2018-10-19 01:23:34 · 2114 阅读 · 0 评论