傻瓜交换机上同时连接着千兆和百兆设备,它们之间将如何进行自协商?

2021-06-29 21:06:19 +08:00
 Licsber
2086 次点击
所在节点    问与答
16 条回复
ThirdFlame
2021-06-29 21:46:33 +08:00
千兆设备 ----- 傻瓜交换机 ----- 百兆设备
ip 层 数据链路层 滑动窗口 。
Licsber
2021-06-29 22:24:35 +08:00
@ThirdFlame #1 滑动窗口是指的 TCP 的滑动窗口协议么
疑惑的是 同交换机下存在千兆和百兆设备之后 千兆设备之间仍然是千兆
通信的两端出现百兆设备那就会是百兆 交换机在其中做了什么呢
jim9606
2021-06-29 22:27:11 +08:00
你说的傻瓜交换机是不是指非网管二层交换机。
百兆千兆这种链路层的速率协商的端点是主机网卡的一个 port——交换机上的一个 port 。两个 主机之间没有协商。IP 层没有链路速率这个概念。
abcbuzhiming
2021-06-30 00:41:20 +08:00
@jim9606 那我有疑问,既然速率协商是主机网卡和交换机的 port 协商,那很显然,千 M 主机网卡和交换机之间肯定是千 M,百 M 主机网卡和交换机之间是百 M 。那千 M 主机向百 M 主机发包的时候,是交换机端口告诉千 M 主机网卡,对面只有百 M 请你降速?那这个协商会不会导致操作系统里本来显示的当前千 M 的网卡连接速率,也跟着掉到百 M ?

还有,假设交换机上有多台,两台千 M 电脑,一台百 M 电脑,千 M 电脑中的一个首先向百 M 电脑发数据包,此时最高速度肯定会被限制在 100M,那么同时这台千 M 电脑向另外一台千 M 电脑发送数据报,此时的发包速率是多少?仍然是百 M ?或者说可以以千 M 发?但是明明端口就一个,是怎么能决定对不同的 mac 地址发送包的速度不同的?
felixcode
2021-06-30 00:48:29 +08:00
设备端口和交换机端口之间的协商是数据链路层的协商,设备和设备之间通过交换机收发数据的协商是传输层的协商,不在一个层次,所以两种协商没法放在一起说。
billlee
2021-06-30 02:57:30 +08:00
@abcbuzhiming 交换机没有那么智能,只会千兆接收,百兆发送,发不过来的就丢掉
iseki
2021-06-30 03:02:08 +08:00
交换机有缓冲区,速度有差异时丢缓冲区,缓冲区塞满了就只能丢掉了(也可以发 PAUSE 帧)。目前主流场景下,速度是 TCP 控制的
msg7086
2021-06-30 03:21:48 +08:00
@abcbuzhiming
简单说就是缓冲区。
类比一下物流。比如你现在有个仓库,仓库前有一大排装卸口,每个口外面有卡车,有小面包。货要送出去,先要堆在装卸口,然后卡车一辆一辆装车开走。假如卡车是千兆网络,小面包车是百兆网络,那么百兆网络的装卸口就会堆起很多货物。如果货堆满了,那么进货的车就无法卸货,那些车就不让开进来就是了。然后供货商自然就会减缓发货速度。

TCP 就是这么设计的。货卸不下来就自动减速发车。
Licsber
2021-06-30 06:02:23 +08:00
@jim9606 #3 协商速率仅限于两个物理接口之间 这点我已验证 提问的起因就是这个场景
我网络环境本来是千兆 最近不知道上层网关出了啥问题 总是周期性协商成百兆

指本地交换机之间千兆设备测速仍然是千兆 但是出口带宽成了百兆级别 排除了交换机、网线各种因素
直到直接将上层那根网线插到客户端才发现只会协商百兆 因此疑惑 按理说二层是没有什么类似四层的控制的
并且查到 网口协商只跟一层有关 也不存在什么特殊的数据帧 /特殊的电信号啥的可以重新开始协商过程
想要重新协商就只能触发接口事件 比如 ifdown ifup 之类的或者物理接口插拔

于是就很奇怪 遇到的现象是好好的千兆上网 突然断网十秒左右 之后一切正常 但上层的入口已经成了百兆
并且问题无法自主复现 上层直连的也不知道是一个路由还是三层交换 /二层交换 无法去排查它的问题
我这里都检查过了六类线没任何问题 墙上的接口我也重新接了线 傻瓜交换机也换了俩
Licsber
2021-06-30 07:13:03 +08:00
@felixcode #5 查了查没有关于这方面太多的叙述 意思就是实际上取决于上层么
比如 tcp 会按照自己的状态加速或者减速 哪怕用千兆速率发包
tcp 也会识别到丢包率极高(都被底层丢了)从而慢慢降低到底层极限(百兆速率)?
ThirdFlame
2021-06-30 08:11:16 +08:00
两端设备均支持千兆,但是周期性的自协商为百兆, 这和你顶楼的问题不符。
你手工把接口强制为千兆试试。
felixcode
2021-06-30 09:21:48 +08:00
@Licsber
TCP 协议细节没仔细研究过,但应该是发包速率逐渐增长,增长到多快取决于对端的反馈,而不是一开始就按千兆发,丢包再降速。
abcbuzhiming
2021-06-30 09:33:42 +08:00
@Licsber 朋友,你遇到的问题怎么和我一模一样,我这的上层网关是个光猫,光猫的 Lan 口明明是千 M 的,交换机也是千 M 的,交换机上的其它设备也是千 M 的,症状表现也和你一模一样:客户端 windows 好好的千兆上网,突然断网十几秒,然后再连 windows 就显示网卡当前连接速率变成了百 M,我也是交换机换了两个,网线换了一茬后确定问题肯定是光猫有问题,因为我用一台无线路由器挡在猫和交换机之间做成级联的网络,就再也没发生过断网后掉带宽现象。

我也是百思不得其解,按理说网卡以什么速率工作应该是数据链路甚至物理层的协商,和路由器这种三层设备有什么关系呢?而且离谱的是,一旦 windows 显示当前网卡工作在百 M,连局域网里和其它机器之间互相传输文件都会被卡在百 M 。

现在暂时还不能确认这到底是硬件问题,还是 windows 10 的 bug,因为环境原因没法用 linux 测试
abcbuzhiming
2021-06-30 09:36:40 +08:00
@ThirdFlame 我这边的表现是,强制设置网卡 1000M 设置是无效的。如果在 1000M 时设置为强制千 M,则出现掉带宽断线后会无法连接到局域网。如果已经掉到了百 M,强设成 1000M 也是无法连接到互联网,且系统给人的感觉在不停的探测网络
Licsber
2021-06-30 14:47:04 +08:00
@ThirdFlame #11 客户端手工改强制千兆取消协商的后果就是上不了网 我也很奇怪 但是千兆设备之间仍然可以通信
上不了网这个现象就像是强制千兆之后百兆设备无法和千兆设备通信一样 理论上大家都是发给的交换机 由它转发
但是据观察是不是存在一种机制 哪怕二层协商了千兆速率 在千兆设备和百兆设备通信时
是由千兆设备而不是交换机控制最终通信的速率 就是说 千兆设备只知道和交换机连接是千兆 然后以千兆速率发包
交换机转发过去却是以它和所有设备的握手速率给固定端口 /广播给所有端口 这就必然导致写满交换机缓存
然后这样一种机制使得千兆设备能发现这样的问题 进而降为百兆?
我也不太明白为什么强制千兆之后 和百兆设备就断连了 连 DHCP 信号都接不到
Licsber
2021-06-30 14:55:01 +08:00
@abcbuzhiming #13 嗯 我一开始怀疑是千兆设备和百兆设备不能一起插交换机上 然后单独测试每个设备还是没用
就是上层那根网线莫名其妙给协商百兆 千兆速率无法协商 我拆墙看了 是一根带屏蔽和支撑的六类线
理论上这样的线短距离万兆都没有问题的 出问题的时候我换了好几个设备都没办法和它协商千兆
但是没问题的时候 任何设备插上去都可以有效协商 只能说是它的 bug 了 目前没找到修复方法
确实 验证下来 只要存在百兆设备 那么千兆设备就不能改成强制 1000M 全双工 不然根本无法通信
估计存在一种可以让千兆设备同时支持千兆和百兆通信的机制吧 没搜到这样的名词 期待有人能解释一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/786553

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX