[Linux] 网络及其原理简单概述: 协议、协议分层、网络协议栈、局域网内部通信原理、不同局域网通信原理 简单介绍...
Linux
的相关介绍, 从本篇文章开始 就要进入网络部分了Linux
介绍的内容都是系统编程方面的Linux
系统编程, 其实基本都是为介绍网络做铺垫Linux
网络概述
网络发展
独立模式
网络互联
-
可靠性
即 如何能保证数据在长线中传输时, 不会发生数据丢失或损坏等问题呢?如果发生了怎么样弥补呢?
-
效率
即 如何保证数据在长的线中传输的速度要快一些呢?
-
如何寻找到对方
即 这么长的线, 如何找到传输数据的目的方呢?
局域网LAN
和 广域网WAN
WAN
等认识 “协议”
1
和0
, 有些可能使用信号的波峰波谷来表示1
和0
- 计算机生产厂商有很多
- 计算机操作系统, 也有很多
- 计算机网络硬件设备, 还是有很多
协议的分层
C/C++
和Linux
的过程中, 我们已经接触了许多分层的概念:Linux
进程时, 介绍了进程地址空间的概念Linux
文件系统时, 介绍了file_struct
, 知道了**Linux
中一切皆文件**-
对软进行分层的同时, 其实也对软件的问题进行了归类
进行分层之后, 其实已经将不同层的问题分开了, 因为 不同层之间基本上就是调用与被调用的关系
当某个功能出现问题之后, 可以通过定位功能的实现层级来确定问题的出现层级, 可以进一步定位问题
-
软件分层其实本质上就是: 软件上的解耦
软件分层之后, 层与层之间是调用与被调用之间的关系, 就将不同的功能之间进行了解耦
-
软件分层 也可以便于我们 进行代码分析
-
人, 用户层级
人与人之间通过一定的语言(协议)进行通信
-
设备层级
设备之间通过一定的协议 传输数字信号
网络协议栈
OSI
七层模型
OSI
(Open System Interconnection
, 开放系统互连), 七层网络模型称为开放式系统互联参考模型, 是一个逻辑上的定义和规范OSI
七层模型把网络从逻辑上分为了七层OSI
七层模型是一种框架性的设计方法, 其最主要的功能使就是帮助不同类型的主机实现数据传输;OSI
七层模型在框架上、逻辑设计上是非常的优秀的OSI
七层模型更是ISO
组织制定的一种描述网络协议和服务的标准OSI
七层模型进行开发, 实际上是不方便的OSI
七层模型的会话层, 会话层主要负责通信在何时建立, 何时断开的问题OSI
七层模型TCP/IP
四层(五层)模型TCP/IP
四层(五层)模型
TCP/IP
实际上是一组协议的代名词, 它包括许多的协议. 组成了TCP/IP
协议簇TCP/IP
通讯协议采用了5层的层级结构, 每一层都呼叫它的下一层所提供的网络来完成自己的需求-
物理层: 负责光/电信号的传递方式(物理)
比如, 现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的
WiFi
无线网使用电磁波等都属于物理层的概念物理层的能力决定了最大传输速率、传输距离、抗干扰性等
集线器(Hub)工作在物理层
-
数据链路层: 负责设备之间的数据帧的传送和识别
例如, 网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作
有以太网、令牌环网, 无线LAN等标准, 交换机(Switch)工作在数据链路层
-
网络层: 负责地址管理和路由选择
例如, 在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)
路由器(Router)工作在网路层
-
传输层: 负责两台主机之间的数据传输
如传输控制协议(TCP), 能够确保数据可靠的从源主机发送到目标主机
-
应用层: 负责应用程序间沟通
如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等
网络编程主要就是针对应用
TCP/IP
网络协议栈是5层的, 但是也可以对应OSI
七层模型:TCP/IP
四层模型**- 对于一台主机, 它的操作系统内核实现了传输层到物理层的内容;
- 对于一台路由器, 它实现了从网络层到物理层;
- 对于一台交换机, 它实现了从数据链路层到物理层;
- 对于集线器, 它只实现了物理层;
TCP/IP
网络协议栈 与 操作系统 的关系 **
Linux
网络概述TCP/IP
协议是操作系统中的一个模块, 网络协议栈 实际上是隶属于操作系统的TCP/IP
协议实现起来, 这是为了保证不同平台之间使用相同的标准进行通信TCP/IP
网络协议标准的平台, Windows
发送, Linux
接收, 那么对应的流程用图片表述, 整个过程大概是这样的:IO
操作都是这样的重新以计算机的视角看待 网络协议栈
- 提现在代码逻辑方面
- 提现在数据上
在网上买东西的时候, 比如一个键盘、鼠标、显示器等
并不是像 直接在超市买东西 那样, 直接得到所买的东西
而是需要有一个商家->快递->买家的过程
这是 在网上买东西时, 一个商品的运输过程
而且, 商家也并不会直接将单独的商品给快递公司, 快递公司也不是直接将商品给到买家的
商家, 首先会对商品进行包装
然后快递公司会对商品进行二次包装, 并且快递公司二次包装时, 还会添加一些额外的信息: 快递单号、发件信息、收件信息等
这些信息并不是给买家看的, 而是快递在运输时使用的
商品, 从商家到买家手中, 是经历了一些运输过程的, 并且 为了方便、安全的运输, 商家、快递公司会对商品添加一定的额外信息
最终到买家手中的才会是一个完整的商品
而, 买家收到的商品并不仅仅是一个目的商品, 还有许多的其他物品或信息
只不过这些物品和信息一般不需要买家关注
-
快递在运输过程中, 会多出快递单等信息
快递单实际上并不是给用户看的, 而是给快递公司内部 和 快递小哥看的
快递单上的数据, 就可以看做快递公司内部和快递小哥之间的协议
这一点, 可以映射出:
实际的网络通信中, 为了维护被传输的数据, 实际是需要在原数据的基础上添加其他数据(协议数据)的
这是协议在数据上的提现
而, 同层协议都认为自己与对方直接通信
就好比商家与买家直接交流, 只要快递正常运输, 这个过程双方是不在乎的, 也就不在乎快递单上的内容
即, 协议数据实际上是为了同层级通信而添加的
协议数据是为了同层级通信, 那么同层级就需要都能读取协议数据
那么每一个层级就需要制定自己的协议, 进而根据协议来添加同层级可以读取的协议数据
-
快递公司和快递小哥 会根据快递单上的数据 来运输商品: 快递是从哪里发货的, 通过什么途径, 送到什么地方等
这则映射了:
实际的网络通信中, 被传输的数据会根据协议数据, 通过设定、编写的代码逻辑, 在不同的主机之间进行传输(
可能感受不到)这是协议在代码逻辑上的提现
- 数据包(网络信息), 在主机内是 自顶向下 或 自底向上 流动的
- 同层协议, 都认为自己在和对方直接通信, 每一个层级就需要制定自己的协议
- 实际的网络通信中, 为了维护被传输的数据 实际是需要在原数据的基础上添加其他数据(协议数据)的
-
当主机一要向主机二传输 “你好” 信息时, 生成的信息数据包 在主机一内部的网络协议栈中 的变化 是这样的:
首先, 主机一产生的数据 在主机一内部的流向是从上到下的
并且, 传输过程中, 不同层会在接收到的上层数据包中添加本层的协议数据, 这部分数据是拼接在原始数据的开头部分的
-
每层添加的这部分协议数据, 被称为 报头
即, 不同层会为接收到的数据包添加报头
整个过程, 被称为对数据进行封装的过程
-
-
主机一 将数据传输到 主机二 时, 是先传输到主机二的物理层的
-
主机二 接收到数据之后, 数据在主机二内部的网络协议栈的变化是这样的:
首先, 接收到的数据包, 在主机二内部的网络协议栈中的流向是从下到上的
然后, 当前层会将发送方对应层添加的协议数据(报头)进行分析、解包, 然后将解包后的数据包, 向上层传输
这个动作, 其实就是同层协议可以看作是与对方直接通信
因为, 对应层只会针对相应的报头进行解包, 那么就可以看作是同层协议直接与对方通信
最终, 经过层层的解包, 还原出主机一发送的, 给用户看的数据
局域网内部通信原理简单介绍
本系列文章在介绍网络时, 非必要不会涉及物理层内容
局域网, 是对较小的地理范围内所建立的一组相互连接的计算机和网络设备的集合
局域网又被称为以太网
MAC
地址
MAC
地址, 是识别网络中物理网络设备的唯一标识符所有物理网络设备的
MAC
地址都是唯一的
MAC
地址由一个48
位的二进制数字组成, 一般表现为12
位的十六进制数在
Win
和Linux
都可以通过指令的方式查看 当前主机物理网络设备的MAC
地址:
Win
:打开
Windows Powershell
或者CMD
, 执行ipconfig /all
即可查看 当前主机网络的信息, 可以在其中找物理设备的MAC
地址:
Linux
:打开终端, 执行
ifconfig
, 即可查看 当前主机的部分网络信息:
MAC
物理地址物理网络设备的
MAC
地址是全球唯一的
不同局域网通信原理简单介绍
- 局域网一的主机, 将封装完毕的数据包通过以太网直接发送给路由器
- 路由器将以太网协议数据进行解包, 然后 向上传输到路由器自身的IP层
- 再将数据包向下传输到路由器自身的数据链路层, 添加局域网二数据链路层协议的协议数据 封装数据包
- 然后 再将封装好的数据包 直接传输到 局域网二的目标主机
- 进而完成局域网一与局域网二的通信
MAC
地址直接通信MAC
地址进行通信, 而是必须要通过IP
地址进行通信MAC
地址通常是杂乱无章的, 而 同一局域网下的主机的IP
地址, 通常是在一个子网范围内的IP
判断, 需要将接收到的数据包 向哪个局域网转发IP
为IPA
, 局域网二主机的IP
为IPB
, 即 目标IP
为IPB
IP
, 将数据包转发到子网范围包含目标IP
的局域网二中IP
层往上(包括IP
层), 发送主机和接收主机看到的数据是一模一样的IP
网络**数据包 封装的部分细节
- 应用层:
TFP
\HTTP
\HTTPS
… - 传输层:
TCP
\UDP
\ICMP
… - 网络层:
IP
\ARP
\RARP
…
有效载荷: 解包后, 需要向上层交付的数据包内容
-
一般而言, 任何报头属性里面, 一定要存在一些字段, 支持封装和解包
即, 报头中 一定要存在描述数据包哪些部分是报头, 哪些部分是有效载荷的字段
-
一般而言, 任何报头属性里而, 一定要存在一些字段, 支持分用
即, 报头中 一定要存在描述有效载荷需要交付给上层哪一个协议的字段
作者: 哈米d1ch 发表日期:2023 年 4 月 23 日