自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

one_clouder的专栏

漫步云中,关注云网络领域

  • 博客(14)
  • 收藏
  • 关注

原创 【Linux4.1.12源码分析】IP层csum计算

从收包和发包来看IP层的csum是如何计算的,是如何进行校验的。csum值为2个字节长度。发包流程如下所示,在__ip_local_out_sk函数中调用ip_send_check函数进行csum计算。ip_local_out->ip_local_out_sk->__ip_local_out->__ip_local_out_skip_send_check函数/* Gener

2016-10-31 23:30:14 2773

原创 【Linux4.1.12源码分析】协议栈报文接收之传输层处理分析(UDP)

UDP报文的处理入口是udp_rcv函数,该函数是在ip_local_deliver_finish函数中被调用的。1、udp_rcv函数int udp_rcv(struct sk_buff *skb){ return __udp4_lib_rcv(skb, &udp_table, IPPROTO_UDP);}2、__udp4_lib_rcv函数int __udp4_lib_rcv

2016-10-30 23:47:58 3274

原创 【Linux4.1.12源码分析】AF_INET raw socket实现原理分析

在分析AF_PACKET raw socket实现时,我们从创建socket入手来分析, 本篇我们从收包流程入手来分析。在分析协议栈报文接收IP层分析时,我们知道IP层把报文交给raw sock的如后函数是raw_local_deliver。我们从这个函数来看看是如何把一个报文提交给raw socket的。1、raw_local_deliver函数int raw_local_deliver

2016-10-26 22:19:26 2252 6

原创 【Linux4.1.12源码分析】协议栈报文接收之IP层处理分析(ip_forward)

上一篇分析报文接收,IP层提交本地处理的流程,本篇分析报文转发场景的处理过程,在ip_rcv_finish函数中,会根据IP地址决定是提交给本机处理,还是报文转发,报文转发的入口函数为ip_forward,本篇将从ip_forward函数入手分析转发过程。1、ip_forward函数int ip_forward(struct sk_buff *skb){ u32 mtu; struc

2016-10-26 19:25:16 2638 2

原创 【Linux4.1.12源码分析】协议栈报文接收之IP层处理分析(ip_local_deliver)

报文提交给内核协议栈处理后,最终会调用到__netif_receive_skb_core函数,如果报文没有被rx_handler消费掉,最终会交给ptype_base中注册的协议处理,包括内核注册的协议,也包括raw socket等创建的协议处理。本文将分析普通ipv4报文的处理过程,处理入口函数为ip_rcv函数。1、ip_rcv函数int ip_rcv(struct sk_buff *

2016-10-24 22:34:29 1961

原创 【Linux4.1.12源码分析】邻居子系统实现分析

邻居子系统实现了IP层发包不感知MAC,即由邻居子系统实现了MAC头封装。MAC头信息包括:源MAC、目的MAC、协议类型,其中协议类型由上层指定,例如IPV4等等,源MAC地址是出口设备MAC地址(在路由表中确定出口设备),目的MAC是由邻居子系统提供的,大致可以猜到,邻居子系统会主动发起arp请求获取到mac地址,实现MAC封包。IP层发包最后会调用ip_finish_output2函数,我们

2016-10-22 08:37:05 3668

原创 【Linux4.1.12源码分析】AF_PACKET raw socket实现原理分析

raw socket按照检测到的报文主要可以分两类:mac报文、IP报文、传输层报文。本文分析二层报文,例如:socket(AF_PACKET, SOCK_RAW, ETH_P_ALL)方式创建的socket,可以检测到所有的二层报文。raw socket实现的核心在于,socket的建立,并注册到相应的数据中,实现在收包阶段把报文提交给socket处理,例如ptype_all、ptype_bas

2016-10-21 21:16:26 4539

原创 【Linux4.1.12源码分析】协议栈报文接收之netif_receive_skb函数分析

netif_receive_skb函数是协议栈报文接收的入口,一般由驱动调用,把报文送入协议栈,4.1.12内核做了对sk的封装,目的是什么没还未搞清楚。1、netif_receive_skb函数static inline int netif_receive_skb(struct sk_buff *skb){ return netif_receive_skb_sk(skb->sk, s

2016-10-20 22:47:51 10686

原创 【Linux4.1.12源码分析】二层报文发送之net_tx_action

net_tx_action函数报文发送软中断处理函数,本篇不分析软中断注册过程,只分析该函数的处理过程。 产生发包软中断最常见的场景是:1)报文发送PPS很高;2)网络qos限制。1、net_tx_action函数static void net_tx_action(struct softirq_action *h){ struct softnet_data *sd = this_cpu

2016-10-15 10:20:53 3069

原创 【Linux4.1.12源码分析】二层报文发送之报文GSO分段(skb_segment)

skg_segment是实现封装报文GSO分段的基础,直接抛代码。/** * skb_segment - Perform protocol segmentation on skb. * @head_skb: buffer to segment * @features: features for the output path (see dev->features) * * This

2016-10-14 22:18:03 2617

原创 【Linux4.1.12源码分析】二层报文发送之报文GSO分段(TCP)

TCP报文GSO分段的入口函数是tcp4_gso_segment,在tcpv4_offload对象中定义。1、tcp4_gso_segment函数static struct sk_buff *tcp4_gso_segment(struct sk_buff *skb, netdev_features_t features){ if (!pskb_may_pull(skb, si

2016-10-14 21:12:09 1648

原创 【Linux4.1.12源码分析】二层报文发送之报文GSO分段(UDP)

UDP报文GSO分段的入口函数是udp4_ufo_fragment,由udpv4_offload常量中定义。1、udp4_ufo_fragment函数static struct sk_buff *udp4_ufo_fragment(struct sk_buff *skb, netdev_features_t features){ struct sk_buff *segs =

2016-10-14 20:30:13 2761

原创 【Linux4.1.12源码分析】二层报文发送之报文GSO分段(IP层)

IP层的GSO/GRO定义在ip_packet_offload结构体中。static struct packet_offload ip_packet_offload __read_mostly = { .type = cpu_to_be16(ETH_P_IP), .callbacks = { .gso_segment = inet_gso_segment, //gso分段函数

2016-10-09 22:48:18 1851

原创 【Linux4.1.12源码分析】二层报文发送之报文GSO分段(MAC层)

报文GSO分段的入口函数是skb_gso_segment函数,是在validate_xmit_skb函数中被调用。1、skb_gso_segment函数static inlinestruct sk_buff *skb_gso_segment(struct sk_buff *skb, netdev_features_t features){ return __skb_gso_segme

2016-10-09 22:03:14 2320

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除