1
Jirajine 2022-11-10 19:17:44 +08:00
因为 ipv6 和 ipv4 的差异不仅仅是在网络层,像 ARP 就没有了改用 NDP 。
|
2
huangya OP @Jirajine 这个 version 让人容易困惑,特别是当 IPv4 的时候它的值是 4 ,而 IPv6 的时候它是 6.让人感觉 ethernet 数据链路层是一样的。
|
4
leonshaw 2022-11-10 19:38:14 +08:00
过度设计,当个冗余校验吧
|
6
echoechoin 2022-11-11 09:32:08 +08:00
ipv6 和 ipv4 是两个几乎完全不同的协议栈
|
7
huangya OP @sujin190 你这样说,感觉好像我们两个人的理解仍然有分歧。我知道 IPv4/IPv6 不止可以在 ethernet 链路上传输。我帖子里面其实说的就是都在 ethernet 链路上传输的情况下,为什么在 etherne 链路层的 type 不一样。按理说,两个都是 ethernet 链路上传输,链路层的头部可以一样,只要在 IP 网络层通过 version 区分就可以了。
其他 V 友没有类似的疑问吗? |
8
sujin190 2022-11-11 10:11:32 +08:00 1
@huangya #7 这话反过来也一样啊,ethernet 也不止可以传输 IPv4/IPv6 数据包
首先 ethernet 是二层协议,有个流量类型只是方便设备间通信与分析以及 qos 、防火墙等的控制,但实际通信过程中二层协议并不会解析四层 IPv4/IPv6 的数据包,所以并不能使用 IPv4/IPv6 的 version 字段,一层是一层互不干扰啊,否则哪天 IPv4/IPv6 协议有调整你的所有硬件设备不全废了,比如局域网交换机之间二层协议通信直接 ethernet 层就完成了,并不会进入网络栈,也不会解析 IPv4/IPv6 协议 再说要按你这么说,更上层的协议包含重复信息更多,既然如此为啥还要分 IPv4/IPv6 ,不直接用应用层协议提供的信息呢,这不是一个逻辑么 |
9
sujin190 2022-11-11 10:19:15 +08:00
@huangya #7 还有吧,网卡再收到 ethernet 数据包之后首先得知道这是啥数据包,然后才能决定交给 v4 还是 v6 网络栈处理,或者就是其他类型的数据包,比如带宽协商,ethernet 一般是硬件绑定的,比如你买的网卡出厂就已经告诉你使用的 ethernet 协议,你几乎不可能说改成蓝牙网卡之类的,但你用它来组 IPv4/IPv6 网络这个则是操作系统通过驱动和网络栈来完成的,你要是自己搞搞驱动或网络栈,你也可以自己搞个叫 IPv888 的网络啊
|
10
sujin190 2022-11-11 10:24:42 +08:00
@huangya #7 而且吧服务器机房现在 40G 、400G 或者更高速网络使用的网卡很多就不是 ethernet 网卡,厂家自己搞的一套协议,然后同时提供驱动
|
11
huangya OP @sujin190
>首先 ethernet 是二层协议,有个流量类型只是方便设备间通信与分析以及 qos 、防火墙等的控制,但实际通信过程中二层协议并不会解析四层 IPv4/IPv6 的数据包. 这个地方应该是打错了吧,IPv4/IPv6 是三层包。 > 还有吧,网卡再收到 ethernet 数据包之后首先得知道这是啥数据包,然后才能决定交给 v4 还是 v6 网络栈处理 网卡收到 ethernet 数据包,并不知道它是 v4 还是 v6 吧。解析是什么包,是操作系统 ethernet 链路层的代码做的吧。 根据我的疑问,假设 v6 也是用 0800 的 type.操作系统可不可以这样做: 把 v4 和 v6 的代码放在网络层,ethernet 链路层的代码看到 type 是 0800 ,就把这个包交个网络层的代码来处理和解析,网络层的代码看到 version 是 4 ,就交给 v4 的协议栈,如果是 6 ,就交给 v6 的协议栈。 |
12
sujin190 2022-11-11 11:04:43 +08:00 2
@huangya #11 对,IPv4/IPv6 是三层包。。
ethernet 标识相同 code 是 ip 包然后由操作系统来区分当然也是可以的,但是是否选择这样做的考量点其实是上层协议的广泛和重要程度,也就是成本考量,如果 ethernet 无法区分上层协议是 v4 还是 v6 ,那么也就意味着 ethernet 没有为上层协议优化的可能了,比如 v4 和 v6 的包大小就完全不一样,也许会针对这个在硬件层面做优化,还有链路层针对 IPv4/IPv6 的 qos ,虽然都可以在网络栈里处理,区别就是延时波动、功耗、效率,一个使用更为广泛的协议必然需要考虑更多场景,就算这个场景再小,你不但遇不到甚至都想不到,但也是需要考量的,比如汽车内部使用 ethernet 网的时候对延时波动就有更苛刻的需求,需要内核的网络栈解析就可能大幅降低延时波动的可靠性 |
13
huangya OP |
14
cwek 2022-11-11 19:02:58 +08:00
其实最简单就是:
1.分层网络 2.链路层,或者以太网上不一定是只跑 IP (历史上网络层以上还有 Novell IPX/SPX ,苹果也有自己一套网络层协议(好像是 AppleTalk ))。同样,网络层,或者 IP 也不知道下面怎样承载它的信息(有没带版本或者网络层标识等,因为链路层可能是一堆鸽子……) 所以,网络层的 IP 需要承载自己的版本号,链路层也可能需要承载起其上面层的标识(只是这个标识可能刚好是 IP 的两种版本)。 |