2013年8月27日

kernel 校验和实现

摘要: kernel 校验和实现Kernel checksum implementation1) TCP包的错误检测使用16位累加和校验. 除了TCP包本身,TCP校验数据块还包括源IP地址,目的IP地址, TCP包长度, TCP协议号组成的12字节伪头标.2) 校验和为16位字补码和, 数据块长度为奇数时, 数据块末尾添零处理.校验和的计算与顺序无关, 可以从数据块开始计算, 也可以从未尾开始向前计算.3) 为了提高计算效率, TCP包的校验和并不一次算出,而是采用32位部分累加和(sk->csum)进行增量计算.csum_partial()用来计算数据块的32位部分累加和, 累加和可以用cs 阅读全文

posted @ 2013-08-27 14:47 SuperKing 阅读(3335) 评论(0) 推荐(0) 编辑

ARP 实现

摘要: ARP 实现现在我们介绍一下arp的实现,内核版本2.6.24.[数据结构]协议栈通过ARP协议获取到的网络上邻居主机的IP地址与MAC地址的对应关 系都会保存在这个表中,以备下次与邻居通讯时使用,同时,ARP模块自身也会提供一套相应的机制来更新和维护这个邻居表.struct neigh_table{ struct neigh_table *next; //下一个邻居表 int family; //协议簇 int entry_size;//入口长度,也就是一个邻居结构的大小,初始化为si... 阅读全文

posted @ 2013-08-27 14:40 SuperKing 阅读(1914) 评论(0) 推荐(0) 编辑

Linux协议栈函数调用流程

摘要: 普通网络驱动程序中必须要调用的函数是eth_type_trans(略),然后向上递交sk_buff时调用netif_rx()(net/core/dev.c).其函数中主要几行 __skb_queue_tail(&queue->input_pkt_queue, skb);添加skb到接受队列中 netif_rx_schedule(&queue->backlog_dev); 开启接受软中断处理. struct softnet_data * queue 在net_dev_init()(dev.c)中初始化.其中有: open... 阅读全文

posted @ 2013-08-27 14:11 SuperKing 阅读(1552) 评论(0) 推荐(0) 编辑

IPVS实现分析

只有注册用户登录后才能阅读该文。 阅读全文

posted @ 2013-08-27 14:09 SuperKing 阅读(1081) 评论(5) 推荐(0) 编辑

IP 碎片重组

摘要: IP 碎片重组内核中的IP重组函数.struct sk_buff * ip_defrag(struct sk_buff * skb, u32 user){ ...... //如果内核范围超出限制 if (atomic_read(&ip_frag_mem) > sysctl_ipfrag_high_thresh) ip_evictor(); //回收内存到限制之内 ...... if ((qp = ip_find(iph, user)) != NULL) { //查找或者创建一个队列头 ...... ip_frag_queu... 阅读全文

posted @ 2013-08-27 10:29 SuperKing 阅读(1378) 评论(0) 推荐(0) 编辑

导航