:计算机网络初识——从网络发展史到TCP/IP协议》)
伴随着Linux专栏逐渐步入尾声我们也将正式翻开全新的篇章《计算机网络》系列。有道是系统网络不分家。如果说Linux带我们认识了操作系统如何管理一台计算机那么计算机网络将带我们探索数据如何跨越万千设备完成一场从一端到另一端的通信。本专栏会继续坚持由浅入深、原理与实践并重带大家一步一步走进计算机网络的世界。目录一、计算机网络的发展历史1.1 从独立到局部再到整体1.2 为什么会这样网络发展史背后的思考二、初步认识协议2.1 建立初步认识什么是协议2.1.1 协议就是一种约定2.1.2 科普谁有资格制定协议标准2.2 为什么要进行协议分层2.2.1 初步理解什么是协议分层2.2.2 科普OSI七层模型2.2.3 TCP/IP五层模型三、深化对协议的认知3.1 为什么需要TCP/IP协议3.2 TCP/IP协议到底是什么3.3 TCP/IP协议与操作系统的关系3.4 从整体角度重新理解TCP/IP协议一、计算机网络的发展历史1.1 从独立到局部再到整体最早的时候计算机与计算机之间是相互独立的。那时候要想交换数据靠的是软盘揣着一盒盘从这台机器跑到那台机器手动把数据“搬”过去。后来网络互联出现了多台计算机连在一起数据共享从此不再靠腿跑。再往后局域网LAN登场计算机数量更多了大家通过交换机和路由器连接在一起形成一个局部的小天地。紧接着广域网WAN出现让远隔千里的计算机之间也能建立联系。局域网和广域网其实是一个相对的概念。比如我们国家的广域网放到全球互联网的尺度下也可以视作一个比较大的局域网。1.2 为什么会这样网络发展史背后的思考计算机是人造出来的工具而人类从远古时代起就离不开协作。这个朴素的道理放在机器身上也一样计算机之间迟早得学会互相打交道。所以网络的诞生几乎是命中注定的。它的成长路径也遵循着一条从局部到整体的客观规律局部产生早期的网络只在某个区域或某个机构内部独立生长各玩各的。走向整体局部网络越连越多、越滚越大到了全局层面最终只能收敛到一套统一的标准上。从时间线看大致是这么走过来的保密阶段早期以阿帕网为代表妥妥的内部保密项目外人根本摸不着。公开与普及到了九十年代前后这些技术慢慢解密公开随后由美国人牵头组建互联网并在92、93年以及97、98年前后一路加速狂奔。再从产业生态的角度看一眼基础设施建设通信公司和运营商埋头铺路把网络基础设施搭起来接入了成千上万的用户。上层服务赋能等基础设施足够厚实了互联网公司才得以借势而起在上面跑出五花八门的网络服务迎来一轮又一轮的爆发。二、初步认识协议2.1 建立初步认识什么是协议2.1.1 协议就是一种约定计算机之间的传输媒介是光信号和电信号。信息怎么表示靠“频率”和“强弱”来区分0和1。可光有0和1还不够想传递千变万化的信息双方就得先把数据格式约定清楚。协议的本质就是一种约定。目的很实在减少沟通成本快速形成共识。但这里有个值得多想一步的问题只要两台主机约好协议就够了吗未必。协议定了可你用频率表示0和1我用强弱表示0和1这就好比我讲中国话你讲葡萄牙语。规则是同一套语言却对不上照样鸡同鸭讲通信根本跑不起来。所以一套完善的协议需要更多、更细致的规定而且参与的每一方都得老老实实遵守。再看看现实里的局面计算机制造厂商一大堆操作系统五花八门网络硬件设备更是各家各款。想让这些来自不同厂商的机器顺畅通信怎么办总得有人站出来定一个共同的标准大家都照着来这就是网络协议。计算机之间正是靠着这套统一的协议标准来交互。比如ISO国际标准化组织制定的OSI标准就是其中的经典代表。2.1.2 科普谁有资格制定协议标准能定协议、立标准的都不是等闲之辈。要么是业界公认的老牌组织要么是江湖地位摆在那儿的巨头。下面这几类了解一下就行。1. 国际标准化组织IEEE电气和电子工程师协会计算机和工程领域专家组成的技术大组织在通信协议这块贡献极大。全球电子、电气、计算机领域大约三成的标准都出自它手。IEEE 802系列标准就是从局域网到广域网的各种网络技术全是它定的。ISO国际标准化组织由各国标准化团体凑起来的国际组织最出名的活儿是OSI模型。七层协议结构定义了网络通信的骨架。虽然实际应用里TCP/IP协议族更吃香但OSI模型在学术和理论圈地位一直稳如泰山。ITU国际电信联盟联合国下属的专门机构专管电信领域的国际标准。ITU-T制定的标准覆盖电话和网络通信还跟ISO合作确保通信技术在全世界兼容互通。2. 区域标准化组织ETSI欧洲电信标准学会欧洲共同体各国政府掏钱资助电信厂商和研究机构一起参与从研发到标准制定一条龙。ASTAP亚洲与泛太平洋电信标准化协会1998年由日本和韩国发起专门推动亚太地区信息通信基础设施的标准化协作。3. 公司有些公司也自己搞协议栈。比如泰凌微自研低功耗蓝牙、Zigbee、Thread、Matter等各种标准的软件协议栈还能按需定制。这是它的核心竞争力之一。泰凌微还打算重点发力智能电子价签、智能遥控、智能家居这些市场。4. 民间国际团体IETF互联网工程师任务组志愿者组织负责开发和推广互联网协议尤其是 TCP/IP 协议族。新标准、旧标准替换都通过RFC发布。5. 官方机构FCC联邦通信委员会美国管通信技术的官方机构主要职责是通过对无线电、电视和有线通信的管理保护公众利益。通信产品的标准化技术特性也在它的审查和监督范围之内。这些组织或公司都能在一定程度上定制协议标准满足特定需求或者推动技术往前走。2.2 为什么要进行协议分层2.2.1 初步理解什么是协议分层协议这东西骨子里也是软件。既然是软件就得讲究模块化和解耦。于是它被设计成了层状结构一层叠一层各管一摊。其实所有的软件本质上都是层状、模块化的网络协议栈也不例外。这就带来了两种不同的视角。普通用户站在最顶层只关心“我这个应用好不好使”底下怎么折腾一概不理工程师则不一样他得钻进底层盯住每一层的实现细节看看数据到底怎么封、怎么传、怎么拆。同层通信在逻辑上同层之间看起来像是在直接对话。发送方的某一层跟接收方的同一层仿佛隔空喊话规矩对规矩格式对格式。当然物理上数据还得一层层往下走、再一层层往上传但逻辑上它们就是平级交流。分层解耦分层最大的好处就是能“无障碍替换”。哪一层想升级、想换实现只要接口对得上其他层完全不受影响。系统维护和演进的成本就这么被压了下来。打个比方协议分层就像一栋楼。住户只管自己房间住得舒不舒服水电工负责管道线路结构工程师操心承重抗震。谁也不用越界管别人的事出了问题也容易定位是哪一层的锅就找哪一层。2.2.2 科普OSI七层模型OSI全称Open System Interconnection开放系统互连。它是一套七层网络模型也是一个逻辑上的定义和规范。它把网络从逻辑上切成了七层。每一层都对应着相关的物理设备比如路由器、交换机各管各的活儿。OSI七层模型是一种框架性的设计方法最核心的功能就是帮不同类型的主机实现数据传输。它最大的优点是把服务、接口、协议这三个概念明确地区分开来。概念清楚理论也完整。通过这七个层次化的结构不同的系统、不同的网络之间才能实现可靠的通信。但问题也来了它既复杂又不实用。所以实际讲网络的时候我们用的是TCP/IP四层模型。其实从网络角度看OSI定义的七层模型非常完善。只是在真刀真枪的操作过程中会话层和表示层根本接不进操作系统。所以落到工程实践里最终落地的是五层协议。这句话得等我们学完网络才能真正理解。现在先记住就行。2.2.3 TCP/IP五层模型TCP/IP 是一组协议的代名词底下还包含许多协议合在一起就是 TCP/IP 协议簇。它采用的是五层结构每一层都调用下一层提供的服务来完成自己的活儿。物理层负责光信号和电信号的传递。网线、光纤、电磁波都归它管。集线器Hub就在这一层干活。这一层的能力直接决定了最大传输速率、传输距离和抗干扰性。数据链路层负责设备之间数据帧的传送和识别。网卡驱动、帧同步、冲突检测、差错校验都是它的分内事。交换机Switch工作在这一层。网络层负责地址管理和路由选择。IP协议就在这儿用IP地址标识一台主机靠路由表规划出两台主机之间的传输线路。路由器Router在这一层。传输层负责两台主机之间的数据传输。TCP协议就在这里保证数据可靠地从源主机送到目标主机。应用层负责应用程序之间的沟通比如SMTP、FTP、Telnet。我们后面要讲的网络编程主要就是针对这一层。物理层这块我们平时聊得不多重点还是放在软件相关的内容上。所以很多时候干脆把TCP/IP模型简化成四层来说物理层就不单独拎出来了。大致上各类设备各自实现到哪一层有这么个对应关系一台主机操作系统内核把传输层到物理层全包了。一台路由器实现了网络层到物理层。一台交换机实现了数据链路层到物理层。一台集线器只实现了物理层。当然这也不是绝对的。很多交换机也能干网络层转发的活不少路由器也实现了部分传输层的内容比如端口转发。设备的职责边界随着技术发展早就没那么泾渭分明了。三、深化对协议的认知3.1 为什么需要TCP/IP协议多台主机通过网络通信本质上还是设备到设备的通信。本地通信 vs 网络通信所有设备说到底都是靠“线”连起来的。计算机内部CPU、内存、磁盘基于冯·诺依曼体系本身就是一个网络结构只不过规模小、距离近。核心区别网络通信比起本地通信唯一的差别就是传输距离变长了。本地通信数据在机箱里跑网络通信数据要跨越大半个地球。距离一拉长新麻烦就冒出来了数据怎么处理数据丢了怎么办怎么定位目标主机当下立刻要去哪里问题一冒出来就得有人给方案。TCP/IP协议的本质就是一套针对网络长距离通信的解决方案。距离带来的那些麻烦它一条条接住一个个解决。3.2 TCP/IP协议到底是什么TCP/IP协议的本质就是一种解决方案。它能分层前提是因为问题本身就能分层。距离带来的麻烦不是铁板一块寻址是一个问题可靠传输是另一个问题信号怎么传又是一个问题。问题分得开解决方案自然也能拆成一层一层各管各的。3.3 TCP/IP协议与操作系统的关系这张图大家一定很眼熟之前的文章里我们详细讲过。操作系统的体系结构是层状的注定了网络协议栈也是层状的因为网络本来就是操作系统的一部分。各层各解决什么问题对应得很清楚应用层解决“应用程序之间怎么沟通”。传输层解决“两端主机之间怎么可靠传输”。网络层解决“数据怎么找到目标主机、走哪条路”。数据链路层解决“相邻设备之间怎么识别和传送数据帧”。物理层解决“0 和 1 怎么变成光/电信号传出去”。于是两种不同的操作系统哪怕底层原理千差万别网络部分一定是一样的。因为网络协议栈要跟外界对话它必须遵守同一套标准。操作系统内部可以各显神通但只要上了网大家都得说同一种语言。3.4 从整体角度重新理解TCP/IP协议协议的本质说穿了就是约定好的结构体。结构体就是协议在计算机世界里的落地表达方式。举个例子。假设双方约定好这样一个结构体struct protocol { int a; int b; int c; char data[1024]; };现在问题来了主机B能识别对方发来的data并且准确地把a10、b20、c30提取出来吗答案是肯定的。原因很简单双方都有同样的结构体类型struct protocol。用同样的代码实现协议用同样的自定义数据类型天然就形成了一种“共识”。你按这个结构体打包我按这个结构体拆包字段一个一个对得上数据自然读得准。这不就是约定吗所以对协议有一个最朴素的理解所谓协议就是通信双方都认识的结构化的数据类型。因为协议栈是分层的每一层都有自己的协议。同层之间互相认识对方发来的结构体各自拆解、各自处理互不越界。打个比方协议就像一张快递单。它贴在数据的最外层记录着源地址、目标地址这些关键控制信息。快递员不关心包裹里装的是什么只认快递单上的字段收件人是谁、发件人是谁、送到哪儿。数据每经过一层就被贴上一张对应层的“快递单”到了对端再一层层撕开按结构体读取信息。这就是协议一种约定一种结构体一种双方都能读懂的“共同语言”。如果这篇文章对你有帮助别忘了点个赞、点个收藏、点个关注。你的每一次反馈都是我继续硬核输出的最大动力。我们下篇见。