漫谈TCP/IP网络(2)

下午跟同事聊了一会儿技术形而上,有一些想法,就写一点。

之前写过一些关于分组交换和TCP/IP网络的,所以我很难给这篇随笔命名,就叫《漫谈TCP/IP(2)》吧,以后再写就是3,4,5…类推。
https://blog.csdn.net/dog250/article/details/118244454
https://blog.csdn.net/dog250/article/details/115565573
https://blog.csdn.net/dog250/article/details/115258918
https://blog.csdn.net/dog250/article/details/115262224

话题是关于移动IP的。

移动IP在TCP/IP里是天然不支持的,如果一个TCP应用已经和服务器建立连接,它的IP地址变化了怎么办?比如3G切换WIFI,或者在高铁上看电影一路从温州看到莆田。

简单来说,连接会断掉,然后重连,但重连这件事需要应用程序自己去做,如果应用程序早就写好了,那就不得不重新写一个。严格来讲,IP地址变化了,关应用程序什么事,这是网络的事啊。

围绕着这个问题,各种并不管用却很复杂的移动IP技术被研发出来,这些技术我一个都没记住,太复杂了。如果你不想掌握这些移动IP技术,还有一种方法,那就是用overlay的思路,不变的IP over 变化的IP,就像LISP一样。但这个比修改应用程序场面更大,这得动网络根基啊,你得重新部署网络,至少你得搭隧道吧。

事实上根本就没有这么复杂,实现一个会话层就是了。我在2014年的时候曾经设计过这么一个协议:
https://blog.csdn.net/dog250/article/details/29180765

那么什么是会话层?TCP/IP体系结构里没有会话层啊!但是ISO/OSI模型里有。

当初OSI模型是有会话层的,这个会话层本质上就是考虑到底层地址和应用层逻辑之间的解耦。然而TCP/IP太过实用主义,它并没有经过设计,而是演化而来的一个实用网络体系结构,在当时并不需要的情况下,就没有会话层,TCP上直接就是应用层,就出现了移动IP的问题。

如今新的协议都已经支持了会话层的逻辑,比如QUIC就是基于ID而不是基于IP端口五元组来关联会话的,因此IP地址随时可以改变,Wireguard也有会话层,它也是自带漫游的。

这里可以看出工程界和学界之间的明显区别,工程界的标准往往是实用主义的,而学界标准往往过于周全,这种周全太过形而上,以至于它最终只能是一个参考性纲领,永久生效。这不,虽然TCP/IP在1980年代没有会话层,但它赢得了标准,然后这并不意味着OSI彻底输了,如今,当TCP/IP在遇到一个具体问题时,OSI依然是它的首要参考。

移动IP衍生出来的一个话题就是,TCP/IP的表示层也是缺失的,当我们需要对一段数据进行加密传输的时候,要么应用程序自己实现加密,要么搭建IPxxSec隧道,这催生了虚拟PN市场,但如果一开始就有表示层,这一切都是不必要的。

OSI分层模型的各层是逻辑独立的,应用层就只负责应用逻辑,加密解密完全由表示层负责,表示层可以随时切换不同的加密算法,甚至直通,这一切对应用层和会话层都是无感知的。

如今,SSL/TLS正在扮演表示层这样的角色,但无论如何应用程序依然要自己维护SSL/TLS的Library状态,微软LSP/SPI接口(Layered Service Provider/Service Provider Interface)是另一个的选择,除此之外,你就要各种HOOK了。

有了表示层,这样的世界多好。


浙江温州皮鞋湿,下雨进水不会胖。

Guess you like

Origin blog.csdn.net/dog250/article/details/118638583