[计算机网络] 网络的诞生:协议的认知建立

文章目录

欢迎来到计算机网络的世界!在这个信息爆炸的时代,网络无处不在,它如同空气和水一般,成为我们生活和工作中不可或缺的一部分。但你是否曾好奇过,这背后错综复杂的网络是如何运作的?数据是如何在千里之外的计算机之间精准传递的?这篇博客将带你从基础概念入手,逐步深入,为你构建一个清晰的网络知识框架。

计算机网络的诞生与演进:从独立到互联

在计算机出现的早期,它们像一座座孤岛,各自独立工作。如果需要对文件进行共享的话,需要用软盘来将文件从一台计算机拷贝到另一台计算机上。所以大佬们就会想着,做一个可以让两个计算机直接通信的东西处理啊。如果能将这些计算机连接起来,共享数据和资源,将会极大地提高工作效率。于是,网络的概念应运而生。

计算机网络的发展经历了以下几个主要阶段:

  1. 独立模式: 这是最原始的阶段,计算机之间没有任何连接,各自为政。想象一下,你需要拷贝文件,只能依赖U盘、软盘等物理介质,效率低下且不便。
  1. 网络互联: 为了解决数据共享的问题,人们开始尝试将多台计算机连接在一起。最初的网络结构相对简单,但它标志着计算机从独立走向互联的关键一步。
  1. 局域网: 随着连接的计算机数量增多,局域网应运而生。在局域网中,计算机通过交换机 (Switch)路由器 (Router) 等网络设备连接在一起,形成一个覆盖特定地理范围(如一间办公室、一栋大楼或一个校园)的网络。数据在局域网内可以高速传输。
  1. 广域网: 当需要连接远隔千里的计算机时,广域网便派上了用场。互联网 (Internet) 就是全球最大的广域网,它将世界各地的计算机和网络连接起来,形成一个巨大的信息共享平台。

现代网络是如何搭建的?

我们使用的网络是由互联网公司、运营商、通信公司这三者共同维护的,它们的关系可以这么理解:

  1. 做通信工具的公司 (设备制造商/技术提供商):
  • 角色: 这类公司是整个网络信息高速公路的"筑路工"和"车辆制造商"。它们研发和生产构成网络基础设施的硬件设备和软件技术。
    • 硬件设备: 例如华为、中兴、思科、爱立信、诺基亚等公司,它们生产路由器、交换机、基站、光纤、服务器、调制解调器(光猫)等物理设备。
    • 软件技术: 例如高通等公司,它们研发通信芯片和相关的专利技术(如5G技术标准);还有一些公司专注于网络操作系统、数据库、虚拟化技术等。
  • 贡献: 它们为运营商建设网络基础设施提供必要的"砖瓦"和"工具"。没有这些公司提供的设备和技术,运营商就无法搭建起覆盖广泛的通信网络。
  • 依赖关系: 它们依赖运营商的大规模采购来获得收入和市场份额,同时也依赖互联网公司的业务发展来驱动对更先进、更高性能设备的需求。
  1. 运营商 (网络服务提供商):
  • 角色: 运营商是网络信息高速公路的"建设者"和"运营者"。它们利用通信工具公司提供的设备和技术,投入巨资建设和维护覆盖全国乃至全球的通信网络基础设施。
    • 典型的运营商: 例如中国移动、中国联通、中国电信;国外的AT&T、Verizon、Vodafone等。
    • 核心业务: 它们铺设光纤、建设基站、部署核心网设备,形成庞大的通信网络(包括固定网络和移动网络)。然后,它们向个人用户和企业用户提供网络接入服务(如宽带上网、手机通话和数据流量)、专线服务等。
  • 贡献: 它们是连接最终用户和互联网应用服务的桥梁。没有运营商建设和运营的物理网络,互联网公司的服务就无法触达用户,用户也无法访问互联网。
  • 依赖关系:
    • 对上游(做通信工具的公司): 依赖它们提供稳定、先进的网络设备和技术支持。
    • 对下游(互联网公司): 互联网公司的各种应用和服务(如视频、游戏、社交、电商)会消耗大量的网络带宽和数据流量,为运营商带来主要的收入来源。运营商也需要互联网公司提供丰富的应用来吸引用户使用其网络服务。
    • 对用户: 用户的网络使用需求是运营商建设和升级网络的根本动力。
  1. 互联网公司 (应用和服务提供商):
  • 角色: 互联网公司是网络信息高速公路上的"内容提供者"、"服务运营者"和"交通参与者"。它们基于运营商提供的网络基础设施,开发和运营各种各样的应用程序和服务。
    • 典型的互联网公司: 例如谷歌、亚马逊、Facebook (Meta)、腾讯、阿里巴巴、字节跳动等。
    • 核心业务: 它们提供搜索引擎、社交媒体、电子商务、在线视频、网络游戏、云计算、在线办公等服务。
  • 贡献: 它们极大地丰富了网络的内容和服务,使得网络对用户具有巨大的吸引力,从而驱动了整个网络生态的发展。
  • 依赖关系:
    • 对运营商: 它们高度依赖运营商提供的稳定、高速、低延迟的网络连接,以及数据中心等基础设施,来保证其应用和服务的质量和用户体验。它们需要向运营商支付带宽费用、服务器托管费用等。
    • 对做通信工具的公司: 间接地,互联网公司对高性能计算、大容量存储、高速网络传输的需求,也会驱动通信工具公司进行技术创新和产品升级。

总结它们之间的关系:

  • 做通信工具的公司运营商 提供设备和技术,支撑其进行"大量的(网络)基础设施建设"。
  • 运营商 建设和运营网络基础设施,为 互联网公司 的业务开展提供基础的网络平台。
  • 互联网公司 在运营商的网络上提供各种应用和服务,这些服务会产生大量的网络流量,从而为运营商带来收入,并可能间接刺激对更先进通信工具的需求。
  • 同时,运营商 也可能直接向 做通信工具的公司 购买服务或进行合作研发。互联网公司 也可能直接与 做通信工具的公司 合作,例如定制服务器硬件、参与网络技术标准的制定等。

这三者形成了一个相互依存、共同发展的生态链:

  • 通信工具公司是基石,提供技术和设备。
  • 运营商是桥梁,建设和维护网络通道。
  • 互联网公司是驱动力,通过丰富的应用和服务吸引用户,产生价值。

任何一方的缺失或薄弱都会影响整个网络生态的健康发展。


需要注意的是,"局域网"和"广域网"是一个相对的概念。例如,我们常说的"中国特色"的广域网,从某种意义上也可以看作是一个规模非常庞大的局域网。

思考: 为什么网络会产生?

计算机是人的工具,人要协同工作,注定了网络的产生是必然的。网络产生的根本原因------协同工作的需求。无论是文件共享、信息传递还是资源协作,网络都为人类的协同工作提供了强大的支持。

初识协议

网络世界的"共同语言"

想象一下,两个人要进行交流,他们首先需要一种共同的语言,比如中文或英文。如果一个人说中文,另一个人只懂葡萄牙语,那么即使他们都想表达同一个意思,也无法有效沟通。

在计算机网络中,情况也是类似的。计算机之间通过光信号和电信号进行通信,这些信号通过"频率"和"强弱"等方式来表示0和1这样的二进制信息。要想让这些0和1承载起复杂的文字、图片、音视频等信息,并被不同的计算机正确解读,就需要一套双方都认可的规则和约定,这就是网络协议 (Network Protocol)

什么是协议? 简单来说,"协议"就是一种约定。减少计算机之间沟通的成本,用于快速达成共识。

思考: 只要通信的两台主机约定好协议就可以了吗?

并非如此简单。仅仅约定好(制定好)"我们要通信"是不够的。如果一台计算机用频率高低表示0和1,而另一台计算机用信号强弱表示0和1,即使它们都想发送相同的数据,也会因为"语言不通"而无法正常通信。这就像两个人虽然都同意要交流,但一个人说中文,另一个人说葡萄牙语,结果可想而知。

因此,完善的协议需要更多、更细致的规定,并且所有参与通信的设备都必须严格遵守这些规定。

网络协议的重要性:

  • 计算机生产厂商众多: 市场上有各种品牌的计算机。
  • 计算机操作系统多样: Windows, macOS, Linux 等操作系统并存。
  • 计算机网络硬件设备繁杂: 路由器、交换机、网卡等设备也来自不同厂商。

如何让这些不同厂商生产的、运行不同操作系统的计算机和网络设备能够顺畅地进行通信呢?答案就是统一的网络协议。需要有权威的组织或公司站出来,制定一套共同的标准,让所有设备都遵循这套标准进行通信。

谁能定制协议标准?

一般而言,能够定制协议或标准的组织或公司,通常是在业界具有公认地位和影响力的。课件中列举了一些主要的标准制定组织,例如:

  • 国际标准化组织 (International Organization for Standardization, ISO): 著名的OSI七层模型就是由ISO提出的。
  • 国际电信联盟 (International Telecommunication Union, ITU): 联合国下属的专门机构,负责制定电信领域的国际标准。
  • 电气和电子工程师协会 (Institute of Electrical and Electronics Engineers, IEEE): 制定了大量电子、电气和计算机科学领域的标准,如著名的IEEE 802系列标准(例如Wi-Fi标准802.11)。
  • 互联网工程师任务组 (Internet Engineering Task Force, IETF): 负责开发和推广互联网协议,特别是构成TCP/IP协议族的协议,其发布的RFC(Request for Comments)文档是互联网标准的重要来源。
  • 区域标准化组织: 如ETSI(欧洲电信标准学会)、ASTAP(亚洲与泛太平洋电信标准化协会)。
  • 公司: 一些大型科技公司也会参与甚至主导某些协议标准的制定,或者自研标准协议栈。
  • 官方机构: 如美国的FCC(联邦通信委员会)。

这些组织通过制定和推广标准化的协议,确保了全球网络的互联互通。

协议分层 :化繁为简的智慧

网络通信是一个极其复杂的过程,涉及到硬件、软件、数据传输、错误处理、地址管理等方方面面。如果将所有这些功能都揉在一个庞大的协议中,那么这个协议将会变得难以设计、难以理解、难以维护,并且任何微小的改动都可能影响整个系统。

为了解决这个问题,计算机网络的先驱们借鉴了软件工程中的模块化设计 思想,将复杂的网络功能进行拆分,把不同功能划分到不同的层次中,每一层负责特定的任务,并为其上一层提供服务。这就是协议分层 (Protocol Layering)

软件分层的好处:

想象一下,我们要完成一次跨国电话交流。这个过程可以粗略地分为两层:

  1. 语言层: 我们选择一种双方都能听懂的语言(例如英语)。
  2. 通信设备层: 我们使用电话作为通信工具。

这两层是相对独立的。如果我们想换一种语言(例如法语),只要对方也懂法语,通信设备层(电话)仍然可以正常工作,也就是说,同层之间可以"直接"通信。同样,如果我们想换一种通信工具(例如网络视频通话),只要我们仍然使用双方都懂的语言,语言层也不受影响,这就是对层次的解耦。

  1. 站在工程师的视角:通信是分层的,用户之间并不是直接通信,而是用户作为上层将数据交给下层通信设备,然后再通过下层通信设备的数据交互再处理信息交给上层用户。
  2. 站在用户的角度:我就是直接和同层次的用户通信的。

协议分层的好处显而易见:

  • 解耦合 : 每一层的功能相对独立,层与层之间通过明确的接口进行交互。修改某一层的实现细节,只要接口不变,就不会影响到其他层。
  • 模块化 : 各层可以独立开发和测试,降低了整体的复杂性。
  • 易于维护和更新 : 当技术发展或需求变化时,可以针对特定层次进行升级或替换,而不需要重写整个网络协议栈。
  • 标准化 : 每一层的功能和接口都可以进行标准化,促进了不同厂商设备之间的互操作性。

实际的网络通信协议比上面举的例子要复杂得多,需要划分更多的层次。通过该节只需要知道分层可以实现肌肉和,让软件维护成本更低。

网络模型 :协议分层的蓝图

为了更好地理解和实现协议分层,人们提出了不同的网络模型。其中最著名的两个模型是OSI七层模型和TCP/IP四层/五层模型。

1. OSI 七层模型 (Open System Interconnection Model)

OSI模型是由国际标准化组织 (ISO) 提出的一个理论上非常完善的参考模型,它将网络从逻辑上划分为七个层次:

  • 应用层 (Application Layer): 为应用程序提供网络服务,例如HTTP(网页浏览)、FTP(文件传输)、SMTP(邮件发送)等。
  • 表示层 (Presentation Layer): 负责数据的格式转换、加密解密、压缩解压缩等,确保不同系统之间交换的信息能被正确理解。
  • 会话层 (Session Layer): 负责建立、管理和终止两个通信主机之间的会话连接。
  • 传输层 (Transport Layer): 负责端到端的数据传输控制,提供可靠或不可靠的数据传输服务,如TCP和UDP协议。
  • 网络层 (Network Layer): 负责数据的路由选择和转发,将数据包从源主机发送到目标主机,IP协议工作在这一层。
  • 数据链路层 (Data Link Layer): 负责在相邻网络节点间的链路上无差错地传输数据帧,例如以太网协议。
  • 物理层 (Physical Layer): 负责在物理媒介上传输原始的比特流(0和1),定义了接口的电气、机械、过程和功能特性,例如网线、光纤、无线电波等。

OSI模型的优点:

  • 概念清晰: 明确区分了服务、接口和协议这三个概念。
  • 理论完整: 提供了一个结构化的框架,有助于理解复杂的网络通信过程。
  • 促进标准化: 为不同系统和网络之间的可靠通信提供了指导。

OSI模型的缺点:

  • 过于复杂且不实用: 七层划分过于细致,某些层次(如会话层和表示层)在实际的网络实现中往往被合并或简化。
  • 实施困难: 严格按照OSI模型实现网络协议栈的成本较高。

但是!其实在网络角度,OSI定的协议7层模型其实非常完善,但是在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的是5层协议。具体如下文。

2. TCP/IP 五层 (或四层) 模型

相比OSI模型,TCP/IP模型是实际应用中更为广泛和成功的网络协议体系。它通常被描述为一个五层或四层的结构。我们这里以五层模型为例进行讲解:

  • 应用层 : 对应OSI模型的应用层、表示层和会话层。负责应用程序之间的沟通,常见的协议有HTTP, FTP, SMTP, Telnet, DNS等。我们的网络编程主要就是针对应用层。
  • 传输层 : 对应OSI模型的传输层。负责两台主机之间的数据传输,提供端到端的通信服务。主要协议有:
    • TCP (Transmission Control Protocol, 传输控制协议): 提供面向连接的、可靠的字节流服务。它能确保数据按序、无差错地从源主机发送到目标主机。
    • UDP (User Datagram Protocol, 用户数据报协议): 提供无连接的、不可靠的数据报服务。它传输效率高,但不保证数据的可靠性和顺序性。
  • 网络层 | 互联网层 | 网际层 : 对应OSI模型的网络层。负责地址管理和路由选择,将数据包从源地址发送到目的地址。核心协议是 IP (Internet Protocol, 网际协议),它通过IP地址来标识网络中的主机,并通过路由表规划数据传输的路径。路由器 (Router) 工作在网络层。
  • 数据链路层 | 网卡层 : 对应OSI模型的数据链路层。负责在相邻设备之间(例如主机与交换机之间,或两个路由器之间)传输数据帧。它处理物理地址(如MAC地址)、帧同步、冲突检测和数据差错校验等工作。常见的标准有以太网 (Ethernet)、令牌环网 (Token Ring)、无线LAN (WLAN) 等。交换机 (Switch) 工作在数据链路层。
  • 物理层 : 对应OSI模型的物理层。负责光/电信号的传递方式,定义了物理设备接口的规范。例如,我们常用的网线(双绞线)、早期的同轴电缆(现在主要用于有线电视)、光纤以及Wi-Fi无线网使用的电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器 (Hub) 工作在物理层。

为什么有时也称TCP/IP四层模型?

在某些划分中,会将数据链路层和物理层合并为"网络接口层"或"链路层",这样就得到了一个四层模型(应用层、传输层、网络互连层、网络接口层)。由于物理层的内容更多涉及硬件,我们在软件层面关注较少,因此有时会简化为四层模型来讨论。

不同网络设备工作的层次:

  • 主机 (Host): 其操作系统内核通常实现了从传输层到物理层的内容。应用程序运行在应用层。
  • 路由器 (Router): 实现了从网络层到物理层的功能,主要负责在不同网络之间转发数据包。
  • 交换机 (Switch): 实现了从数据链路层到物理层的功能,主要负责在同一局域网内转发数据帧。
  • 集线器 (Hub): 只实现了物理层的功能,简单地将接收到的信号放大并广播到所有其他端口。

需要注意的是,这也不是绝对的。例如,现在很多高级交换机也具备了网络层的转发功能(称为三层交换机),很多路由器也可能实现部分传输层的功能(如端口转发)。

再识协议:深入理解其本质

前面我们对协议有了初步的认识。

为什么要有TCP/IP协议?

  • 单机内部也存在协议: 即使在一台计算机内部,不同组件之间的通信也需要协议。例如,CPU与内存通信有内存总线协议,硬盘与主板通信有SATA、IDE、SCSI等磁盘协议。但这些协议通常由硬件实现,用户感知不明显,且通信距离近,通过主板就可以连接,直接一根线的连接一般不会有很多问题,问题相对较少。所以,计算机内部,冯诺依曼体系本身就是一个网络结构。
  • 网络通信的挑战: 当计算机之间的距离变远,总不能使用一条网线将所有设备都进行连接,复杂又庞大!所以当远程通信通过网络进行通信时,会引入很多新的问题:
    • 如何处理数据?
    • 数据丢了怎么办?
    • 怎么定位目标主机呀?
    • 怎么解决到一个主机后下一个目标地点在哪?

往往距离远了后就会用更长的线,但是线长了后就会造成信号随着路程长度增加而减弱的问题,减弱后就需要使用集线器来放大信号。但是如果每个主机之间都要通信,那岂不是要每个主机和其他主机全部都每个都互相连接吗?全世界那么多主机每个都和其他连接怎么可能!!

所以在机房或家中通常使用路由器或交换机进行通信,如果要和外面通信,将本地路由器连接互联网,连接到了远程目标网络路由器,通过本地的主机将信息发给本地路由器,然后本地路由器将信息发给网络路由器,而网络路由器又可以通过一个个路径选择到你要发送信息给的目标主机所连接的本地路由器,然后通过它的本地路由器再将信息转发给目标主机。

所以一条信息的通信中可能会经过很多个路由器进行转发,那么只要是信息的传输,就一定会一有信息丢失的风险,经过一层层中转的话丢失的风险一定更大。怎么解决呢?并且你要发送的目标主机的位置要怎么进行定位呢?本地路由器怎么知道要给谁发?即使知道给谁发,那沿路的路由器在哪里要怎么知道?怎么才能知道下一个到达的路由器是谁?

还有,发数据不是真正目的吧!如何发送数据给目标主机只是通信的手段,如何去使用数据才是真正的目的!所以我们也需要一个全球统一方法来标识要如何处理数据!


所以,需求的本质就是通信主机距离变远了。因此,TCP/IP协议族的出现,就是为了解决远程主机之间可靠、高效通信所面临的各种挑战,是一种网络长距离通信的解决方案

数据的传输是一种问题,数据的处理也是一种问题,不同的问题要怎么处理?这样不同的类型处理也造就了协议分层,各层协议各司其职,处理不同性质,不同种类的问题。

什么是TCP/IP协议?

  • TCP/IP协议的本质是一种解决方案: 它不是单一的协议,而是一组协同工作的协议,形成了一个协议簇(Protocol Suite)。这个协议簇为互联网的各种应用提供了全面的通信解决方案。
  • TCP/IP协议能分层,前提是因为问题本身能分层: 网络通信的复杂性决定了其面临的问题也是多层次的。例如,物理信号的传输是一个问题,如何在众多主机中找到目标主机是另一个问题,如何保证数据传输的可靠性又是另一个问题。TCP/IP协议的分层结构,正是对这些不同层次问题的针对性解决。

TCP/IP协议与操作系统的关系(宏观上如何实现)

图示展示了 Windows 和 Linux 两种操作系统下,TCP/IP 协议栈在操作系统内部的实现分层结构。从宏观上看,操作系统与 TCP/IP 协议的关系是操作系统作为 TCP/IP 协议栈的载体和管理者,为其运行提供环境、资源和接口,并协调应用程序与协议栈以及协议栈与硬件之间的交互。

具体来说,这种关系和实现方式体现在以下几个方面:

  1. 操作系统内核承载协议栈实现: TCP/IP 协议栈的大部分核心功能(如传输层的 TCP/UDP、网络层的 IP 等)是作为操作系统内核的一部分来实现的。这意味着协议的处理逻辑、状态维护、数据包的封装和解封装等关键操作都在操作系统的核心层完成,享有较高的执行权限和效率。
  2. 系统调用和 API 接口: 操作系统为运行在用户空间的应用程序提供了一系列的网络编程接口,最典型的就是 Socket(套接字)API。应用程序通过调用这些接口来使用 TCP/IP 协议栈提供的服务,例如建立连接、发送数据、接收数据等。操作系统负责将应用程序的请求传递给协议栈的相应层次进行处理,并将协议栈的处理结果返回给应用程序。图示中的"应用层"与"传输层"之间的交互就是通过操作系统提供的接口来完成的。
  3. 资源管理和调度: 操作系统负责管理与网络通信相关的系统资源,如内存缓冲区(用于存储待发送和接收的数据)、网络接口卡(网卡)等。它也负责调度进程和线程,确保网络通信任务能够及时有效地执行。
  4. 驱动程序与硬件交互: 操作系统通过设备驱动程序与物理网络接口卡进行交互。驱动程序是操作系统内核的一部分,负责将协议栈处理好的数据发送到网卡,以及从网卡接收原始数据并传递给协议栈进行处理。图示中的"数据链路层/物理层"或"网卡驱动/网卡"部分就体现了操作系统对硬件的管理和交互。
  5. 分层实现与协作: TCP/IP 协议本身是一个分层模型,而操作系统在实现时也遵循了这种分层结构。每一层都有其特定的功能,并通过定义明确的接口与上下层进行交互。操作系统确保这些层次能够协同工作,完成端到端的数据传输。例如,应用程序通过 Socket 接口将数据交给传输层,传输层加上 TCP/UDP 头部后交给网络层,网络层加上 IP 头部后交给数据链路层,最后通过网卡发送出去。接收数据时则执行相反的过程。

宏观上如何实现连接:

从宏观上看,操作系统通过将 TCP/IP 协议栈集成到内核中,并提供标准的编程接口,实现了应用程序与网络之间的连接。当一个应用程序需要通过网络发送数据时,它调用操作系统提供的网络 API(如 send() 函数)。操作系统接收到这个请求后,会:

  • 将数据交给 TCP/IP 协议栈的相应层次进行处理。
  • 协议栈各层按照协议规范对数据进行封装(添加头部信息)。
  • 最终,数据被传递给网卡驱动程序。
  • 驱动程序将数据发送到物理网络上。

当有数据从网络到达时,网卡接收到数据,并通知操作系统。操作系统通过网卡驱动程序获取数据,然后将数据传递给 TCP/IP 协议栈进行逐层解封装,最终将数据传递给相应的应用程序。

因此,操作系统在宏观上为 TCP/IP 协议提供了一个运行平台和一套服务接口,使得应用程序能够方便、安全地利用网络进行通信,而无需关心底层复杂的网络细节。操作系统是连接应用程序和 TCP/IP 协议栈,以及协议栈和物理网络的桥梁。


这样不就解决了上面所提到的问题与回答吗。协议的每一层有这不同的作用,操作系统的结构对应着协议的每一层,将每一层的作用功能实现。

  • 操作系统内核实现协议传输层和网络层的功能:
    • 传输层(TCP):关注的是如何将数据可靠、有序地从源主机上的某个进程,传输到目标主机上的某个进程。它可以看作是网络层提供的"主机到主机"服务的延伸,增加了"端口到端口"的维度,并提供了更高级的服务质量保证(如可靠性)。
    • 网络层(IP):不关心数据是否丢失、顺序是否正确,也不关心是哪个应用程序发送或接收了数据,它只负责将"信封"(数据包)送到正确的"城市"(目标网络)的"街道地址"(目标IP地址)。
  • 操作系统的驱动部分实现了协议中关于数据链路层的功能:
    • 操作系统通过特定的设备驱动程序与网络接口硬件(如网卡)进行交互。这些驱动程序与操作系统内核的数据链路层实现协同工作,负责管理物理介质的访问(如CSMA/CD或CSMA/CA)、数据的成帧、物理寻址(MAC地址)以及在直接相连的两个节点之间 进行无差错的(或检测差错的)、按顺序的数据帧传输。它们是协议栈与物理硬件之间的桥梁。

物理层主要做了数据链路层传来的数据和在物理媒介上传输的信号的转变,所以操作系统与协议得关系不大,不做深入理解。


现在再理解图示,刚开始已经说明,是Linux和windos下的实现。只是举例,其实所有的操作系统都是这样的!

有那么多的操作系统,不仅仅是Linux操作系统还是基于Unix的macOS系统,操作系统体系结构内部一定都是这么实现的!!!如果某个操作系统厂商拒绝按照标准实现,那么就无法和其他操作系统的主机进行通信。

所以再理解为什么需要网络协议呢?就是为了通信统一标准!

即使是不同的操作系统,只要内部关于传输层、网络层、数据链路层的实现统一,那么数据就可以在任何一个系统上进行包装或者拆解,每个系统都可以理解其他系统对于信息的包装,因为关于网络的部分设计一定是一样的,全世界都用着同一个协议标准!

再关于得到数据后对于数据在上层应用的处理,那是程序员做的事情,将数据与所写的程序结合,应用层与底层的设计完全分割,实现高内聚,低耦合!

网络协议栈,注定了操作系统设计是层状的结构!

所以究竟什么是协议?(朴素的理解)

OS源代码一般都是用C/C++语言写的。

所谓协议,就是通信双方都认识的结构化的数据类型。

想象一下,我们用C语言定义了一个结构体:

c 复制代码
struct protocol {
    int a;
    int b;
    char c[10];
    // ... 其他数据成员
};

如果主机A要发送数据给主机B,它可以将数据填充到这个 struct protocol 类型的变量中,然后将这个结构体变量在内存中的二进制表示(字节序列)发送给主机B。

问题:主机B能识别data,并且准确提取a, b, c的值吗?

回答:答案是肯定的! 前提是主机B也拥有完全相同的 struct protocol 定义。因为双方都使用了相同的结构体定义,它们对数据在内存中的布局、每个成员的类型和偏移量都有共同的认识。当主机B收到字节序列后,它可以按照相同的结构体定义来解析这些字节,从而准确地提取出各个成员的值。

这种"共同的认识"或"共同的结构体定义",就是协议的一种朴素体现。

推广到分层协议:

由于网络协议是分层的,每一层都有其特定的协议。在每一层,通信双方(例如两台主机的传输层,或者两个相邻路由器的网络层)都会使用该层约定的"结构化数据类型"(即该层的协议头部格式)来封装和解析数据。同层之间,因为遵循相同的协议格式,所以能够相互识别对方发送的数据。

整型为什么四个字节?

这就是约定!通过类型标识,当写入或者读取时直接按照类型标识所对应约定好的大小进行读取或者写入,这样就能保证数据的完整。对于协议也是这样的,对结构体做一个约定,写入和读取的时候都是按照该约定的大小进行读取或者写入,保证互相的沟通无障碍~


可以用我们平时接触很多的快递来理解,快递上的各个信息就是用来通信的,无论是收件方还是发件方都有这对应的信息,快递实体是什么,什么时候发出,什么时候签收,地址是哪里,这些会作为数据放在表单(结构体)上,发件方和收件方都可以理解这个内容,这就做到了通信,并且通信地点准确!

总结

计算机网络是一个庞大而精密的系统。通过本篇博客的学习,我们了解了:

  • 网络从独立主机发展到互联互通的历程。
  • 协议是网络通信的基石,是设备间沟通的"共同语言"。
  • 协议分层是将复杂问题简单化的有效手段,它带来了模块化、解耦合和易维护等诸多好处。
  • OSI七层模型和TCP/IP五层(或四层)模型是理解网络协议分层的重要框架,其中TCP/IP模型是实际应用的主流。
  • TCP/IP协议的本质是解决远程通信问题的方案,其分层结构源于问题本身的可分层性。
  • 从朴素的角度理解,协议可以看作是通信双方都认识的结构化数据类型。
相关推荐
liulilittle10 小时前
为什么采用全局管理缓存及状态:麻将客户端状态管理
服务器·网络·游戏·客户端·异步·mahjong·麻将
酣大智11 小时前
OSPF引入的直连路由在 ospf 路由表中看不到
网络·ospf
2601_9663771311 小时前
等保2.0最新标准新增安全数据处理要求后怎么办?等保一体机数据安全模块来助力
运维·网络·安全·等保一体机
BullSmall11 小时前
window系统上报Cannot assign requested address
网络·功能测试
杨云龙UP11 小时前
MySQL Host is blocked because of many connection errors 导致 JDBC 连接失败排查与解决
linux·运维·网络·数据库·sql·mysql·登录失败
执念WRD11 小时前
Fastjson 1.2.83 RCE 漏洞利用
网络·安全·网络安全
xixiaoyunya11 小时前
局域网多电脑文件互备:从传统痛点到自动化方案的技术路径
网络·安全
Lynne30912 小时前
为什么工业数据越来越需要在现场处理?边缘计算正在解决什么问题?
网络·数据分析·数据
m0_7345717613 小时前
深入理解5g <十二> pucch
网络·5g
闲云野鹤在人间13 小时前
Docker入门|第3章 镜像详解
linux·网络·docker·容器·centos·云计算·php