免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lmarsin

基于2.6.20版本的《Linux内核源码剖析--TCP/IP实现》【465楼为勘误列表】 [复制链接]

论坛徽章:
0
发表于 2010-02-25 12:49 |显示全部楼层
这方面的书真多啊……是研究这个比较有前途么……

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2010-02-25 13:05 |显示全部楼层
多谢LZ。已经下载看了开头的一些。前两天正好和一个朋友讨论到这个问题,因此有个疑问请教LZ:
图30-1.JPG

LZ提到当sk_send_head为空是代表所有数据报都已发送。而内核代码(2.6.18.3)中好像是使用sk_send_head与&sk_write_queue相比较得出是否已发送完的。

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
发表于 2010-02-25 13:39 |显示全部楼层
多谢LZ。已经下载看了开头的一些。前两天正好和一个朋友讨论到这个问题,因此有个疑问请教LZ:


LZ提到 ...
Godbach 发表于 2010-02-25 13:05



    图片好像看不到了啊?

论坛徽章:
0
发表于 2010-02-25 13:50 |显示全部楼层
每输出一个SKB时,都会调用update_send_head()来更新sk_send_head,当sk_send_head==&sk_write_queue时,说明已经全部输出,因此要将sk_write_queue设置为NULL。
static void update_send_head(struct sock *sk, struct tcp_sock *tp,
                             struct sk_buff *skb)
{
        sk->sk_send_head = skb->next;
        if (sk->sk_send_head == (struct sk_buff *)&sk->sk_write_queue)
                sk->sk_send_head = NULL;

        tp->snd_nxt = TCP_SKB_CB(skb)->end_seq;
        tcp_packets_out_inc(sk, tp, skb);
}

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2010-02-25 13:52 |显示全部楼层
明白。你的说法和我的并不矛盾。怎么判断发送队列已经没有需要发送的报文了呢,就是用的那个条件判断,为真之后将sk_send_head置为NULL。

论坛徽章:
0
发表于 2010-02-25 13:56 |显示全部楼层
本帖最后由 lmarsin 于 2010-02-25 14:29 编辑
多谢LZ。已经下载看了开头的一些。前两天正好和一个朋友讨论到这个问题,因此有个疑问请教LZ:


LZ提到 ...
Godbach 发表于 2010-02-25 13:05



顺便提下,此书讨论的内核版本为2.6.20。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2010-02-25 13:58 |显示全部楼层
还有一个问题需要请教 LZ:
sk_send_head在什么条件下指向write_queue的第1个skb

论坛徽章:
0
发表于 2010-02-25 14:12 |显示全部楼层
回复 17# Godbach


    当待输出的SKB添加到输出队列上时,如果此时sk_send_head为NULL,则进行设置。参见skb_entail()

static inline void skb_entail(struct sock *sk, struct tcp_sock *tp,
                              struct sk_buff *skb)
{
        struct tcp_skb_cb *tcb = TCP_SKB_CB(skb);

        skb->csum    = 0;
        tcb->seq     = tcb->end_seq = tp->write_seq;
        tcb->flags   = TCPCB_FLAG_ACK;
        tcb->sacked  = 0;
        skb_header_release(skb);
        __skb_queue_tail(&sk->sk_write_queue, skb);
        sk_charge_skb(sk, skb);
        if (!sk->sk_send_head)
                sk->sk_send_head = skb;
        if (tp->nonagle & TCP_NAGLE_PUSH)
                tp->nonagle &= ~TCP_NAGLE_PUSH;
}

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2010-02-25 14:25 |显示全部楼层
顺便提下,此书讨论的内核版本为2.60.20。
lmarsin 发表于 2010-02-25 13:56


2.6.20吗?

论坛徽章:
0
发表于 2010-02-25 14:29 |显示全部楼层
没错,是2.6.20,刚才敲错了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP