目录
[一. 计算机网络背景](#一. 计算机网络背景)
[1.1 发展历程](#1.1 发展历程)
[1.1.1 独立模式](#1.1.1 独立模式)
[1.1.2 网络互联](#1.1.2 网络互联)
[1.1.3 局域网LAN](#1.1.3 局域网LAN)
[1.1.4 广域网WAN](#1.1.4 广域网WAN)
[1.2 总结](#1.2 总结)
[2.1 什么是协议](#2.1 什么是协议)
[2.2 网络协议的理解](#2.2 网络协议的理解)
[2.3 网络协议的分层结构](#2.3 网络协议的分层结构)
[三. OSI七层模型(理论标准)](#三. OSI七层模型(理论标准))
[四. TCP/IP五层模型(工程标准)](#四. TCP/IP五层模型(工程标准))
[五. OS和网络协议栈的关系](#五. OS和网络协议栈的关系)
[六. 网络中的地址管理](#六. 网络中的地址管理)
[6.1 认识IP地址](#6.1 认识IP地址)
[6.1.1 IP地址的特点](#6.1.1 IP地址的特点)
[6.1.2 IP地址的两种版本](#6.1.2 IP地址的两种版本)
[6.1.3 公有IP地址与私有IP地址](#6.1.3 公有IP地址与私有IP地址)
[6.1.4 动态IP地址与静态IP地址](#6.1.4 动态IP地址与静态IP地址)
[6.1.5 IP地址的作用](#6.1.5 IP地址的作用)
[6.2 认识MAC地址](#6.2 认识MAC地址)
[6.2.1 MAC地址介绍](#6.2.1 MAC地址介绍)
[6.2.2 MAC地址的特点](#6.2.2 MAC地址的特点)
[6.2.3 MAC地址示例](#6.2.3 MAC地址示例)
[6.2.4 MAC地址与IP地址的区别](#6.2.4 MAC地址与IP地址的区别)
[6.3 再度理解ip和mac](#6.3 再度理解ip和mac)
[七. 网络传输基本流程](#七. 网络传输基本流程)
[7.1 两种形式的流程图](#7.1 两种形式的流程图)
[7.1.1 同网段传输](#7.1.1 同网段传输)
[7.1.2 跨网络传输](#7.1.2 跨网络传输)
[7.2 封装和解包/分用](#7.2 封装和解包/分用)
[7.3 以太网通信](#7.3 以太网通信)
[7.4 网络通信的基本脉络图](#7.4 网络通信的基本脉络图)
[八. 总结](#八. 总结)

前言
在当今的数字化世界中,网络已成为计算机系统和应用的核心组成部分。Linux,作为一个开放源代码的操作系统,在服务器、嵌入式设备、以及开发环境中被广泛使用,而其强大的网络能力使其在网络管理和网络编程领域占据了重要地位。
Linux 网络基础知识的掌握,不仅有助于理解操作系统如何管理网络资源,还能够帮助开发者、系统管理员和网络工程师更高效地调试、配置和优化网络服务。在这篇博客中,我们将一起探索 Linux 网络的基本概念、工具和配置方法,帮助你从零开始搭建和管理自己的网络环境。
无论你是初学者还是已有一定基础的读者,本文都将为你提供清晰的概念讲解和实用的操作技巧。让我们一起开始这段关于 Linux 网络基础的探索之旅吧!
一. 计算机网络背景
1.1 发展历程
计算机网络的发展可以追溯到20世纪60年代。当时,美国国防部的高级研究计划署(ARPA)启动了一个名为ARPANET的研究项目,旨在将分布在全美的计算机连接起来,实现资源共享和信息交流。ARPANET于1969年建成,成为了世界上第一个计算机网络
在随后的几十年里,计算机网络经历了从军用到民用、从局域网到广域网的快速发展。20世纪70年代,随着计算机和网络技术的不断进步,计算机网络开始向商业化和民用化方向发展。1974年,ARPANET采用了TCP/IP协议,这成为了今天互联网的基础。到了80年代,局域网(LAN)和广域网(WAN)开始普及,TCP/IP协议也成为互联网的标准协议,标志着互联网的正式建立
1.1.1 独立模式
点对点通信 的模式。每个计算机与其他计算机独立互联,通常用于简单的网络连接。图中描述了多个计算机之间通过业务端口进行数据交换的情形。表示计算机正在处理不同的业务,并且能够在处理完一个任务后,跳转到下一个任务。

在这种架构中,每台计算机的资源(如数据、计算能力)都无法共享,这在小型或非常简单的环境下是足够的。
随着业务需求的增长和计算任务的复杂化,多个计算机之间需要共享数据和资源。这时, 共享服务器结构应运而生。每台终端计算机通过连接一个公共的服务器来共享数据、存储和计算资源。这种架构允许更多计算机加入网络,同时确保所有计算机都可以访问共享资源(如数据库、文件和应用程序),从而提高了网络的管理性和资源利用率。
1.1.2 网络互联
共享服务器的网络结构。每个终端设备(如计算机)使用独立的计算机进行工作,但它们通过连接到一个共同的服务器来共享数据。通过这种结构,业务之间可以随时切换和共享资源,通常用于资源共享和数据集中管理的场景。

随着网络规模的扩大和多设备之间的数据交换频繁,第二张图的 共享服务器 模式开始出现性能瓶颈,特别是在数据传输速率和网络管理方面。每个计算机通过单一服务器来共享资源,可能导致 服务器成为瓶颈,影响整体网络性能。
为了提高网络效率,引入了 交换机和路由器。这些设备能有效地管理网络流量,减少单一服务器的压力,提供更高的带宽和数据流量转发能力。通过使用交换机,计算机可以直接与交换机进行数据交换,减少了多设备间的数据传输延迟。
此外,路由器的引入为网络提供了更好的 拓扑结构,能够灵活地连接不同子网,提高了网络的扩展性和管理性。
1.1.3 局域网LAN
局部网络(LAN)结构 的一个发展阶段,使用了 交换机 和 路由器 设备进行连接。多个计算机和交换机通过路由器连接,从而形成了一个小型的局部网络。在这种结构中,各设备之间的通信更加高效,特别是在局域网络中,交换机和路由器的使用大大提高了数据传输的速度和效率。

随着网络应用的普及,局部网络的规模逐渐无法满足跨地域、跨城市甚至跨国家的需求。计算机和服务器不再仅仅存在于一个物理位置,而是分布在不同的城市和国家之间。此时,需要通过 路由器 和 交换机 连接不同的局部网络,形成一个更大范围的 广域网(WAN)。
跨地域连接,通过不同的 LAN(局部网络)通过路由器和交换机相连接,形成一个全球范围的计算机网络。这种结构适用于需要多个地理位置之间共享数据、应用和服务的情况。
在这种结构下,网络不仅要提供高效的数据交换能力,还要满足安全性、数据冗余、容错性等复杂要求,以应对企业在全球范围内的运营需求。
1.1.4 广域网WAN
广域网(WAN)架构。图中的多个局部网络(如大阪、东京、名古屋等)通过路由器和交换机相互连接,形成一个跨越多个城市的大型网络。这种结构展示了网络如何连接不同的地理位置和数据中心,代表了较为复杂的网络拓扑。

1.2 总结
计算机网络在现代社会中发挥着举足轻重的作用。它打破了数据的孤立状态,使得不同计算机之间能够高效地交换信息和共享资源。无论是工作、学习还是生活,计算机网络都已经成为人们不可或缺的一部分。它让人们能够随时随地访问互联网,获取各种信息和服务,极大地提高了工作效率和生活质量
二. "协议"
2.1 什么是协议
协议(Protocol)是一种约定,是指一组用于规定计算机之间进行通信时,如何传输数据和处理信息的规则和约定。协议是网络通信的基础,它定义了数据传输、错误检测、数据压缩、数据加密等多个方面的细节,以确保不同设备能够顺利、高效地进行通信。
生活中的"协议": 比如你是南方的,但是你考上了北方的大学,你为了给家里节省话费,你就跟家人做个约定,如果电话响了1声就是报平安,2声就是记得打生活费,3声就是有事情需要当面聊...... 而这种基于约定某种信号的决策,就是协议。

计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息.要想传递各种不同的信息, 就需要约定好双方的数据格式.
不同的人会规定不同的协议,比如去上学,就是上学协议,去上班就是上班的协议,该结婚了,也有结婚协议。协议是用来解决通讯问题的。
读到这里,你肯定也会有一些疑惑:
1. 你怎么保证你的数据能准确的到达下一个设备?- 数据链路层的协议解决,会有各种各样的字段表示这个数据就是发给你的
2. 如何定位主机的问题,比如说你想给你爸妈发消息,那为什么就能准确发给你爸妈呢,而不发给你的弟妹,老师呢?- IP协议,协议就要涵盖报文,原IP是谁,目的IP是谁,主机都有自己的IP地址,没有IP地址主机是通信不了的。
**3. 长距离传输的数据丢失了怎么办?-**TCP协议
4. 如何处理发来的数据? - https http ftp smtp...应用层协议
5. 所以每层都要有自己的协议?
为什么会有上述的问题发生呢?归根结底就是单纯因为传输距离变长了,就会考虑到了各种问题了
- 当我们邮寄快递的时候需要填写快递单,当你拿到了一个空快递单的时候 你是能认识的,对方也认识,这就是给单子做了约定。然后你就知道要填地址,姓名,手机号...了
- 当收快递的时候,快递员给你快递的时候,你的快递盒子上面贴的有纸(快递单),你要根据这个盒子上的快递单来确实这个东西是否发给我的。所以我们收快递不止收到快递本身,还收到更多的信息字段(快递单),这个信息字段就是我们规定的协议,更准确的是叫做报头。由此可知,协议的表现形式就是结构体对象!(双方能够认识是因为做了一个规范,网络使用的是TCP,IP...,就意味着源代码层面上都是约定好的,这样A主机定义的结构体对象,B主机就也能知道啥意思了)!
解决了上面的问题,我们再想一个更深层的问题:
只要通信的两台主机,约定好协议就可以了吗?
答案是否定的。原因如下:
- 计算机生产厂商有很多;
- 计算机操作系统, 也有很多;
- 计算机网络硬件设备, 还是有很多;
- 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议;
2.2 网络协议的理解
网络协议,简称为协议,是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。这些规则详细规定了如何建立连接、如何互相识别、如何发送和接收数据等
网络协议是两台计算机或设备之间进行通信时遵循的一组规则。这些规则决定了数据如何在网络中传输、如何格式化、如何保证数据的可靠性、如何进行错误检测等。可以类比为一种"语言",它使得不同设备之间能够理解彼此并交换信息。
然而,随着网络环境的复杂性增加,单一的协议已经无法满足各种需求。比如,我们需要不同协议来处理不同的功能:有些协议关注数据的传输可靠性,有些则处理数据如何在网络中路由等等。
仅仅依赖一个单一的协议来处理所有的通信需求会非常复杂和低效。不同类型的设备、不同的网络技术、不同的需求,都可能需要不同的协议来分别解决。比如,物理层需要协议来定义硬件设备的连接方式,而应用层需要协议来定义如何格式化数据。这种复杂性促使我们需要分层来把通信任务分成多个相互独立、负责不同功能的模块。
2.3 网络协议的分层结构
网络协议的分层不仅让网络通信更加灵活、模块化、可维护,还确保了网络的标准化、可扩展性和易于管理。通过分层,我们能够清晰地理解和解决网络中的各个层次问题,提升了网络的稳定性、可靠性与性能。同时,这也为不同技术和设备间的互操作性提供了基础,使得全球的设备能够通过统一的协议进行有效的通信。

这张图通过展示不同语言和通信设备之间的协议协作,强调了协议分层的重要性。图中体现了在通信中,语言协议和通信设备协议可以独立变化而不相互影响。无论是切换语言(如汉语到英语)还是更换设备(如从有线电话到无线电话),协议分层确保了通信的灵活性和兼容性。语言协议处理语言层面的转换,而设备协议则负责设备之间的连接与数据传输,从而实现了不同设备和语言用户之间的有效沟通。
真实的情况是人在和电话沟通,在逻辑上,是人与人沟通,认为AC是在同一层的。层和层直接是高内聚、低耦合的
层状结构的好处:通过高内聚、低耦合的,好维护。一层出现问题,只会影响这一层本身,不会影响上一层,比如说电话机层坏了,只需要把电话机修好了就能恢复正常了,甚至把一层干掉,换成类似的(电话机换成无线电),照样不影响上一层
这时候我们肯定会有疑惑?我们该怎么分层呢
三. OSI七层模型(理论标准)
- OSI (Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
- 但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解.

对于学软件的咱们来说,物理层可以暂不关心。学软件只需要先考虑五(四)层协议
四. TCP/IP五层模型(工程标准)
TCP/IP四层(或五层)模型:将OSI七层模型中的表示层、会话层合并为应用层,从而形成了四层(或五层)结构。从高到低依次为应用层、传输层、网络层、数据链路层和物理层(五层模型还包括一个会话层)。TCP/IP协议簇就是基于这种分层结构设计的
OSI七层模型理论是好的,但是工程角度既复杂又不实用,所以我们把他变成了5层(其实7层都是需要的,只不过把上三层压缩成了一层) 名字叫做TCP/IP是因为这两层最重要!!
物理层(Physical Layer):
- 功能:物理层负责在物理介质(如电缆、光纤、无线电波等)上传输数据的比特流。它定义了硬件设备之间的电气、机械、功能等接口标准,确保比特在网络中能够被传输。
- 设备:网卡、集线器、交换机(物理设备)、路由器等。
数据链路层(Data Link Layer):
- 功能:数据链路层负责在物理链路上可靠地传输数据帧,解决数据传输中的错误检测、流量控制和帧的封装与解封装等问题。它使用MAC地址来标识设备,确保在相邻设备之间进行通信。
- 设备:网卡、交换机(数据链路层设备)。
- 协议:Ethernet(以太网)、PPP(点对点协议)等。
网络层(Network Layer):
- 功能:网络层负责将数据包从源设备路由到目的设备,处理设备间的寻址与路由选择。它通过IP地址来标识设备,并通过路由协议确保数据能够跨越多个网络进行传输。
- 设备:路由器。
- 协议:IP(Internet Protocol)、ICMP(Internet Control Message Protocol)等。
传输层(Transport Layer):
- 功能:传输层负责提供端到端的通信,确保数据的可靠性和完整性。它为应用程序提供不同的传输服务,包括面向连接的服务(TCP)和无连接的服务(UDP)。
- 协议:TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)等。
应用层(Application Layer):
- 功能:应用层直接与用户的应用程序交互,提供网络服务,如电子邮件、文件传输、网页浏览等。它处理数据的格式化、协议的实现和数据的交互。
- 协议:HTTP(Hypertext Transfer Protocol)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)、DNS(Domain Name System)等。

在整个网络通信里,站在操作系统层面,最重要的两层协议是传输层和网络层,传输层最具代表性的协议是TCP,网络层最具代表性的协议是IP
名字叫做TCP/IP是因为这两层最重要!!
了解了那么多,我们学习这些和之前学习OS的有什么关系呢?
五. OS和网络协议栈的关系

上述图片说明,传输层,网络层都是属于Linux内核,这也就是我们之前为什么要深入了解内存,文件,进程,驱动等等

这其实就相当于一台主机,而两台主机之间做交互比如得通过网卡(硬件),所以发送方要通过用户层贯穿协议栈到物理层,而接收方又要从物理层贯穿协议栈到用户层
由上述可知,网络通信的本质就是贯穿网络协议栈的过程!!
六. 网络中的地址管理
6.1 认识IP地址
IP地址(Internet Protocol Address,互联网协议地址) 是用于在计算机网络中标识每个设备的唯一地址。IP地址是互联网通信和局域网内设备间通信的基础,通过IP地址,网络设备能够定位并与其他设备进行通信。
6.1.1 IP地址的特点
唯一性:
每个连接到网络的设备都会分配一个唯一的IP地址,用于识别该设备。IP地址保证了设备在网络中的唯一标识。
层次结构:
IP地址属于网络层(OSI模型中的第三层),其主要作用是为不同的网络设备提供通信路径。
6.1.2 IP地址的两种版本
IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4
-
IPv4(互联网协议版本4):
- 长度 :32位(4字节),通常表示为4个十进制数(每个数的范围是0到255),并通过"点分十进制"表示。例如:
192.168.1.1
。 - 地址空间:IPv4支持大约43亿个地址,但由于互联网设备的增长,IPv4地址已经开始枯竭。但仍是主流地址
- 示例 :
192.168.0.1
- 长度 :32位(4字节),通常表示为4个十进制数(每个数的范围是0到255),并通过"点分十进制"表示。例如:
-
IPv6(互联网协议版本6):
- 长度 :128位(16字节),通常表示为8组16进制数,每组由4个十六进制字符组成,使用冒号分隔。例如:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
。 - 地址空间:IPv6拥有极其庞大的地址空间,能够支持几乎无限量的设备连接。
- 示例 :
2001:0db8:85a3:0000:0000:8a2e:0370:7334
- 长度 :128位(16字节),通常表示为8组16进制数,每组由4个十六进制字符组成,使用冒号分隔。例如:
6.1.3 公有IP地址与私有IP地址
-
公有IP地址:
是通过互联网服务提供商(ISP)分配的,能够在全球范围内唯一标识设备。通常用于与外部互联网通信。示例:
8.8.8.8
(Google的DNS服务器)。 -
私有IP地址:
用于局域网(LAN)内部,不会直接在互联网上路由。私有IP地址范围通常用于家庭、公司等内部网络。常见的私有IP地址段:
192.168.0.0
到192.168.255.255
172.16.0.0
到172.31.255.255
10.0.0.0
到10.255.255.255
- 私有IP地址通过 NAT(网络地址转换) 转换成公有IP地址,以实现内外网通信。
6.1.4 动态IP地址与静态IP地址
-
动态IP地址:
由DHCP(动态主机配置协议)服务器动态分配,每次连接网络时可能会分配不同的IP地址。通常用于家庭网络和企业中大多数设备。
-
静态IP地址:
固定分配给某个设备,通常用于需要持续、固定连接的设备,如服务器、网络打印机等。
6.1.5 IP地址的作用
- 设备识别:IP地址用于标识网络中每个设备,确保数据能够准确传输到目标设备。
- 数据路由:路由器使用IP地址来决定如何将数据包从一个网络路由到另一个网络。
- 网络通信:设备通过IP地址进行通信,不同网络中的设备通过IP协议进行交互。
IP地址的意义:路径选择 ---> 从哪里来,到哪里去,IP地址是永远不变的
6.2 认识MAC地址
6.2.1 MAC地址介绍
MAC地址(媒体访问控制地址,Media Access Control Address) 是一种硬件地址,用于在局域网(LAN)中唯一标识网络设备。它是网络接口卡(NIC)或其他网络设备(如交换机、路由器等)硬件层面的标识符,用于确保数据能够准确地传送到目标设备。
6.2.2 MAC地址的特点
唯一性:每个设备的MAC地址在理论上是唯一的,通常由设备的制造商在生产过程中分配,保证同一品牌和型号的设备之间不重复。
长度和格式:
- MAC地址通常由 48位 (6字节)二进制数表示,通常用 16进制 数字表示。
- 常见的表示方式为
XX:XX:XX:XX:XX:XX
或XX-XX-XX-XX-XX-XX
,其中每个"XX"表示两个十六进制数。例如,00:14:22:01:23:45
。分配规则:
- MAC地址的前 3 字节(即前 24 位)是由国际标准化组织(IEEE)分配给制造商的,称为 组织唯一标识符(OUI,Organizationally Unique Identifier)。这部分标识了设备的生产商。
- 后 3 字节(24位)由设备制造商分配,用于标识设备的唯一性。
作用:
- 数据链路层标识:MAC地址是在数据链路层(OSI模型中的第二层)使用的,用来唯一标识网络设备。在局域网中,数据包通过MAC地址在设备之间传输。
- 物理地址:MAC地址被视为物理地址,因为它与设备的硬件相关,通常存储在网络接口卡(NIC)或其他网络设备的固件中。
功能:
- 设备识别:当设备发送数据时,它会将目标设备的MAC地址写入数据帧的目标地址字段,以便网络中的交换机和其他设备将数据包转发到正确的目标设备。
- 局域网通信:在局域网中,设备通过MAC地址进行直接通信,不依赖于IP地址。MAC地址在数据链路层起到重要作用。
静态与动态:
- 静态MAC地址:通常是硬件预设的,设备的MAC地址通常是不变的,除非手动修改。
- 动态MAC地址:某些情况下,设备可以通过软件修改其MAC地址,这在某些特殊情况下(如网络调试或隐私保护)可能会有用。
6.2.3 MAC地址示例
- 典型的MAC地址:
00:14:22:01:23:45
。00:14:22
是厂商的OUI,标识设备的生产商。01:23:45
是设备的唯一标识符。
6.2.4 MAC地址与IP地址的区别
- MAC地址 是硬件地址,在局域网中用于设备识别。它是固定的、唯一的,通常不随网络变化而变化。
- IP地址 是网络层的地址,用于设备在网络中的定位。IP地址是可以更改的,且在不同的网络环境中可能会发生变化。
MAC地址的意义:上一站从哪里来,下一站到哪里去 ---> 当下目标,MAC地址一直在变
6.3 再度理解ip和mac
mac地址是保证局域网中主机的唯一性
ip地址是保证主机全网的唯一性
可是他们的具体意义 是什么呢,下面来讲个故事:
假设我们要自驾从黑龙江到杭州去玩,我们始终知道我们从哪来且要到哪去(源和目一直不变的,其实就是ip地址),但是我们的这个过程有很多省份,所以我们需要做路径规划,上一站从哪来,下一站又到哪里是会(源和目会一直变化,依据是我接下去要去哪里,其实就是mac地址)

IP地址,尤其是目的IP,一般是不会改变的,协助我们进行路径选择
Mac地址,出局域网后源和目都要被丢弃,让路由器重新封装
在Linux可以用ifconfig命令查看自己主机的mac和ip
七. 网络传输基本流程
7.1 两种形式的流程图
7.1.1 同网段传输
同一个网段内的两台主机进行文件传输.

以太网通常使用交换机来实现设备之间的通信。交换机通过 MAC 地址表来转发数据帧,确保数据正确地发送到目标设备。
7.1.2 跨网络传输
跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器.

令牌机制:令牌环网络的传输方式依赖于"令牌"机制。令牌是一个特殊的数据包,网络中的设备必须先获得令牌才能发送数据。令牌会在网络中循环传递,避免了数据冲突。
数据传输控制:在令牌环网络中,数据只有在令牌到达时才能发送,这样避免了数据冲突和多个设备同时发送数据的问题,提供了一种有序的传输机制。
故障容错:虽然令牌环网络的拓扑结构是环形的,但如果某个设备或连接发生故障,令牌环可以通过检测断开的部分进行修复(例如通过跳过损坏的部分)。然而,环形结构的一个缺点是,如果环路中的任意一点发生故障,整个网络可能会受到影响,尽管现代网络设备能够通过冗余路径处理这一问题。
令牌环网络曾经在1980s到1990s非常流行,尤其是在IBM的LAN环境中,但随着以太网技术的普及,令牌环逐渐被取代。
过程分析:
- 首先是我们的信息到达链路层的时候,我们的链路层会看看我们的当前ip地址和目标ip地址是不是跨网了,如果跨网了就会通过包装mac地址的报文传送给自己局域网中的路由器,mac地址的目的就是将报文从局域网内部的a主机发送到b主机,只不过需要跨网的时候会指定发给路由器
- 路由器不仅有以太网的驱动、令牌环的驱动、无线wlan......的驱动,所以他会帮我们直接解包老的报头换上新的报头,这样底层的差异化就被屏蔽了,而上三层是保持一致的。
- 这也是为什么无论是手机还是电脑都可以入网,只要路由器能够提供他们不同的mac帧的报头,就可以把底层的差异全部屏蔽掉!
结论:
- 局域网通信的本质就是把数据交给路由器
- IP协议屏蔽了底层网络的差异化,靠的就是工作在IP的路由器!!
- IP实现了全球主机的软件虚拟层,一切皆是IP报文
7.2 封装和解包/分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理
下图为数据封装和解包的过程
(1)用户层:需要版本号
因为很可能对方虽然跟你使用的是同一个软件,但是版本并不一定一样(有的人可能并不会经常更新),而版本不同的话可能功能也不一样,所以我们需要一个能够标识版本的字段,来让另一方做出区分从而根据不同的版本推送不同的信息!!
(2) 传输层:需要序号
同时传输的时候,可能我们说话的顺序会导致不同的意思,所以我们消息传输的可靠性其中之一必须得保证有序!!所以我们传输信息的时候需要有序号信息。
(3) 网络层:需要知道当前ip和目标ip
信息在传输的时候总得知道自己从哪来,且该去往哪里吧,这样对方在接受的时候才能知道当前的信息是发给自己的。
(4) 链路层:需要有当前mac地址和目标mac地址
这样才能知道我当前的局域网内有那么多主机,我怎么知道要去往哪个主机呢?? mac地址是每个网卡出厂的一个唯一标识,机器启动的时候OS会读取网卡的属性信息就可以获得,他存在的意义就是保证在局域网内具有唯一性!!
每一层都会需要不同的协议报头! 层层往下其实就是对有效载荷进行封装,而当传送给另一端的时候,又会自下而上贯穿协议栈,每一层都之后认得自己的那部分报文信息,识别之后丢弃自己的那部分再往上传递(如何得知交给哪一层 是通过分用决定的),直到用户层就可以变成我们需要的有效信息了,所以层层往上就是在进行解包!
最后再拓展两个思考问题:
问题1: 把一碗水倒入桶里,可是将来让你必须要把水分开,结果是分不开了。
所以几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力,即在封装的时候,要考虑未来怎么更好的解包。
**问题2:**实际上,整个网络协议栈想一个倒的多叉树,所以网络层不止有IP,还有ICMP IGMP..., 当自下而上贯穿协议的时候,抬头一看,发现每一层都有很多协议
所以还要有个能力,即几乎任何层的协议, 都要在报头中提供,决定将自己的有效载荷交付给上层哪一个协议的能力,把这种能力,叫做分用的过程
有了这两个问题和答案,我们才能更加理解封装和解包,才不会困惑
7.3 以太网通信
思考一下,多台主机是在以太网怎么通信的?
或者说,一个主机,怎么把数据交给另一台主机呢?
下面先讲一个故事:老师在班级上课的时候,叫张三站起来交作业,此时其实其他同学也听到了,但是最后只有张三理会了。
**本质上:**大家都收到了这个声音(报文),大家都把这个声音提取了信息(报头和有效载荷),并且进行了对比(分离)。提取到报头叫的是张三,把自己的名字和张三做对比,在对比报文信息的时候发现该报文不是自己的于是就丢弃了!

**注意:**当班级里的同学很吵闹的时候,可能张三就无法听到老师在叫他了。因为一些垃圾的噪音会把正确信息给顶掉。
再比如:你正在打游戏,另一个人在和你连接一个局域网下载视频,那么就会挤压局域网带宽,进而和你的数据发生碰撞,然后打游戏就会卡顿
所有发送的信息是有可能被其他非目标主机捕捉的,只不过一般情况下都会被丢弃,但是如果有人刻意为之的话还是可以被上层看到的,所以我们一般来说要对数据进行一定的加密保护,如果没有任何保护就发送数据就可能会泄漏信息!!
以太网通信的原理:

因为所有主机都可能会发送信息,所以有可能会发生数据碰撞问题!!尤其是如果有人不断往局域网发送垃圾数据的时候。
以太网通信的结论:
- 发送主机都要执行碰撞避免算法,他的算法原理就是每个主机在发送的时候都会等上随机的延迟时间,相当于是错峰发送!!
- 局域网越大碰撞概率就越大,所以一般不建议太大,否则会影响传输效率,但是如果实在需要这种场景,就需要用交换机来划分碰撞域!!
- 局域网是属于多台主机的共享资源,因为任何时刻都只能有一个主机发送消息,所以我们必须保证他的互斥性,只不过不是用加锁完成的,以太网是用碰撞避免算法来控制每个时刻都只有一个主机在发送信息,而还有一种令牌环网他所使用的方法就是通过持有某种标识(有点像令牌)才能具备发送的能力,且该资源只有一份!
7.4 网络通信的基本脉络图

八. 总结
通过本章内容,我们系统地了解了计算机网络的基础知识,涵盖了从网络发展的历程到协议的定义与分类,再到OSI七层模型和TCP/IP五层模型的具体应用。同时,我们深入探讨了网络中的地址管理,介绍了IP地址与MAC地址的特点、作用以及它们之间的区别。这些内容为我们提供了理解网络架构与通信过程的坚实基础。
本章不仅帮助我们掌握了网络的基础理论,也为接下来的深入学习和实践提供了必要的框架。接下来,我们将进一步Linux网络编程套接字,UDP与TCP 等更为复杂的课题,继续深化对计算机网络技术的理解和应用。