现代操作系统和 TCP/IP

Posted dog250

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了现代操作系统和 TCP/IP相关的知识,希望对你有一定的参考价值。

上周假期最后一天,又看了《现代操作系统》,发了一则朋友圈,赞美现代操作系统,我贴在最后,本文长话短说。

在批处理时代及之前,程序必须排序执行,被安排在同一台机器的几个程序很难直接通信,每个程序独占一台机器,只能和同时刻独占别的机器的程序远程通信,类似于打电话,不能自己给自己打电话,因为自己永远占线,可以给别人打,但对方必须在线。

微时间片轮转调度的现代操作系统制造了进程(虚拟机)假象,将多个程序拉到了同一个时空,每个程序独占一个进程,大家同时运行在同一台机器,彼此之间可随时沟通,从此,一切皆可为进程。这个意义非常重大。

TCP/IP 的胖端瘦网模型来源于此。

以往排队执行的程序可 “同时” 执行,程序之间便可激烈碰撞出火花,相互配合,这也是 UNIX 本源组合小程序的哲学思想。批处理时代,将一个文件先送到一个 egrep 程序里过滤,再通过网络送到另一个主机,是不可想象的。

交互变得多而复杂,主机越发拥挤,对外通信的程序共享物理资源,迫切需要一种良好的方式调度资源,为每一个程序的通信过程管理资源。这意味着网络协议栈的端侧在变胖。

终端不再功能固定,成了一个同时运行多个程序的容器,每个终端接入网络时的这些程序的通信行为不可预期,必须将接入和通信过程解耦,这意味着终端接入的时刻,网络的核心是无感知的,换句话说,程序间的通信对于网络必须无状态,这是瘦网的来源。

终端接入时,仅分配一个 IP 地址,只在程序需要通信的那一刻,才分配传输层以上资源,这是现在的方式。但在一开始,TCP 和 IP 是一个整体,端侧没有现在胖,网侧没有现在瘦,随着系统的演进,端侧越来越复杂,而网侧越来越无力承受这种复杂,才终于成了现在 TCP/IP 胖端瘦网的样子。

曾看过一个讲分组交换网的论文,说是分组交换网的思想早已有之,但在终端 “通用计算机” 化后才开始有大发展,计算机科学的发展促进了网络通信,说的大致就是这个意思。

从经济学角度看,公共资源会随着使用者的增多变得越发便宜,便宜意味着简化,这里的公共资源是 IP 网络,使用者是 TCP/UDP…,复杂性会集中在主机,集中在针对这些传输协议的管理上。还是之前那个观点,超过一定阈值后,东西越多,管理起来越复杂,额外管理开销越大。韩信点兵,多多益善,现实中并不真实。

设想一场头脑风暴或者辩论,如果规定发言人必须一次性把要说的全部讲完,一旦结束便不能再讲,还能碰撞出什么新想法?恰恰是在同一时空中的实时交互才让这些变得有趣并有益。时间片轮转调度的现代操作系统给了程序在同一时空沟通碰撞的权利,而 TCP/IP 助力将这种权利延伸了互联网的每一个角落。

现代操作系统的意义非常特殊,感觉比 TCP/IP 还更重要。网络连接早已有之,从古罗马道路到 20 世纪电话线,一直到 1960 年代的分组交换网,但一直没被大用,直到现代 UNIX 系统开始发展,TCP/IP 才终于"被迫"进场。因为应用和数据同时开始爆发了,控制信令和数据开始变多,迫不及待需要传输到另一个系统,网络才开始大发展。
这一切的背后,就是多任务分时操作系统,世界第一次有能力在 “同一时刻做很多不同的事情”,交互多了,可能性就多了,连锁反应来源于此。后面的事情大家都知道了。
​同样一段时间做几件不同的事,可以不同的方式进行,可以一件事做完了再做另一件,按顺序来,也可以将每件事情按照自己的逻辑分成不同步骤,轮转不同事情的不同步骤,但这些都没能将系统"现代化",现代化的根本在于"将每件事都分成了多个固定时间片的步骤",不再以事情为本,而以固定时间片为本,这就诞生了现代调度系统,这是现代操作系统的现代之根,在这个机制下,虚拟内存几乎就是顺水推舟了。
现实中,时间片并不固定,但这并不重要,因为调度器已经和具体的任务解耦了,同样的创举来自分组交换,时间片统计复用,虽然可以强制规定每个报文固定大小从而占据固定时间片,但现实中报文在最大限制之下可以任意长,根本在于报文和时间解耦,而不再和连接关联,所以,所以最后,TCP 真是一个不合适的传输抽象,它明明是一个连接啊,从这里,你将能推论出 IP 一开始就是 TCP 的一部分,这个故事和现代操作系统是同一个故事。

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

以上是关于现代操作系统和 TCP/IP的主要内容,如果未能解决你的问题,请参考以下文章

Java TCP/IP Socket基于NIO的TCP通信(含代码)

TCP/IP协议原理与介绍

夜谈TCP/IP的起源和胜利

50本java技术书-吐血整理

TCP/IP数据加密传输及CA简述

程序员需要看的书