免费注册 查看新帖 |

Chinaunix

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

[内核模块] linux 内核中TCP头部的保留的几个字节可以自己随便用吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-30 19:08 |只看该作者 |倒序浏览
大家好:
我请教一个问题:
下面是TCP头部的结构示意图,我想问的是可不可以随便用保留部分的字节?一般在linux中都是置为0的,我可以不可改动其中保留段中的几个字节,构造这样的数据包发送到网络中,

在网络中的网关或不会检测保留字节 而因为保留字节的数据不是为0而将构造的数据包给丢掉? 谢谢

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2013-12-31 09:22 |只看该作者
应该是可以用的,保留字段通常都是用来定制的。

论坛徽章:
0
3 [报告]
发表于 2013-12-31 09:50 |只看该作者
回复 2# humjb_1983


   非常感谢您的回复,不知道你又没有做过类似的改动呢,我是有点担心发不出网关

论坛徽章:
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
4 [报告]
发表于 2013-12-31 09:51 |只看该作者
回复 1# SCDXMOE

应该是可以的。因为是保留的,现在的协议实现上应该就不查看这个保留字段的内容。 自己试一下吧。


   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
5 [报告]
发表于 2013-12-31 09:51 |只看该作者
SCDXMOE 发表于 2013-12-31 09:50
回复 2# humjb_1983

呵呵,没试过,但理论上应该没问题,可以试试。

论坛徽章:
0
6 [报告]
发表于 2013-12-31 17:27 |只看该作者
回复 4# Godbach
非常感谢您的回复: 构建TCP的首部是在tcp_transmit_skb函数中,下面是他的一个小片段

   static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,                            gfp_t gfp_mask)
{
        const struct inet_connection_sock *icsk = inet_csk(sk);
        struct inet_sock *inet;
        struct tcp_sock *tp;
        struct tcp_skb_cb *tcb;
        struct tcp_out_options opts;
        unsigned tcp_options_size, tcp_header_size;
        struct tcp_md5sig_key *md5;
        struct tcphdr *th;
        int err;
        .....
        .....
        /* Build TCP header and checksum it. */
        th = tcp_hdr(skb);
        th->source                = inet->inet_sport;
        th->dest                = inet->inet_dport;
        th->seq                        = htonl(tcb->seq);
        th->ack_seq                = htonl(tp->rcv_nxt);
        if(mouFlag!=true)
        *(((__be16 *)th) + 6)        = htons(((tcp_header_size >> 2) << 12) |
                                        tcb->flags);
        else{
        unsigned short addflag = 8192;
        *(((__be16 *)th) + 6)        = htons(((tcp_header_size >> 2) << 12) |addflag
                                        tcb->flags);
                }
       
        我在TCP首部 存放首部长度后面的保留部分置为 1 ,我定义了一个unsigned short 的addflag变量
        看这样可以吗?我担心编译完之后会出现崩溃,大家帮我把把关谢谢了!
       
        另外请教一下:tcp_header_size 定义是unsigned类型的,在linux内核中不知道他的长度,我在VC6.0中
        打印了他的长度是4个字节的,我不清楚我定义的addflag有没有问题,内核中改动我是比较小心的....
        望大家指点一下,非常谢谢。

论坛徽章:
0
7 [报告]
发表于 2013-12-31 17:27 |只看该作者
回复 6# SCDXMOE


   非常感谢您的回复: 构建TCP的首部是在tcp_transmit_skb函数中,下面是他的一个小片段

   static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,                            gfp_t gfp_mask)
{
        const struct inet_connection_sock *icsk = inet_csk(sk);
        struct inet_sock *inet;
        struct tcp_sock *tp;
        struct tcp_skb_cb *tcb;
        struct tcp_out_options opts;
        unsigned tcp_options_size, tcp_header_size;
        struct tcp_md5sig_key *md5;
        struct tcphdr *th;
        int err;
        .....
        .....
        /* Build TCP header and checksum it. */
        th = tcp_hdr(skb);
        th->source                = inet->inet_sport;
        th->dest                = inet->inet_dport;
        th->seq                        = htonl(tcb->seq);
        th->ack_seq                = htonl(tp->rcv_nxt);
        if(mouFlag!=true)
        *(((__be16 *)th) + 6)        = htons(((tcp_header_size >> 2) << 12) |
                                        tcb->flags);
        else{
        unsigned short addflag = 8192;
        *(((__be16 *)th) + 6)        = htons(((tcp_header_size >> 2) << 12) |addflag
                                        tcb->flags);
                }
        
        我在TCP首部 存放首部长度后面的保留部分置为 1 ,我定义了一个unsigned short 的addflag变量
        看这样可以吗?我担心编译完之后会出现崩溃,大家帮我把把关谢谢了!
        
        另外请教一下:tcp_header_size 定义是unsigned类型的,在linux内核中不知道他的长度,我在VC6.0中
        打印了他的长度是4个字节的,我不清楚我定义的addflag有没有问题,内核中改动我是比较小心的....
        望大家指点一下,非常谢谢。

论坛徽章:
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
8 [报告]
发表于 2014-01-01 00:01 |只看该作者
回复 6# SCDXMOE

     我在TCP首部 存放首部长度后面的保留部分置为 1 ,我定义了一个unsigned short 的addflag变量
        看这样可以吗?

        
那个预留的长度是 6 个 bit。你设置的时候要保证不要操作到其他 bit 位。

其实你给的截图中预留的 6 个 bit 中的后两个 bit(挨着 TCP flag 的两个bit)是用于 ECN 显示拥塞通知之用的,分别是 ECE 和 CWR 标记位。因此,保险起见,你只能用4 个bit。

我担心编译完之后会出现崩溃,大家帮我把把关谢谢了!


你是指担心编译的 kernel 有异常吗。你都修改 kernel 了,出现 kernel panic 是应该有个心理准备了。遇到并解决了 kernel panic 才更多对内核有深入的认知。

        另外请教一下:tcp_header_size 定义是unsigned类型的,在linux内核中不知道他的长度,我在VC6.0中
        打印了他的长度是4个字节的,我不清楚我定义的addflag有没有问题,内核中改动我是比较小心的....
        望大家指点一下,非常谢谢。

TCP 头部中定义的 header len 只是 4 个 bit,你看那个图中的长度就知道。但是这个 4 bit 计算出来的值,乘以 4 bytes(32bit)才使真正 header 的长度。也就是 header 的长度数值,是以 32bit = 4bytes为单位的。
   

论坛徽章:
0
9 [报告]
发表于 2014-01-02 17:03 |只看该作者
回复 8# Godbach


   非常谢谢您的指点。我试了 ,保留字段在局域网中没有问题,不知道在广域网中可不可以,有条件我试试,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP