[Linux网络——Lesson1.初识计算机网络]

目录

前言

一、😊网络发展

[1-1 🍕背景](#1-1 🍕背景)

1-2🍔特点与类型

二、🤩网络协议

2-1🍟什么是协议

[2-2 🌭协议分层](#2-2 🌭协议分层)

[2-3 🍿OSI七层模型](#2-3 🍿OSI七层模型)

[2-4 🧂TCP/IP五层模型](#2-4 🧂TCP/IP五层模型)

三、😁操作系统和计算机网络关系

[3-2 🥓再谈协议](#3-2 🥓再谈协议)

四、😂网络传输的基本流程

[4-1 🥚局域网通信](#4-1 🥚局域网通信)

[4-2 🍳TCP/IP模型中的不同层都有自己的协议,而协议最直观的表现部分叫做 「协议报头」](#4-2 🍳TCP/IP模型中的不同层都有自己的协议,而协议最直观的表现部分叫做 「协议报头」)

[4-3 🧇同一个局域网内通信](#4-3 🧇同一个局域网内通信)

[4-4 🥞数据包的封装与分用](#4-4 🥞数据包的封装与分用)

[4-5 🧈跨路由器(网络)的远端通信](#4-5 🧈跨路由器(网络)的远端通信)

五、🙂网络地址

[5-1 🍞IP地址](#5-1 🍞IP地址)

[5-2 🥐MAC地址](#5-2 🥐MAC地址)

[5-3 🥨IP与MAC的关系](#5-3 🥨IP与MAC的关系)

🗝️总结与提炼

结束语


前言

在数字化浪潮席卷全球的今天,计算机网络已成为支撑社会运转、驱动科技革新的核心基础设施。从日常的社交沟通、在线办公,到工业互联网的智能管控、云计算的海量数据处理,网络无处不在地渗透到生产生活的每一个角落。理解计算机网络的底层逻辑与核心机制,不仅是信息技术从业者的必备素养,也是每一位数字时代参与者洞悉技术本质的关键。

本文将遵循由浅入深、层层递进的逻辑,从网络发展的宏观背景切入,系统剖析网络协议的核心架构与主流模型,厘清操作系统与计算机网络的紧密关联,拆解网络传输的完整流程,最后聚焦IP地址与MAC地址等关键网络地址的核心知识。通过对这些基础且核心的内容进行梳理,旨在帮助读者构建起清晰的计算机网络知识框架,为进一步深入学习网络技术奠定坚实基础。

一、😊网络发展

1-1 🍕背景

1945 年,二战结束,世界恢复和平,并出现了 美国、苏联 两个超级大国;1947 年,杜鲁门主义 出台,标志着以两个超级大国为代表的 冷战 正式开始;1957 年,苏联 发射了人类第一颗人造地球卫星,令 美国 大为震惊;1958 年美国 组建高级研究计划局**(ARPA)** ,简称 阿帕,负责研发用于军事用途的高新科技

阿帕 中,信息技术处 属于核心机构,主要研究方向是计算机,网络通讯等方面,1968 年,拉里·罗伯茨 提交了一份题为 《资源共享的电脑网络》 报告,报告中提出 让阿帕的计算机相互连接,以达到信息共享的目的,而这就是最早的网络:阿帕网

1969 年 10 月 29 日 ,进行第一次 阿帕网 的连接实验,起点为 加州大学洛杉矶分校 ,终点则是500km 之外的 斯坦福研究所 ,第一次连接实验想传输单词 login,最终因连接中断,只成功传输了字母 l 和 o ,但这次连接实验成功开启了网络世界的大门;最初 阿帕网 的节点只有四个,到了1981 年,节点增加至213

1974 年,温顿·瑟夫 和 罗伯特·卡恩 提出的TCP/IP 协议 正式发表,TCP/IP 协议 突破了不同硬件间的限制,允许不同的计算机之间进行高效可靠的数据传输,经过数十年的完善,TCP/IP 协议成为使用最广泛的网络协议,这也为网络快速发展奠定了基础;1986 年,美国国家科学基金会网络(NSFNET) 成立阿帕网 只能用于军事研究,而NSFNET则是鼓励大学和研究机构加入到自己的互联网中,服务于学术研究,NSFNET 快速发展,并逐渐替代了 阿帕网

随着互联网在 军事 和 学术 领域的不断发展,商业 领域对于网络的需求变得越来越迫切,因为这是一个全新的市场,具有不可估量的发展前景;世界上第一家商业互联网服务提供商 The World 很快就成立了,并于 1989 年开始提供互联网的接入服务,目前这家公司的官网仍可访问,随后越来越多的商业互联网服务商开始诞生;1995 年,NSFNET 将自己的经营权转给了美国的私有电信公司,至此互联网正式进入商业时代

尽管商业互联网早在 1989 年就已经开始,但想要通过互联网获取信息仍存在门槛,这对于普通人是很不友好的,导致互联网无法普及;同年,互联网中教父级的人物蒂姆·伯纳斯-李 发明了 万维网 www ,并于第二年开发出了第一个网页服务器 和 第一个网页浏览器 ,至此,普通人只需要打开浏览器,就能轻松查阅到互联网中的所有信息,信息变得触手可得,互联网也因此快速发展,进入了网页时代。互联网在 1990-2000 年这十年间的发展令所有人吃惊,这期间也诞生了很多互联网传奇

上述内容摘录自知乎文章《可能谦虚的说,这是一篇最全的互联网发展史

互联网 仍在快速发展,web2.0移动互联网 时代同样诞生了无数传奇,即将到来的 web3.0 也同样令人期待。所有人共建的,就是 网络

1-2🍔特点与类型

  • 独立模式 : 计算机之间相互独立
  • 网络互联 : 多台计算机连接在一起, 完成数据共享

如果按照 网络区域 进行划分,可以分为 局域网 LAN广域网 WAN

  • 局域网 LAN : 通常指在一个区域内将多台计算机通过双绞线、同轴电缆等连接介质互相连接
  • 广域网 WAN : 将远隔千里的计算机都连在一起


所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网。

二、🤩网络协议

2-1🍟什么是协议

协议 是一种约定,也是一种标准,比如著名的 IEEE 754 标准,就规定了浮点数如何在内存中存储;再比如投资者往往会与被投资者签订一份对赌协议,确保投资顺利进行

协议制定后,参与者都必须遵守该协议

不同行业中的 协议 往往由该行业中的翘楚制定,比如在通信标准领域,华为 就担任了重要角色,并作为 5G 标准的主导者之一

  • 一流企业定标准,二流企业做品牌,三流企业做产品

"协议" 是一种约定

在当前互联网时代,有众多计算机生产商、计算机操作系统和多样化的计算机网络硬件设备。那么,如何实现这些不同设备之间的互相连接呢?

答案是 制定出被大家都认可的协议,当 协议 被制定出来且拥有一定用户基础后,后续厂商推出的硬件设施也必须遵守该 协议,否则就会被市场抛弃,如此一来,可以倒逼众多配套设备共同遵守,网络连接环境也就逐渐完善了

所以,完善的协议,需要更多更细致的规定,并让参与的人都要遵守。

  • 计算机生产厂商有很多
  • 计算机操作系统, 也有很多
  • 计算机网络硬件设备, 还是有很多

如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议。

小蛋在龙国A市B小区C单元住着,阿熊的楼上是卖牙膏的,有一天小蛋的牙膏用完了,直接去楼上买牙膏就行,而阿熊只需要操心到手的牙膏怎么使用即可。
  小蛋这天又把牙膏用完了,不同的是,小蛋这次想要试一试国外的牌子,这个时候阿熊点开网络购物,从加拿大买了一款牙膏,下单之后,阿熊只需要静待快递到即可,而发货公司考虑的就多了。

首先,发货公司需要确定目的地址,然后需要确定中途的每一个站点,只有确定了,以及到达每个地方的配送方式,最重要的是,包裹如果出现了以外该怎么办,有哪些补救方法

在现实生活中有上述的问题,而在计算机网络的世界中同样存在这些问题,通过以上的例子,我们可以将网络当中的所有问题归为以下四类:

  • 如何使用数据的问题
  • 可靠性的问题
  • 主机定位的问题
  • 数据报局域网转发的问题

计算机网络协议的出现就是为了解决以上问题所制定的。

2-2 🌭协议分层

网络在传输过程中面临诸多问题:

  1. 数据如何组织,如何解析的问题
  2. 长距离传输,数据丢失的问题
  3. 如何在众多主机中定位目标主机的问题
  4. 如何进行数据转发、路径选择的问题
  5. 010101 硬件级别的协议问题

如何解决这些问题呢?

将问题分类,逐个击破 --- 高内聚

这些问题之间是存在先后关系的,比如只有先把信息组织好了,才需要考虑数据传输过程中的丢失问题,丢失问题得到保障后,就要考虑把数据发送给谁、如何发送,最终通过硬件完成发送

基于 解耦、可维护性、可扩展性 这三点出发,采用 协议分层 的解决方案,将不同的问题解决策略归入不同模块中,模块之间互不影响 --- 低耦合

此时网络的 层状结构 呼之欲出,不同分层中包含了各种协议,负责解决不同的问题

其实 分层 这个概念早在语言学习阶段就已经接触过了:在学习 继承 时,子类继承自父类,当前出现了 父类子类 这两层结构,父类可以不必关心子类的具体实现,需要时可以直接通过父类指针对子类成员或函数进行访问

在进行 分层 后,上层无需关心下层的具体实现,只需要使用下层提供的功能即可,分层 思想很好的体现了计算机领域的设计哲学:任何计算机问题都可以通过添加一层软件层解决


拿日常生活举例,假设A 想给 B 打电话,只需要拿起电话并拨通B 的号码,待B 接通电话后,双方可以通话,在通话过程中,A 与 B 都认为自己在直接与对方通话

这是因为 AB 同处 语言层 ,任务是 进行通话 ,而通话的具体实现属于 通信设备层 ,用于 实现通话语言层 依赖 通信设备层 的功能,但并不关心它的具体实现,因为没必要

  • 语言层和通信设备层之间通过 接口 进行连接,有点类似于操作系统中的系统调用

假设某天 通信设备层 中的电话机坏了,可以将其更换为无线电,继续向 语言层 提供通话的服务,即便设备更换了,AB 依旧可以正常通话

不仅 通信设备层 可以更换设备,语言层 也可以更换角色,比如现在变成 BC两个外国人进行通话,通信设备层 依旧可以正常提供服务

上述例子中,很好的体现出 分层 的好处:分层之后,每一层都只关注自己层的功能,使用下层提供的接口,任何一层出问题,都不会直接影响其他层

分层 是解决大量问题的最优解(高内聚、低耦合

能否不进行分层❓

  • 从技术层面来说是可以的,但这对于整个系统的设计都是非常不友好的,比如你可以把所有的代码都写到一个 main 函数中,程序依旧可以运行,但如果程序运行出现了问题,或者说需要对某个功能进行改动,会变得十分麻烦
  • 所以随着编程思想的深入,不同的功能由不同的函数实现,对功能(函数)进行聚合,也就形成了类;分层也是如此,分层之后,无论是进行功能维护,还是进行功能扩展,都可以在不影响其他层的情况下进行

2-3 🍿OSI七层模型

在计算机中,很多东西都是分层的,比较常见的就是 软件分层网络分层 。相信很多人都听说过这样一句话:任何问题都可以通过添加一层软件层来解决 。软件分层能更好的解决问题,但是为什么需要网络分层呢?

实际上,网络分层是为了让层和层之间是松耦合的,这样,如果上层出现问题就去上层解决,下层出现问题就去下层解决。不至于一个小问题导致整个网络瘫痪。

基于 网络分层 的设计思想,诞生了著名的 OSI七层网络模型

OSI(Open System Interconnect),即 开放式系统互连 , 一般都叫 OSI参考模型,是 ISO组织1985 年研究的 网络互连模型 ,该模型将 网络 从逻辑上分成了 七层 ,每一层都有对应的 协议物理设备

OSI参考模型 最大优点是将 服务接口协议 这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯

自底向上,OSI参考模型 中不同层级实现功能如下所示

表格图片来源:《网络入门基础

它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可 靠的通讯。

OSI参考模型 是一种框架性的设计方法,基于该模型可以实现不同的具体模型,其中最出名的是 TCP/IP五层模型,这也是我们主要学习的网络模型

2-4 🧂TCP/IP五层模型

为什么会变成五层模型?

虽然OSI提出了七层模型,但是并不负责实现这七层模型,仅仅是提出了定义,而后人们通过工程实践得出,OSI七层模型实现起来比较困难, 现实一般需要5层模型即可。而 应用层 表示层 会话层,统一为应用层 。同时也可称为 TCP/IP 五层(四层协议)

为什么叫做 TCP/IP 五层模型?

这是因为其中的TCPIP 协议非常经典、非常重要,具有代表意义,于是就命名成了TCP/IP 五层模型

注意TCP/IP是一组协议的代名词,其中包含了许多协议,共同组成了 TCP/IP 协议簇

TCP/IP 五层模型 也可以称为 TCP/IP 四层模型 ,这是因为 物理层 不是我们开发人员关注的重点


TCP/IP 五层模型 的不同分层功能如下(自底向上)

  • 物理层:负责光电信号的传递方式,以太网 中采用 同轴电缆、双绞线、光纤、电磁波 等传递信号,不同材质决定了信号最大传输速率、传输距离、抗干扰性等,如果信号传递过程中出现衰减,还可以使用 集线器 进行信号增强
  • 数据链路层: 负责设备之间的数据帧的传送和识别,比如网卡设备的驱动、帧同步、冲突检测、差错校验等工作, 数据链路层 中有很多不同的实现标准:以太网、令牌环、无线 LAN 等,具体是什么标准,取决于网卡,用于连接多台设备,实现网络数据传输与交换的 交换机 就工作在 数据链路层
  • 网络层 : 负责地址管理和路由选择. 例如在 IP 协议中, 通过 IP 地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层
  • 传输层 : 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机
  • 应用层 : 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层

上三层合并为一层,这是因为上三层的不确定性太大,有些通过网络传播的是音频,有些是视频,有些是文字、图片等等。所以不能将这些都内置在OS中,否则就会限制网络的功能。

三、😁操作系统和计算机网络关系

系统网络 不分家,看似设计复杂的网络标准模型其实和系统设计有着千丝万缕的联系,比如 物理层、数据链路层、网络层、传输层 这四层属于 操作系统层 ,剩下的 应用层 属于 用户层,因为我们最终是需要通过操作系统来进行网络通信,所以网络标准模型必然会被融入操作系统中

应用层中的 应用、表示、会话 不属于系统体系结构,也不能属于系统体系结构,因为他们由用户定义并实现,由于实现方式不固定,也就统称为 应用层 ,网络编程就是在 应用层 中进行的

上图很清晰的解释了计算机网络相对于操作系统的位置。而传输层和网络层集成在操作系统内部的,所以,网络就是OS的一部分。操作系统在诞生之初,其网络协议栈就已经存在了,因为其集成在内核当中。

所以用户是无法直接访问网络协议栈的,网络势必要像OS那样,提供系统调用接口给上层使用。而基于网络的系统调用接口开发出的程序,就属于应用层。有些人觉得系统调用使用起来比较麻烦,所以又对网络的系统调用接口做了封装,形成网络库。

按照常识,我们都知道,windows的电脑是可以给苹果用户的电脑发消息的,安卓同样可行。实际上,世界上所有的OS只要想入网,就必须遵守TCP/IP协议,保证不同主机之间的数据通信 。这就是OS与网络之间的关系。

3-2 🥓再谈协议

截至到目前为止,我们并没有真正的接触协议。我们都知道,OS大部分都是由C语言来编写的,而TCP/IP网络协议栈 也属于内核的一部分,则TCP/IP网络协议栈也是由C语言来编写的。

仔细观察下图:

问题 :主机 B 能识别 data,并且准确提取 a=10,b=20,c=30 吗

  • 回答答案是肯定的!因为双方都有同样的结构体类型 struct protocol。也就是说,用同样的代码实现协议,用同样的自定义数据类型,天然就具有"共识",能够识别对方发来的数据,这不就是约定吗
  • 关于协议的朴素理解所谓协议,就是通信双方都认识的结构化的数据类型因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对方的协议

四、😂网络传输的基本流程

4-1 🥚局域网通信

** 假设在一个局域网内,有多台主机,共用这个局域网,那么这些处在同一个局域网当中的主机,是否可以相互通信呢?**

按照常识,我们都知道,同一局域网内的主机之间是完全可以相互通信的,比如部分游戏(我的世界)的本地连接对战功能,这些游戏在进行本地多人对战时,只需要构建一个局域网,主机相连后即可直接进行通信

局域网通信的一般原理:在局域网中进行通信时,无论任何时刻,只允许一台主机向局域网中发送信息

按照常识,我们都知道,同一局域网内的主机之间是完全可以相互通信的,但是他们是如何做到的呢?怎么知道我要发送数据的对端是谁呢?

其实很简答,在上课时,老师喊小龙起来回答问题,明明其他人也都听到了,但是为什么就小龙站起来呢?因为只有小龙自己叫做小龙。而在计算机当中,每台主机都有自己的唯一标识符 ,我们称为 Mac地址

有关Mac地址的详细原理

  • MAC 地址用来识别数据链路层中相连的节点
  • 长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址)

在Linux当中,我们使用ifconfig可以查看本机的Mac地址:

如何理解 "抓包" 行为?
当你收到不是发给你的数据包时,没有选择无视,而是将其收集了起来,这就是抓包;带入故事中,就是那种喜欢凑热闹的吃瓜群众
网卡默认会过滤掉不属于自己的数据包,可以手动设置成混杂模式,以关闭过滤

尽管如此,它们之间想要通信还有不少的问题。既然局域网中的数据包可以被所有人收到,也就意味着通信过程可能被干扰,就比如同时向湖面丢石头,产生的波纹之间会相互影响,导致自己的波纹 丢失/混乱

阿熊在上课被叫起来回答问题,这个时候张三肯定不会说,"小龙,昨天借我的5毛钱赶紧还我"。但是在计算机的世界里,发送数据时可能不止一台主机在发送,而它们处在同一局域网之间,就 有可能会发送数据碰撞

所以,每台主机为了避免这种情况,内置了碰撞检测和避免方法 ,当局域网内有其他主机在发送消息时,当前主机就会阻塞等待,等待网络通信状态重新变好,才会继续发送数据。所以,我们又把 一个局域网称为一个 碰撞域

所以在 任何时刻在局域网内只能有一台主机发送数据的局域网,我们称为 以太网

以太 是什么东西?为什么能跟网络扯上关系?

以太 这个名词源于物理学中的 以太假说:认为光在太空中通过 以太 传播,但物理实验证明其根本不存在,最终沦为物理学界的笑柄。而我们网络中正是通过 光电信号 传输数据的(光电信号中有光),因此就把该标准称为 以太网,用来 "致敬" 物理学

还有一种网络叫做 令牌环网,在一个局域网内,有多台主机,只有一台主机持有令牌时才可发送数据,否则只能等待令牌。

不论是 局域网 还是 令牌环网,本质都是 在同一时刻只有一台主机发送数据

4-2 🍳TCP/IP模型中的不同层都有自己的协议,而协议最直观的表现部分叫做 「协议报头」

每一层都有自己的 协议 很好理解,毕竟每层需要解决的问题都不同,用来解决问题的 协议 自然就不同

至于什么是 协议报头?协议报头 有什么用?

协议报头 在数据传输过程中,用于承载一些控制信息;协议报头 提供了关于数据包或帧的元信息,以便在网络中正确地路由、传递和处理数据

比如下面这个就是经典的 TCP 协议报头

可以通过生活中的例子辅助理解

前面提到过,马云 创办的 淘宝 深刻改变了现代人的生活,说白了就是网购,这种网上购物方式必须依赖强大的 物流 体系,面对成千上万的商品,以及全国大大小小的收货信息,该如何设计快递方式,才能确保 物流 过程中不会出差错?

答案是通过 快递单 标识物流信息,这里的快递单就好比 协议报头 ,因为有很多家快递公司,每家公司的 快递单 都不一样,不同协议的 协议报头 也不一样,协议报头 是协议最直观的表现部分

所以假设张三双十一在某东上买了一把青轴机械键盘,商家发货时,会先选择一家 快递公司(协议) 进行发货,将 键盘(有效载荷) 打包,并给包裹贴上一张 快递单(协议报头),准备物流

如果不发生意外,张三在数天后会收到一条取件信息,张三拿到快递后,首先做的是读取 快递单(协议报头) 信息, 确认是自己的包裹后,才会 把包裹拆开(解包) ,最终张三成功拿到了自己网购的 键盘(有效载荷)

在上面这个故事中,张三的整个购物过程可以分为三步:商家打包 -> 物流 -> 张三解包,快递单作为快递公司的代表,包含了很多重要信息,是包裹物流过程中的通关文牒

如果张三想要退货,则会在原先包裹的基础之上,再加一张 快递单2 ,将之前的 快递单1+包裹 整体看作一个 包裹(有效载荷) ,利用新的 快递单2 进行封装

  • 此时的有效载荷从 键盘 变成了 包裹,证明有效载荷是一个相对的概念

网络中传输的 数据 可以看作商品,称为 有效载荷,传输过程中选择的 协议 可以看作快递公司,协议报头 自然就是快递单了,实际在进行网络传输时,也是遵循 打包 + 传输 + 解包 这三步走的,只不过在传输过程中还需要再 打包 ,在众多 协议报头的保驾护航之下,可以确保数据在网络世界中成功递达

快递单1 + 商品 ---> 协议报头 + 有效载荷

快递单2 + (快递单1+商品) ---> 协议报头 + 有效载荷

所以现在可以理解为什么不同层中的协议可以共同完成数据传输工作了,因为对于同层来说,协议是用来解决问题的,问题解决后,会用自己的 协议报头 将数据打包,传给下层;或者把自己本层的协议报头与有效载荷分离后,把有效载荷传给上层

  • 传给下层时:解决完问题后,将上层传过来的有效载荷,与自己层的协议打包后,继续传给下一层,这个过程称为 封装
  • 传给上层时:上层得到的是一个自己能看懂的数据包,把自己本层的协议分离后,把有效载荷继续往上传就好了,这个过程称为 分用

封装分用 是不同网络层中必须面对的重要问题,只有把这两个问题解决了,整个传输过程才会通畅,关于更多实现细节可以接着往下看

4-3 🧇同一个局域网内通信

有了 局域网内直接通信协议报头 的前置知识后,接下来演示 同一个局域网内两台主机如何通信

现在有两台主机进行通信,上面我们说了,如果两台计算机想要通过网络进行通信,那么他们必须遵守相同的协议,一台主机在发送数据时会自上而下对发送信息进行封装,而收端收到信息需要自下而上解开对信息的封装才能拿到信息。

而不同层协议之间,都认为自己是在和对端同层协议进行通信。每一层协议都会对原有的数据进行封装,形成 报头除了本层添加的报头,剩下的信息 我们称为 有效载荷

通信过程:**应用层 将自己的协议报头** 与用户想发送的 信息 封装成一个 数据包 ,传给下一层,传输层 将自己的 协议报头数据包 封装成一个新的数据包 ,传给下一层,不断重复,直到数据包 来到对端主机网络 中;链路层数据包 中分离出 有效载荷 ,向上交付,网络层 同样需要分离出 有效载荷 ,向上交付,最终 有效载荷主机A 发送的 信息 ,成功交给了 主机B

前面我们说了,TCP/IP协议属于内核中的一部分, 而每一层封装的报头,实际上就是计算机网络协议的结构化数据报头 。说人话就是结构体。两台计算机通过tcp/ip协议通讯的过程如下:

4-4 🥞数据包的封装与分用

从上面主机通信的例子中,可以产出以下结论:

  1. 每一层都有自己的协议报头
  2. 向下传输时,每一层都要有将自己的「协议报头」与「有效载荷」封装,传给下一层的能力
  3. 向上传输时,每一层都要有将自己的「协议报头」与「有效载荷」分离,识别并交付给上一层的能力
  4. 在逻辑上,同一层中使用的都是同一个协议,都认为自己在于对端直接通信

向上交付时,如何从数据包中将自己的 「协议报头」「有效载荷」 分离呢?

  • a.「协议报头」中一般都包含了当前报头的大小,用数据包总大小 - 协议报头大小,得到的就是「有效载荷」;除此之外有的「协议报头」与「有效载荷」之间存在特殊分隔符,可以轻松识别并分离

可是协议有很多,在向上交付时,如何知道 「有效载荷」 该传递给哪个 协议 呢?

b.如果要交给上一层,「有效载荷」中必然包含上一层协议报头,而协议报头中包含了协议信息,自然能知道将「有效载荷」交付给谁了

几乎每层 协议 都要具备 a、b 两个基本功能,否则就无法向上交付数据

补充概念

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段,在网络层叫做数据报,在链路层叫做帧
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装
  • 首部信息中包含了一些类似于首部有多长、载荷有多长、上层协议是什么等信息
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,,根据首部中的上层「协议报头」将数据交给对应的上层协议处理

下图为数据封装过程:

下图为数据分用的过程:

4-5 🧈跨路由器(网络)的远端通信

在学习远端通信之前,需要先认识一下 路由器

路由器 主要工作在 网络层 ,但它也具备 数据链路层物理层 的工作能力,并且 路由器 也可以可以看作一台 主机(节点) ,作为远端通信的桥梁,路由器 至少需要级联两个子网,至少要提供两个网络接口

主机A主机B 不处在同一个局域网中,如果想要进行通信,需要让 路由器主机A 处于同一个子网,同时让 路由器主机B 也处在同一个子网,主机A 把数据交给 路由器路由器 把数据转发给 主机B主机A主机B 完成了通信

假设 主机A路由器 所在子网标准为 以太网主机B路由器 所在子网标准为 令牌环,同样可以演示两台主机如何进行跨路由器的远端通信

跨网段的主机的数据传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。

主机A 正常将信息封装后,向下传递,当数据包来到 网络层 时,发现此时有很多主机,自己该如何将数据包正确传递给路由器呢?


我们先不着急了解双方是如何跨网络通信的,我们先来看一下唐僧去西天取经的故事:

话说唐僧师徒四人去西天取经,这一回,唐僧一行人刚从女儿国出来,前往黑风岭,熟悉故事的我们都知道,黑风岭的下一站就是火焰山。唐僧一行人刚到了黑风岭,就遇见了黑风岭领主,领主问唐僧:"你是谁,从何而来,到哪里去?" 唐僧回答:"贫僧自东土大唐而来,要到西天取经,敢问施主可知通往西天路的下一站是哪里?" "原来是唐僧,来了就别走了,袈裟留下!"

如果黑熊精是一个好领主,他就会告诉唐僧下一站该前往火焰山。而有意思的是在唐僧身上永远会有两套地址:

  1. src(自东土大唐而来),dst(西天取经)
  2. 上一站从哪来,下一站到哪里去

唐僧无论去到那个地方,如果有人问唐僧从哪来到哪去,唐僧一定回答:"自东土大唐而来,到西天取经去。" 我们发现,第一套地址无论唐僧在哪里都不会改变。

但是每当唐僧去到了不同的地方的时候,唐僧上一站从哪来,下一站到哪去都会立刻刷新。也就是说,唐僧的第二套地址是一直在变化的。

而在计算机网络当中,上述的两套地址,它们分别对应:

  1. 源IP地址,目的IP地址
  2. 源Mac地址,目的Mac地址

其中 目的IP地址给我们提供路径规划的依据,唐僧为什么要去女儿国?因为唐僧要去西天,唐僧为什么要去黑风岭?因为唐僧要去西天。

这里涉及了IP地址的概念,IP地址是什么?以及它与Mac地址有什么区别

  • IP地址是一种点分十进制的地址通常以:xxx.xxx.xxx.xxx 形式出现

在Linux当中可以使用 ifconfig 命令查看IP地址:

  • IP地址在整个路由过程中,一直不变(目前知识储备不足,我们只能这样说明,后面在修正)
  • Mac 地址一直在变
  • 目的 IP 是一种长远目标,Mac 是下一阶段目标,目的 IP 是路径选择的重要依据,mac 地址是局域网转发的重要依据

路由器一般至少横跨两个子网,所以这里路由器要有两张网卡,有两个Mac地址。

在局域网中,主机可以通过甄别 唯一标识符 MAC 的方式无视不属于自己的信息,此时目标主机并不存在于当前局域网中,按照之前的逻辑,主机A 发送的信息会被所有人丢弃(包括路由器),所以光靠 唯一标识符 MAC 是无法完成跨路由器通信的,还需要一个重要概念:IP 地址

IP 地址 的功能是 标识公网环境下的所有主机 ,当前所谈及的 IP 地址 均为 IPv4 标准,该标准使用了一个 4 字节的无符号整数类型(unsigned int)来表示一个 IP 地址

cpp 复制代码
// IP地址的结构(通过位段实现)
struct ip
{
    int part1 : 8;
    int part2 : 8;
    int part3 : 8;
    int part4 : 8;
}

操作系统内核由 C语言 编写,而网络中的 传输层网络层 属于操作系统内核,自然也是通过 C语言 实现的

从代码结构中可以看出 IP 地址 由四部分组成,每一部分占 8 字节,表示范围为 [0, 255]

直接使用二进制表示比较抽象,IP 地址 一般表示为:xxx.xxx.xxx.xxx

这种表示方式称为 字符串风格的点分十进制方案 ,是方便给人看的,如何将二进制转换为 点分十进制

cpp 复制代码
// IP地址
unsigned int ipVal = 3332933889;

// 分别获取IP地址中的四个部分
struct ip* pIP = (struct ip*)(&ipVal);

pIP->part1;
pIP->part2;
pIP->part3;
pIP->part4;

将获取的四个部分转为十进制,然后拼接成字符串即可,关于转换工作不需要我们手动完成,使用系统提供的接口就行了

如何借助 IP地址 把数据包正确交给路由器?

路由器中存在一张 路由表 ,其中包含了当前子网中已有路径信息,以及之前通信过的路径信息,主机A 在进行数据包发送前,会先到 路由表 中查询目标路径是否存在,如果存在,就按照路径传递,如果不存在,就会把数据包交给路由器,由路由器完成数据包的转发

可以把 IP地址 看作学号,规定不同班级的学号前缀不一样,假设张三捡到了一张学生证(数据包),仔细查阅花名册(路由表)后发现不是自己的同班同学,于是将学生证交给了辅导员(路由器),由辅导员来完成学生证的归还工作

将数据包丢给路由器的行为称为 默认路由


网络层IP进行封装协议头时,就已经将源IP于目的IP封装进报头里面, 现在 主机A 知道自己要把数据包交给路由器,同时也知道 主机BIP 地址,而在最后一层协议封装时,需要将原Mac地址与目的Mac地址封装进数据报头。所以左侧设备的网络源mac地址是自己,目的mac地址是路由器 mac_left 地址。

路由器拿到数据包后会进行解包,将 以太网报头 拆掉,然后分析 IP 报头 ,规划该数据包的路径,得知需要将此数据包交给 主机B ,加上 令牌环报头 后把数据包丢入令牌环网络中,等待 主机B 截取

不仅是主机需要解包,路由器等中间设备也需要具备解包能力,因为路径规划依赖于 IP,而查看IP协议报头,需要先将以太网等链路层协议报头去除

路由器作为三层交换机,也有自己的层数划分,不过只有两层。所以路由器的IP网络层会重新对有效载荷进行封装,送达下层协议,当有效载荷到达了下层协议,不论是什么网路,都会对有效载荷进行报头封装,这时,源mac地址变为了 right_mac ,目的地址变为了 IPB。

于是对端主机B就可以收到对应的数据了,因为通信双方遵守相同的TCP/IP协议,所以由路由器转发的数据在主机B也是可以看懂的,在经过一层层的解包和分用,最终把信息呈现给了用户B。

得益于 路由器 + IP 地址 ,在 网络层 及以上层次中,都认为数据包的内容始终没有改变,而在 网络层 之下,允许各种不同的实现标准进行通信(比如这里的以太网与令牌环),这种优秀的设计使网络在普及时可以畅通无阻

IP 是全球网络的基础

IP层往上,这些协议有区别吗?

实际上IP层往上,双方的协议并没有任何的不同,而IP层往下就有差别了,上面例子中,第一次封装的是以太网的数据报头,发送给了路由器,而路由器发送给对端B时,却变为了令牌环网的数据报头。

五、🙂网络地址

5-1 🍞IP地址

IP地址用来标识网络中不同主机的地址

目前的 IP 地址 有两种:IPv4、IPv6,凡是没有特殊说明的,IP 地址 都是指 IPv4

IPv4 由一个 4 字节的无符号整数 构成,占 32 比特位,可表示的最大地址数为 42亿+

为了让 IP 地址 更便于阅读,可以将整数中的四部分转为十进制后通过符号连接,以 点分十进制 的形式展现,比如 192.168.0.1

IPv4 标准于 1981 年推出,在那个联网设备都还极度匮乏的年代,使用一个无符号整型(最IPv4 标准于 1981 年推出,在那个联网设备都还极度匮乏的年代,使用一个无符号整型(最大表示 42 亿+)就足够了,IPv4 在当时看来确实可以标识网络中的主机所有主机,然而谁也没有意料到网络发展如此之快,快到 42 亿个地址根本不够用,IPv4 标准中的所有地址于 2019 年全部分配完毕,这就导致 IPv4 标准现在并不能标识所有主机,只能标识公网环境下的所有主机

  • 为了应对 IPv4 地址不够用的窘境,推出了 IPv6、NAT 等技术,IPv6 足足使用了 16 字节,长度为 128 位,是 IPv4 的四倍,可以标识 340 亿亿亿台设备,是一个天文数字,称可以为全世界的每一粒沙子编上一个地址,目前 IPv6 标准尚未全面普及;而 NAT 技术则是引入了地址转换 的概念,简言之就是在公网与内网间建立映射关系,使得内网中允许地址重复,NAT 技术提供了一定的安全保护
  • 我们普通人使用的网络一般都是内网 ,地址普遍都是 192.168.xxx.xxx,这种情况下即使你的 IP 暴露,也无法直接定位至你的主机设备

5-2 🥐MAC地址

MAC地址用来识别数据链路层中相连的节点

MAC 地址 用一个 6 字节的整数表示,占 48 比特位,可表示的最大地址数为 百万 亿+

MAC 地址 一般用十六进制数字加上冒号的形式来表示,例如: 08:00:27:03:fb:19

MAC 地址 在网卡出厂时就确定了,不能修改.MAC 地址 通常是唯一的(虚拟机中的 MAC 地址 不是真实的 MAC 地址, 可能会冲突,也有些网卡支持用户配置MAC 地址)

IP 地址很紧张,MAC 地址就不一样,作为数据包转发的节点,同一个局域网内,MAC 地址重复的可能性几乎为0,48 比特位显得有点浪费,这就好比你每个月要1000生活费,但你爸每个月都给你1000w,足够用,但过于夸张了

5-3 🥨IP与MAC的关系

IP 地址 与 MAC 地址 最大的区别在于:传输过程中,IP 地址不会改变,MAC 地址会改变,随着传输距离的增加,MAC 地址改变的次数也会增加

如何理解 IP 地址 与 MAC 地址 的关系?

  • IP 地址 分为 源IP地址、目标IP地址,
  • MAC 地址 也分为 源MAC地址、目标MAC地址

设有一天,张三考上了大学,临近上学日,一向谨慎的张三选择规划好自己的报名路线

因为张三家住贵州,而他的学校在湖北,途径多个省份,张三需要坐高铁从贵州到重庆,再从重庆到湖北,分为两程:贵州->重庆,重庆->湖北,虽然中途涉及换乘,并且每一程的始发地和目的地也不一样,但张三的最终目的地始终没有改变

  • 源IP地址:张三家
  • 目标IP地址:张三考上的学校
  • 源MAC地址:[贵州,重庆]
  • 目标MAC地址:[重庆,湖北]

张三只需要带够钱,并且明确自己的目的地,就一定能抵达

张三的报名之路类似于数据包在网络中的传输之路,IP 地址始终没有改变,但 MAC 地址可能发生改变,主机A 将数据包交给路由器时,路由器分析 IP 地址得知需要将数据包转交给 主机B ,于是数据包中的 目的 MAC 地址 会变成 MAC-主机B,主机B 收到数据包后,经过不断解包分用,主机B 将会收到 主机A 发送的信息 lo

所以 IP 地址 用来表示始发地与目的地,MAC 地址 用来表示途中需要经过的中转区间,通常把 MAC 地址 的改变称为 下一跳 ,就是从一个 子网 跳转到另一个 子网

IP 地址MAC 地址 共同协作,确保数据能够从源设备传输到目的设备。IP 地址 提供了端到端的逻辑标识,而 MAC 地址 则在局域网中提供了物理设备之间的唯一标识。这种分层的设计有助于网络的灵活性和可扩展性

🗝️总结与提炼

本文系统梳理计算机网络核心知识,构建完整知识体系。

  • 首先明确网络由信息技术迭代与资源共享需求驱动,奠定宏观认知;
  • 核心聚焦网络协议,强调协议是通信规则,OSI 七层模型提供理论框架、TCP/IP 五层模型为主流应用标准,分层思想是关键;
  • 操作系统作为硬件与协议的桥梁,管理网络资源并实现协议,支撑通信运行;
  • 传输流程核心为 TCP/IP 模型下的数据包封装与分用,发送端逐层封装、接收端解封装;
  • IP 地址(逻辑定位,跨网路由)与 MAC 地址(物理标识,局域网通信)协同完成通信链路。

整体核心逻辑:以 "协议" 为规则、"分层模型" 为框架、"操作系统" 为支撑、"地址" 为标识,通过 "数据包封装与分用" 实现跨设备跨网络高效通信,各知识关联递进构成技术基石。


结束语

以上是我对于【Linux网络编程】初识计算机网络

感谢您的三连支持!!!

相关推荐
Yurko1310 小时前
【计网】基于三层交换机的多 VLAN 局域网组建
网络·学习·计算机网络·智能路由器
kyle~16 小时前
计算机网络---传输层安全 SSL与TLS
计算机网络·安全·ssl
沧澜sincerely17 小时前
计算机网络应用层
计算机网络
White_Can1 天前
《计算机网络:体系结构》
计算机网络
蒙奇D索大1 天前
【计算机网络】考研408 | 数据链路层的“安全卫士”:探秘检错编码之奇偶校验码
经验分享·笔记·计算机网络·考研·改行学it
爱思德学术1 天前
中国计算机学会(CCF)推荐学术会议-C(计算机网络):IEEE WOWMOM 2026
计算机网络·多媒体·无线网络·移动网络
another heaven1 天前
【计算机网络 HTTP 请求参数规范详解】
网络协议·计算机网络·http
树在风中摇曳2 天前
什么情况下会把 SYN 包丢弃?
计算机网络
梁辰兴2 天前
计算机网络基础:计算机网络概述
计算机网络·计算机·概述·计算机网络基础