@
neoblackcap #36
tcp/ip 的分层设计已经很优秀了,
理论上 ISP(网络传输的各级节点) 负责网络层(IP),传输层(TCP)的修改不涉及 ISP,只用修改服务端和客户端即可。
但是由于公网 ip 不足,造成 ISP 介入了传输层使用 NAT 来节省公网 ip,使得对传输层的修改也需要考虑 ISP 了。
不过 NAT 只是做一个地址转换,并没那个需求也没那个性能去深入到 tcp 协议细节,例如拥塞控制部分。
常规情况下对拥塞控制等细节的修改并不影响 ISP,当然非常规情况也有,例如 ISP 向网页插入广告等情况会受到影响。
家用路由器等同于 ISP 处的 NAT,一般不会受到影响。
对拥塞控制等修改可能还涉及到企业内部属的入侵检测系统及硬件负载均衡系统,但是根据修改不同和系统工作方式不同受影响程度不一致。
另外一个可能受到影响的是网卡,Intel 等的服务器网卡支持硬件处理 tcp 协议栈,不过我接触的较老的硬件发现处理效果也无所谓,高网络负载下这个硬件实现反而可能是瓶颈,有时还不如关掉直接用 cpu 跑起来快。
另外新老协议共存并不是什么麻烦问题,最初使用老协议握手,当对端也支持新协议时同步升级到新协议是个很简单的操作,TCP 的窗口缩放、http2 都是允许新老功能共存,自动协商升级到新版本。
另外可以举一个现实中的例子:
udp2raw-tunnel 项目为了规避部分 isp 对 udp 限流的问题,直接修改包头,将 udp 伪装成为 tcp,并且并未实现 tcp 的拥塞控制等细节,一样跑的很正常。