TCP和Ping走的网络路径一样吗
现在我们回到文章开头的问题 。
对于同样的发送端和接收端 , TCP和Ping走的网络路径一样吗?
不一定一样 , 因为五元组里的信息里有一项是通信协议 。ping用的是ICMP协议 , 跟TCP协议不同 , 并且ping不需要用到端口 , 所以五元组不同 , 生成的哈希键不同 , 通过ECMP选择到的路径也可能不同 。
文章插图
TCP和ping的五元组差异
同样都用TCP协议 , 数据包走的网络路径一样吗
还是同样的发送端和接收端 , 同样是TCP协议 , 不同TCP连接走的网络路径是一样的吗?
跟上面的问题一样 , 其实还是五元组的问题 , 同样都是TCP协议 , 对于同样的发送端和接收端 , 他们的IP和接收端的端口肯定是一样的 , 但发送方的端口是可以随时变化的 , 因此通过ECMP走的路径也可能不同 。
文章插图
不同TCP连接的五元组差异
但问题又来了 。
我知道这个有什么用呢?我做业务开发 , 又没有设置网络路由的权限 。
利用这个知识点排查问题
对于业务开发 , 这绝对不是个没用的知识点 。
如果某天 , 你发现 , 你能ping通目的机器 , 但用TCP去连 , 却偶尔连不上目的机器 。而且两端机器都挺空闲 , 没什么性能上的瓶颈 。实在走投无路了 。
你就可以想想 , 会不会是网络中用到了ECMP , 其中一条链路有问题导致的 。
文章插图
ping能成功但部分TCP连接失败
排查方法也很简单 。
你是知道本机的IP以及目的机器的IP和端口号的 , 也知道自己用的是TCP连接 。
只要你在报错的时候打印下错误信息 , 你就知道了发送端的端口号了 。
这样五元组是啥你就知道了 。
下一步就是指定发送端的端口号重新发起TCP请求 , 同样的五元组 , 走同样的路径 , 按理说如果链路有问题 , 就肯定会复现 。
如果不想改自己的代码 , 你可以用nc命令指定客户端端口看下能不能正常建立TCP连接 。
nc -p 6666 baidu.com 80
-p 6666是指定发出请求的客户端端口是6666 , 后面跟着的是连接的域名和80端口 。
文章插图
通过nc成功建立tcp连接
假设用了6666端口的五元组去连接总是失败 , 改用6667或其他端口却能成功 , 你可以带着这个信息去找找负责网络的同事 。
总结
- 路由器可以通过OSPF协议生成路由表 , 利用数据包里的IP地址去跟路由表做匹配 , 选择最优路径后进行转发 。
- 当路由表一个都匹配不上时会走默认网关 。当匹配上多个的时候 , 会先看匹配长度 , 如果一样就看管理距离 , 还一样就看路径成本 。如果连路径成本都一样 , 那等价路径 。如果路由开启了ECMP , 那就可以同时利用这几条路径做传输 。
- ECMP可以提高链路带宽 , 同时利用五元组做哈希键进行路径选择 , 保证了同一条连接的数据包走同一条路径 , 减少了乱序的情况 。
- 可以通过traceroute命令查看到链路上是否有用到ECMP的情况 。
- 开启了ECMP的网络链路中 , TCP和ping命令可能走的路径不同 , 甚至同样是TCP , 不同连接之间 , 走的路径也不同 , 因此出现了连接时好时坏的问题 , 实在是走投无路了 , 可以考虑下是不是跟ECMP有关 。
推荐阅读
- |中年人在职场,要有“随时离开”的能力
- 智能手表|249元起 荣耀亲选Earbuds X3真无线耳机、儿童手表发布
- AirPods|你可能是盗版耳机受害者!真假AirPods在iPhone上一试便知
- 苹果|苹果最便宜智能手表 新款Apple Watch SE明天开卖:1999元
- 养鱼的利润与成本?养鱼的水怎样才能养好水质
- 抖音小店能做起来吗
- 抖音好友拉黑会怎么样及抖音功能介绍
- 什么是地震预警?手机如何实现地震预警功能?专家解读
- 抖音个人号能开抖音小店吗
- 微信怎么开通一物一码平台