免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2939 | 回复: 3
打印 上一主题 下一主题

[网络子系统] tcp_conn_request [复制链接]

论坛徽章:
4
丑牛
日期:2014-01-11 15:11:12亥猪
日期:2014-12-15 22:19:092015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-03-13 19:45:11
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-02-11 15:34 |只看该作者 |倒序浏览
linux tcp/ip 协议栈中,在三步握手过程中,在处理client 发送的syn时,监听套接字新建了一个newsock(一个sock结构),初始化的时候有如下代码:
newsock->acked_seq=skb->h.th->seq+1;
newsock->copied_seq=skb->h.th->seq+1;
newsock->fin_seq=skb->h.th->seq

其中skb代表的是syn包,我对上面的几跟seq的初始化不太懂,有没有哪位大神可以指点迷津

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2015-02-13 15:03 |只看该作者
本帖最后由 mrpre 于 2015-02-13 15:08 编辑

哪里有这些操作?
我觉得处理syn包的核心操作函数是:tcp_create_openreq_child
可是里面没有你说的哪些字段的啊?
哪个linux版本?

论坛徽章:
4
丑牛
日期:2014-01-11 15:11:12亥猪
日期:2014-12-15 22:19:092015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-03-13 19:45:11
3 [报告]
发表于 2015-02-13 16:07 |只看该作者
回复 2# mrpre
一个比较老的版本,1.2.13,有本书专门介绍1.2.13 tcp/ip 协议栈的

   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2015-02-13 17:23 |只看该作者
本帖最后由 mrpre 于 2015-02-13 17:25 编辑

回复 3# 魔鬼的惊叹

汗,那我也无能为力了,说说我的理解吧。
copied_seq在2.6中也有,但是在tcp_sock结构体里面了。

我就说一下2.6的copied_seq吧:
它的功能:你在应用层调用read/recv/...的时候,传参有个参数是len,如果len = 5,但是skb长度是15,那么copied_seq就会置上skb->seq + 5,并且
skb不会被释放,再次调用read/recv/..的时候,就从skb->data + (copied_seq - skb->seq) 起读。
如果你的socket程序是read 的len很大,或者超过一个skb len,那么copied_seq基本为一直为新skb的skb->seq,即起始读地址是
skb->data + (copied_seq - skb->seq)  = skb->data,说白了就是从头开始读。

acked_seq : 看你的例子,是syn包的seq + 1 ,那么,我猜作为服务器,你回复syn ack的时候,肯定有:skb->h.tcph->ack_seq = sock->acked_seq这个操作。
即表示作为这端的socket,你发送的数据的ack_seq为sock->acked_seq

fin_seq:不知道,看它怎么用的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP