免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Godbach
打印 上一主题 下一主题

TCP/IP实现刨根究底大讨论【活动结束】 [复制链接]

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
131 [报告]
发表于 2011-03-30 09:58 |只看该作者
11.1.2  IP数据报的输入与输出

图11-3  IP层主要函数调用关系

图中 net_protocol->hander 应为 net_protocol->handler
     sbk  应为 skb
     ip_rev_finish 应为 ip_rcv_finish

评分

参与人数 1可用积分 +6 收起 理由
Godbach + 6 感谢分享

查看全部评分

论坛徽章:
0
132 [报告]
发表于 2011-03-30 10:15 |只看该作者
最近在看TCP/IP详解,好期待您的书。。。。

论坛徽章:
0
133 [报告]
发表于 2011-03-30 10:39 |只看该作者
最近在因为公司项目的关系在做传输,呵呵,不过以前没有太多的经验,所以就看了uip,呵呵 我想知道,书上是如何脱离一些实际硬件来。。分析源码的。。
对啊,我以前也看过Linux内核的NET部分的源码,是2.6.34内核的,感觉太大了,光IPv4感觉它的调用就能用层层的来形容吧。   而且好多书里分析的有的时候感觉分析的不彻底。。
这本书的socket样章我看过的。。  感觉和其他一些书的样章差不多,没有什么新意, 关键就是不能给人拨开云雾的感觉,就是拨开了,也只是拨开了一点儿,其他部分还是云里雾里的。。

我想问作者这样一个问题:
TCP/IP能从最高层的BSD Socket追寻到最后的硬件实现吗? 我说的是在程序代码里找,而不是用语言表达。 没错儿,对于socket(AF_INET, SOCK_STREAM, 0); 也许能找到硬件层的实现,那么, 像一个简单的TCP服务器也能这样一直找一下去吗? 作为程序员,都认为一点很重要:实践。 所以不想看太多的理论书了,觉得太烦了,也太累了。 如果这样一步一步跟着信任的人向前走,走到头,我觉得这样也不错,省得走了弯路   还有能不能画些函数调用图啊? 在书本里面。。  这样可能更容易懂一点。。

评分

参与人数 1可用积分 +2 收起 理由
Godbach + 2 欢迎提问

查看全部评分

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
134 [报告]
发表于 2011-03-30 10:56 |只看该作者
本帖最后由 ynchnluiti 于 2011-03-30 10:57 编辑

回复 133# brauceunix


    你想要的是源码中从上到下的流程吗? 有时间可以看看linux-Tcp IP协议栈源码阅读笔记

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
135 [报告]
发表于 2011-03-30 11:35 |只看该作者
好活动,支持下。

论坛徽章:
0
136 [报告]
发表于 2011-03-30 12:34 |只看该作者
最近在因为公司项目的关系在做传输,呵呵,不过以前没有太多的经验,所以就看了uip,呵呵 我想知道,书上是如 ...
brauceunix 发表于 2011-03-30 10:39



    其实楼主你自己也看了TCP/IP实现相关代码,它不是一个小工程,如果作者把代码都体现出来,你觉得

这本书应该有多厚,而且书本身就是起引导作用,代码还是要自己去看……我觉得这本书的图多,做的不错

能使读者更容易理解

评分

参与人数 1可用积分 +6 收起 理由
Godbach + 6 感谢分享

查看全部评分

论坛徽章:
0
137 [报告]
发表于 2011-03-30 12:36 |只看该作者
回复  xiongweixie
ynchnluiti 发表于 2011-03-29 22:28



    这个仅仅是IPV4的,如果我采用的是IPV6的呢……也应该有相应 的文件 吧

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
138 [报告]
发表于 2011-03-30 13:28 |只看该作者
回复 137# aaaaa5aa


   
这个仅仅是IPV4的

谁说的

论坛徽章:
0
139 [报告]
发表于 2011-03-30 16:10 |只看该作者
回复 109# ynchnluiti


    我也是刚开始看tcp内核实现,慢慢来吧,不过还是想把这个问题先搞清楚:重传定时器到底在什么情况下会重启(重启和更新TRO是两回事)
   1、收到一个非重传的ACK时,此时会重新计算RTO,那么计算出新的RTO之后,重传定时器重启吗?
   2、开始发送新的一个窗口的数据时,会重启
   3、超时了,RTO更新,指数退避,然后开始重传第一个未被确认的包,这时会重启

那么1中的情况重传定时器会不会重启?

评分

参与人数 1可用积分 +2 收起 理由
Godbach + 2 欢迎提问

查看全部评分

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
140 [报告]
发表于 2011-03-30 19:04 |只看该作者
回复 139# EasyIOCP


    为什么执着于重启和更新呢
    代码里就是更新定时器的到期时间(好像有些情况下mod_timer确实是重启定时器,so,或许也可以理解为重启吧):
    inet_csk_reset_xmit_timer -> sk_reset_timer(sk, &icsk->icsk_delack_timer, icsk->icsk_ack.timeout);
  1. 1447 void sk_reset_timer(struct sock *sk, struct timer_list* timer,
  2. 1448             unsigned long expires)
  3. 1449 {
  4. 1450     if (!mod_timer(timer, expires))
  5. 1451         sock_hold(sk);
  6. 1452 }
复制代码

1、收到一个非重传的ACK时,此时会重新计算RTO,那么计算出新的RTO之后,重传定时器重启吗?

    发送的包都已确认则关闭(清除)重传定时器等待标记(见下面代码),否则更新(重置)重传定时器到期时间

  1. 183 static inline void inet_csk_clear_xmit_timer(struct sock *sk, const int what)
  2. ...
  3. 187 if (what == ICSK_TIME_RETRANS || what == ICSK_TIME_PROBE0) {
  4. 188 icsk->icsk_pending = 0;
  5. 189 #ifdef INET_CSK_CLEAR_TIMERS  //INET_CSK_CLEAR_TIMERS 默认未定义
  6. 190 sk_stop_timer(sk, &icsk->icsk_retransmit_timer);
  7. 191 #endif
  8. ...
复制代码

评分

参与人数 1可用积分 +8 收起 理由
Godbach + 8 感谢分享

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP