摘要:
转自:https://huoding.com/2014/11/06/383 前些天,一堆人在 TCPCopy 社区里闲扯蛋,有人提了一个问题:FIN_WAIT1 能持续多久?引发了一场讨论,期间我得到斌哥和多位朋友的点化,受益良多。 让我们热热身,通过一张旧图来回忆一下 TCP 关闭连接时的情况: 阅读全文
摘要:
如果设备不支持单播过滤,并且要监听多个单播地址时,就要使用net_device->uc_count和net_device->uc_promisc来设置混杂模式,具体见__dev_set_rx_mode函数。 多数设备实现了ndo_set_rx_mode,并且通过该函数设置了单播过滤,没有实现这个函数 阅读全文
摘要:
skb_clone–只复制skb描述符本身,如果只修改skb描述符则使用该函数克隆; pskb_copy–复制skb描述符+线性数据区域(包括skb_shared_info),如果需要修改描述符以及数据则使用该函数复制; skb_copy–复制所有数据,包括skb描述符+线性数据区域+非线性数据区, 阅读全文
摘要:
alloc_skb –分配skb,进行基本的初始化; 1 static inline struct sk_buff *alloc_skb(unsigned int size, 2 gfp_t priority) 3 { 4 return __alloc_skb(size, priority, 0, 阅读全文
摘要:
skb操作中的预留和对齐操作主要由skb_put、skb_push、skb_pull、skb_reserve完成;这几个函数的区别通过下面图(图片来自:深入理解linux网络技术内幕)可以清晰的区分;另外,需要注意的是skb_reserve只能操作空skb,即在分配了空间,尚未填充数据时调用; 以下 阅读全文
摘要:
sk_buff结构用来描述已接收或者待发送的数据报文信息;skb在不同网络协议层之间传递,可被用于不同网络协议,如二层的以太网协议,三层的ip协议,四层的tcp或者udp协议,其中某些成员变量会在该结构从一层向另一层传递时发生改变,从上层向下层传递需要添加首部,从下层向上层传递需要移除首部; 多个s 阅读全文
摘要:
通常网络设备会定时地检测设备是否处于可传递状态。当状态发生变化时,会调用netif_carrier_on或者netif_carrier_off来通知内核; 从网上设备插拔网线或者另一端的设备关闭或禁止,都会导致连接状态改变; netif_carrier_on—-设备驱动监测到设备传递信号时调用 ne 阅读全文