免费注册 查看新帖 |

Chinaunix

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

看TCP/IP详解卷一的疑问(一) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-12 21:00 |只看该作者 |倒序浏览
0bit                                                                                               32bit
4位版本  4位首部长度 8位服务类型 16位总长度(字节数)
16位标识 3位标志 13位片偏移
8位TTL 8位协议 16位首部检验和
32位源IP地址
32位目的IP地址

上面是IP数据报格式
问题一:请问4位首部长度,为什么书上说普通IP数据报(没有任何选择项)字段的值是5?不应该是20吗?
问题二:书上说big endian是先"4位版本+4位首部长度"也就是0-7bit,再"8位服务类型",再"16位总长度(字节数)"的前8位,再"16位总长度(字节数)"的后8位.那么,"16位总长度(字节数)"和下面的"16位标识"是如何衔接的呢?"16位标识"是IP是32位做一个单位吗?(不知道大家看懂我的意思没)

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2006-02-12 21:03 |只看该作者
原帖由 黄药师81 于 2006-2-12 21:00 发表
不知道大家看懂我的意思没

没看懂。

论坛徽章:
0
3 [报告]
发表于 2006-02-12 21:18 |只看该作者
4位版本  4位首部长度 是0-7bit
8位服务类型 是8-15bit
16位总长度(字节数)的前半部分是16-23bit
16位总长度(字节数)的后半部分是24-31bit
big endian是先传0-7bit,再8-15bit,再16-23bit,再24-31bit

16位标识 的前半部分又是0-7bit
.....
我想问的是传完24-31bit后再传的是什么??
16位标识 的前半部分又是0-7bit这个部分吗?

论坛徽章:
0
4 [报告]
发表于 2006-02-12 21:20 |只看该作者
楼主,你来错地方了,这里只讨论跟C有关的东西,,,

论坛徽章:
0
5 [报告]
发表于 2006-02-12 22:09 |只看该作者
1. 仔细看书
首部长度是32bit的倍数5*4=20字节

2. 参看Linux内核源码:

  1. struct iphdr {
  2. #if defined(__LITTLE_ENDIAN_BITFIELD)
  3.         __u8    ihl:4,
  4.                 version:4;
  5. #elif defined (__BIG_ENDIAN_BITFIELD)
  6.         __u8    version:4,
  7.                 ihl:4;
  8. #else
  9. #error  "Please fix <asm/byteorder.h>"
  10. #endif
  11.         __u8    tos;
  12.         __u16   tot_len;
  13.         __u16   id;
  14.         __u16   frag_off;
  15.         __u8    ttl;
  16.         __u8    protocol;
  17.         __u16   check;
  18.         __u32   saddr;
  19.         __u32   daddr;
  20.         /*The options start here. */
  21. };
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP