怎么区分RFC894(以太网)和RFC1042(802协议)

cainiaohhf 2013-06-30 11:45:17
最近在看TCP/IP协议卷。关于在链路层这章,关于以太网和IEEE 802协议,有这么个说明:
1、以太网的IP数据报封装在RFC894中定义,而IEEE802网络的IP数据报封装在RFC1042中定义。
2、一台主机一定要能发送和接收RFC894定义的数据报。
3、一台主机可以接收RFC894和RFC1042的封装格式的混合数据报
问:第3点,主机可以接收两种混合的数据包,那么怎么区分?
是不是会有不同的网卡?(想eth打头的,似乎是以太网卡,lo是loopback协议的)

附注:因为最近在做一个抓包的功能,所以在看这个东西,这点有些疑惑。
...全文
885 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cainiaohhf 2013-07-12
  • 打赏
  • 举报
回复
引用 4 楼 cainiaohhf 的回复:
whizer,你好: “这个设计者已经考虑到了,在现有的tcp/ip中协议号是规定好了的,它们和长度字段刚好是互斥的,所以不会出现既能表示协议类型,又能表示长度的情况。这就是所谓的字段复用,这在网络协议设计中经常碰到。” 这个字段复用的前提是:已经区分了是哪个协议。 而我问的问题就是如何区分协议?即:收到一个数据包,你怎么知道是RFC894(以太网)的还是RFC1042(802)的?
你好,当初没能理解,最近看书看到了相关内容。你表达的应该是一个意思。下面是书上的说明: 以太网的13/14字节是type字段,范围是1501~65535; 而802.3的13/14字节表示长度字段,范围是0-1500。 所以,我们在解析 以太网 数据类型的时候,有一个判断:type > ETHERMTU,就会返回失败。(ETHERMTU==1500) whizer,再次感谢你的回复。我
whizer 2013-07-05
  • 打赏
  • 举报
回复
引用 4 楼 cainiaohhf 的回复:
whizer,你好: “这个设计者已经考虑到了,在现有的tcp/ip中协议号是规定好了的,它们和长度字段刚好是互斥的,所以不会出现既能表示协议类型,又能表示长度的情况。这就是所谓的字段复用,这在网络协议设计中经常碰到。” 这个字段复用的前提是:已经区分了是哪个协议。 而我问的问题就是如何区分协议?即:收到一个数据包,你怎么知道是RFC894(以太网)的还是RFC1042(802)的?
请参看我的回复#1,你只要看看第13/14字节就可以知道是什么报文.我不知道你还想了解什么? 下面是一个简单的判断逻辑(你可以看看TCP/IP协议的源码实现,从驱动到协议栈): 1)如果第13/14字节是0x0800,那么就是RFC894封装,还有其他类型字段,你可以看看RFC894规范,上面定义了支持的类型. 2)如果第13/14字节不是RFC894定义的那些类型,那么就去查看一下802的封装对长度的定义,如果满足,继续向后查,看是否满足DSAP/SSAP/cntl/org code/type的定义,如果满足,那么就是802封装. 3)其它情况察看其它支持的报文类型,如果没有支持其它报文,就是收到了错误报文.
cainiaohhf 2013-07-03
  • 打赏
  • 举报
回复
whizer,你好: “这个设计者已经考虑到了,在现有的tcp/ip中协议号是规定好了的,它们和长度字段刚好是互斥的,所以不会出现既能表示协议类型,又能表示长度的情况。这就是所谓的字段复用,这在网络协议设计中经常碰到。” 这个字段复用的前提是:已经区分了是哪个协议。 而我问的问题就是如何区分协议?即:收到一个数据包,你怎么知道是RFC894(以太网)的还是RFC1042(802)的?
whizer 2013-07-02
  • 打赏
  • 举报
回复
引用 2 楼 cainiaohhf 的回复:
[quote=引用 1 楼 whizer 的回复:] 建议你看看tcp/ip详解 第一卷 中文版 16页。 RFC894和RFC1042封装格式不一样,通过判断第13/14字节就可以区分是哪种格式。
谢谢你的回复。但是似乎有问题。 第13/14个字节,在RFC894(以太网)中是类型字段,在RFC1042中是长度字段。但是,在收到一个数据,你根本不知道是那种协议,那么你根本不知道13/14字节表示什么意思。 再次感谢[/quote] 这个设计者已经考虑到了,在现有的tcp/ip中协议号是规定好了的,它们和长度字段刚好是互斥的,所以不会出现既能表示协议类型,又能表示长度的情况。这就是所谓的字段复用,这在网络协议设计中经常碰到。
cainiaohhf 2013-07-02
  • 打赏
  • 举报
回复
引用 1 楼 whizer 的回复:
建议你看看tcp/ip详解 第一卷 中文版 16页。 RFC894和RFC1042封装格式不一样,通过判断第13/14字节就可以区分是哪种格式。
谢谢你的回复。但是似乎有问题。 第13/14个字节,在RFC894(以太网)中是类型字段,在RFC1042中是长度字段。但是,在收到一个数据,你根本不知道是那种协议,那么你根本不知道13/14字节表示什么意思。 再次感谢
whizer 2013-07-01
  • 打赏
  • 举报
回复
建议你看看tcp/ip详解 第一卷 中文版 16页。 RFC894和RFC1042封装格式不一样,通过判断第13/14字节就可以区分是哪种格式。

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧