Linux网络初始及网络通信基本原理

文章目录

一、计算机网络背景

1. 网络发展历程

  • 独立模式:早期计算机相互独立,数据不共享,业务处理效率低。
  • 网络互联:多台计算机连接,实现数据共享,提升协作效率。
  • 局域网(LAN):小范围内多台计算机通过交换机、路由器连接。
  • 广域网(WAN):跨越地理范围的大规模网络连接,如跨城市、国家。

提示:局域网和广域网是相对概念,例如中国的"广域网"也可视为一个大型局域网。


二、认识"协议"

1. 什么是协议?

  • 协议是通信双方约定好的数据格式和规则

通俗的理解,协议就是双方都认识的结构化的数据类型

举个例子:

在寄快递的时候会需要填快递单,而快递单上就会有各种信息,寄件人姓名,始发地,单号等,这些信息双方都知道其中的意思,也就是说,快递单就是寄件人和收件人双方所做的一个约定,这个约定依赖着快递公司所制定的协议

  • 计算机通过光信号、电信号传输数据,需约定频率、强弱等表示 0 和 1 的方式。

2. 为什么需要协议?

​ 本质目的是解决因为通信距离增加而带来的新问题,而使用协议就是为了解决这些问题。

​ 这些问题包括:

  1. 通信距离远,需要通过路由器转发,怎么先发到路由器?
  2. 网络上主机过多,怎么确定需要发送的主机"位置"
  3. 数据发送出去,发生丢失怎么办?
  4. 发送只是为了将数据送到接收方手中,但最终的目的是为了让接收方使用处理数据,接收方式怎么知道如何处理呢?

3、协议分层

协议的具有不同性质,即存在不同种类的问题,因此根据处理问题类型的不同,需要将协议进行分层

分层的好处

  • 模块化设计:低耦合,每层独立,易于开发、维护和替换。
  • 封装性:每层只需关心自己的协议,无需了解其他层的细节。

三、OSI 七层模型

OSI模型是一个理想化的、理论上的概念模型,由国际标准化组织提出。它的核心价值在于提供了一个通用的标准框架,帮助我们理解和设计网络体系结构。它严格分为七层,每一层都为上一层提供服务,并调用下一层的服务,层与层之间通过接口进行通信。

层级 名称 核心功能与说明 数据单元 典型协议/设备
7 应用层 与用户直接交互 ,为应用程序提供网络服务接口。它决定了"为谁服务"。 - 例如:浏览器、电子邮件客户端 数据/报文 HTTP, HTTPS, FTP, SMTP, DNS, Telnet 设备: 计算机、服务器上的应用程序本身
6 表示层 数据的翻译官,负责数据格式的转换、加密和解密、压缩和解压缩。 - 例如:将数据从GBK编码转为UTF-8 数据/报文 JPEG, MPEG, SSL/TLS(加密)、ASCII 设备: 通常由软件实现,无独立设备
5 会话层 对话的协调者,负责建立、管理和终止两个应用进程之间的通信会话。 - 例如:断点续传、会话认证 数据/报文 NetBIOS, RPC 设备: 通常由软件实现,无独立设备
4 传输层 端到端的可靠通信 ,负责将数据从源端送到目的端,并提供差错恢复和流量控制。 - 核心问题:"对方收到了吗?" TCP(传输控制协议) - 面向连接、可靠 UDP(用户数据报协议) - 无连接、高效 设备: 防火墙
3 网络层 寻址和路由 ,负责将数据包从一个网络路由到另一个网络,实现全球互联。 - 核心问题:"走哪条路?" 包/数据报 IP(网际协议) 、ICMP、ARP、路由器 设备: 路由器
2 数据链路层 相邻节点间的可靠传输 ,负责在同一局域网内 通过MAC地址进行寻址,并提供差错校验。 - 核心问题:"下一个设备是谁?" 以太网协议 、PPP、交换机、网桥 设备: 交换机、网桥
1 物理层 比特流的透明传输 ,定义物理设备的电气、机械、过程和功能规范,负责传输原始的比特流(0和1)。 - 核心问题:"信号和媒介是什么?" 比特 RJ-45、光纤、同轴电缆、集线器、中继器 设备: 集线器、中继器、网卡、调制解调器

为什么OSI模型不常用?

  • 过于复杂和理想化:将功能划分得过细,例如会话层和表示层在实际中很少被单独实现。
  • 历史竞争:在OSI标准制定完成时,更简单、实用的TCP/IP协议栈已经在互联网上被广泛部署和应用。

四、TCP/IP 五层模型

TCP/IP模型并非由官方机构设计,而是源于美国国防部的ARPANET项目 ,并在互联网的发展中成为事实上的国际标准 。它是一个协议簇,更注重实践而非严格的分层。我们常说的"五层模型"是为了教学和理解方便,将OSI的底两层保留,同时将OSI的上三层合并为"应用层",从而与TCP/IP协议栈对应起来。

TCP/IP 分层 核心功能与说明 对应OSI层 数据单元 常见协议 典型设备
应用层 将OSI的应用层、表示层、会话层功能合一。直接为用户的应用程序进程提供通信服务。 5, 6, 7 数据/报文 HTTP/HTTPS (网页)、FTP (文件传输)、SMTP/POP3 (邮件)、DNS (域名解析)、SSH 计算机、服务器
传输层 与OSI传输层功能完全一致。负责端到端的通信,确保数据可靠、有序、无差错地传输。 4 TCP (可靠,如网页、邮件)、UDP(高效,如DNS、视频流) 防火墙
网络层 与OSI网络层功能基本一致 。也称为网际层,是整个TCP/IP模型的核心,负责将数据包发往全球任何网络。 3 包/数据报 IP (核心)、ICMP (ping命令)、ARP(地址解析) 路由器(核心设备)
数据链路层 与OSI数据链路层功能基本一致。负责在同一个子网内,通过MAC地址将数据帧从一个设备传输到另一个相邻设备。 2 以太网Wi-Fi(IEEE 802.11)PPP 交换机网桥网卡
物理层 与OSI物理层功能完全一致。负责将帧中的比特流转换为物理信号(电信号、光信号、无线电波)在媒介中传输。 1 比特 - 集线器中继器、网线、光纤、无线AP

重要说明:

  1. TCP/IP四层模型 :当忽略物理层(即不关心具体传输介质)时,就变成了四层模型:应用层、传输层、网络层、网络接口层。其中"网络接口层"对应了OSI的数据链路层和物理层。
  2. 为什么TCP/IP模型是"实践的混合模型"? 因为它没有严格遵循OSI的七层划分,而是根据实际通信需求,将功能更紧凑地组合在一起,形成了以IP协议为核心的、高效且灵活的体系结构。

五、网络中的地址管理

1. IP 地址

  • 用于标识网络中不同主机的逻辑地址。
  • IPv4:32位,4字节,常用点分十进制表示(如 192.168.0.1)。
  • IPv6:128位,解决 IPv4 地址不足问题。

2. MAC 地址

  • 用于识别数据链路层中的设备。
  • 48位,6字节,十六进制表示(如 08:00:27:03:fb:19)。
  • 出厂时固化在网卡中,通常唯一(虚拟机除外,虚拟机不是真实的mac地址,可能会产生冲突),有些网卡支持用户配置mac地址

六、网络传输基本流程

数据传输流程

在网络传输的时候,发送方上层所要传送的数据会经过层层封装,每一层会加入自己的报头,形成一个新的数据报,然后交给下一层。对于下层来说,上层交付的新的数据报就是该层的有效载荷(有效数据),加上自已的报头,就形成了该层的报文。

在接收方收到一个报文后,他会进行层层拆封,底层根据自身的协议将报头拆分,将有效数据递给上层,层层拆封,最终拿到用户层所需要的真正的数据。

在宏观上,我们可以认为发送方和接收方在每一层都在进行传输数据。应用层传输给应用层,传输层传输给传输层,以此类推,因为每一层的数据在经过拆封和解封后,同一层拿到的有效载荷一定是一样的。

网络协议栈

在上方的网络传输基本流程中,发送方在进行层层封装,不断的将报头插入在数据头部,就像在一个栈里不断插入数据,而在接收方,不断的拆分报头,就像在一个栈里弹出数据,因此网络传输也可以称为网络协议栈传输数据。

网络协议的共性

  1. 报头和有效载荷分离的问题---解包
  2. 除了应用层,每一层协议,都必须解决一个问题,自己的有效载荷,应该要交给上层的那一种协议---分用,下层封装上层的协议

网络传输流程总结一下就是

  • 数据从应用层开始,逐层封装,每层添加首部信息。
  • 到达目标后,逐层解封装 (也称作分用),根据首部信息交给上层协议,

七、以太网(一种局域网)通信介绍

在局域网中,两台主机之间可以进行通信,他们具有标识主机的唯一性标识mac地址,下面介绍一下通信的大致过程

假设有5台主机A,B,C,D,E,他们处于同一个局域网,并且每一个主机的mac地址为macA,macB,以此类推。

主机B要给主机D发送信息"hello D",这个数据在经过网络协议栈的层层包装后,在某一层会加上自己的mac地址macA,以及目标主机的mac地址macD,并且将要发送的信息也封装在数据中。

当信息发送到局域网上,其他主机都可以接受到该消息,但是他们会比对该消息的目的mac地址macD,若不是自己的则直接丢弃,若是,则进一步进行拆封,交给自己的上层。

最终,D主机会识别到该信息的目标是自己,则会接受消息交给上层。

该方法的特点

  1. 以太网中,任何时刻,只允许一台机器向网络中发送数据

  2. 如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞

  3. 所有发送数据的主机要进行碰撞检测和碰撞避免

  4. 没有交换机的情况下,一个以太网就是一个碰撞域

  5. 局域网通信的过程中,主机对收到的报文确认是否是发给自己,是通过目标mac地址判定

八、跨网络通信

路由:不是发给自己局域网主机的报文,就推送给路由器。

路由器是应用在网络层的设备,他具有多张网卡,可以同时处于不同的局域网中,当不同的局域网进行通信是,就会经过路由器转发,就相当于两节两个大陆的"桥梁"。

在跨网络通信中,需要由路由器来进行转发,发送方要将数据发送给另一个局域网中的接收方,发送了数据后在发送方的局域网中无接收方的ip地址,此时就会交给路由器进行转发,路由器选择有目的ip的局域网并将数据交给该局域网,如果没有,那么会交给另外一个路由器,知道找到为止。此时就相当于路由器在该局域网中的通信,底层采用的协议对上层没有影响,无论是令牌环还是以太网或者其他局域网协议,他们都工作在各自的局域网中,最终交送的数据在网络层之上看到的都相同。也就相当于将局域网的协议进行了屏蔽,下层无论用什么,都不影响上层。

举一个例子

如图所示,存在2个局域网,第一个局域网中有用户A,C,D,第二个局域网中有B,E,F,他们由一个路由器相连。macA为A主机mac地址,BCD......类似。

上图省略了用户层和传输层的报头,因为在此只为解释跨网络通信基本原理

当用户A想将数据"你好"发送给另一个局域网中的用户B的时候,会经历6个过程,对应图中的标注

  1. 用户A将数据进行封装,在网络层封装了源IP地址(src)和目的IP地址(dst),在数据链路层封装了源mac地址和目的mac地址,这里的目的mac地址是指在链路层上的"下一站",并非接收方用户B的mac地址
  2. 用户A封装好的数据在链路上传播,期间用户C,用户D以及路由器的left网卡都可以接收到,但是他们会将目的mac地址与自身mac地址比对,最终只有路由器的left端口识别接收到了该数据。
  3. 路由器接收到数据后进行解封,分用,将数据链路层的报头拆掉,剩余数据交由网络层
  4. 路由器网络层识别到目的IP地址在右边的局域网中,于是将第3步得到的有效数据再次进行封装,此时源mac地址为送往目的局域网的端口的mac地址,即macright,目的mac地址为macB,封装好后交由网卡进行发送
  5. 由路由器转发的数据在用户B所在的局域网传播,传播方式与2类似,最终只有主机B接收到该数据
  6. 主机B进行拆封,最终比对目的IP地址为自己,则进一步拆封,拆掉网络层报头后,剩余数据交由上层处理。

从上述示例,我们可以看到,在网络层我们拿到的有效载荷都是一样的。在实际的tcp/ip协议的跨网络传输中,每一个主机在网络层以及网络层的上层拿到的报文(每一层的有效载荷)在整个网络中都是一样的。

因此ip可以屏蔽底层的网络差异,我们生活中所使用的网络都可以称为IP网络。

上述示例只经过了一个路由器转发,在实际中可能会经过多个路由器转发,因此数据在整个网络中的传输示意图如下:

相关推荐
疏狂难除2 小时前
spiderdemo第22题与webassembly的跨域
开发语言·javascript·爬虫·rust·wasm·mitmproxy
爱和冰阔落2 小时前
【Linux工具链】从跨平台适配到一键部署:yum多架构支持+Vim远程编辑+gcc交叉编译,解决多场景开发效率瓶颈
linux·运维·vim
WenGyyyL2 小时前
微信小程序开发——第二章:微信小程序开发环境搭建
开发语言·python·微信小程序
循环过三天2 小时前
3.2、Python-元组
开发语言·python
zzzsde2 小时前
【Linux】权限(2):文件权限的深入理解&&粘滞位
linux·运维·服务器
火龙谷3 小时前
dy自动化遇到的滑动问题
运维·自动化
一抓掉一大把3 小时前
RuoYI框架.net版本实现Redis数据隔离
java·开发语言
m0_748248023 小时前
揭开 C++ vector 底层面纱:从三指针模型到手写完整实现
开发语言·c++·算法
海盗猫鸥3 小时前
「C++」string类(2)常用接口
开发语言·c++