前言
欢迎观看Linux系列文章!!第1篇主要讲述了网络协议的基本概念和网络传输流程,其中提到了OSI七层模型和TCP/IP协议,以及局域网传播和跨网段传播的基本流程。
网络协议
什么是网络协议
本质是一种约定,用于快速形成共识作,减少通信成本。
计算机之间的传输媒介是光电信号,通过频率或者强弱来表示0和1的这样的信息。要想传递不同的信息,就需要约定好双方的数据格式。
但是计算机生产厂商很多,操作系统很多,网络硬件设备也很多,为了在这些不同之间找到一个公约数,需要有人带头,约定共同的标准,所有人都来遵守。从此,这个约定才能真正成为网络协议。
能定制协议标准的组织和公司(了解即可)
他们只生产标准,但是不写代码实现。
1、国际标准化组织:
IEEE、ISO(定义了OSI网络通信七层模型)、ITU
2、 区域标准化组织:
ETSI、ASTAP
3、公司
主要是自研的各种标准软件协议栈
4、民间国际组织
IETF
5、官方机构
FCC
协议分层
协议本身也是软件,为了更好的进行模块化,解耦合,也是被设计成层状结构的。
软件分层的好处
1️⃣关注点分离
每层只负责一类职责,比如界面展示、业务规则、数据存取,代码逻辑更清晰。
2️⃣降低耦合
层与层之间通过接口交互,上层不依赖下层的具体实现,修改一层时影响范围更小。
3️⃣提高可维护性
出问题时容易定位到某一层;修改需求时通常只需改对应层,不必全盘重构。
4️⃣增强可测试性
可以单独测试业务逻辑层,并通过 Mock 替换数据层或外部服务,单元测试更容易。
5️⃣便于替换技术栈
换数据库、换前端框架、换通信协议时,只要接口不变,其他层可以少改甚至不改。
6️⃣促进复用
通用能力如下沉到基础层或服务层,可被多个模块、多个应用复用。
7️⃣支持团队协作
团队可按层分工,只要提前约定好接口,前后端、业务开发、数据开发可以并行推进。
8️⃣易于扩展
新增功能可在相应层添加,比如新增一种支付方式只需扩展业务层和接口层。
9️⃣统一处理横切关注点
认证、授权、日志、事务、缓存、异常处理等可以在层边界统一实现,避免散落各处。
🔟提升可移植性和演进能力
OSI七层模型
最大的优点是将服务、接口和协议这三个概念明确区分,理论完整,但是复杂又不实用。
| 分层名称 | 分层功能 |
| 物理层 | 传输原始比特流,定义电气、机械、接口标准 |
| 数据链路层 | 成帧、MAC 寻址、差错检测、介质访问控制 |
| 网络层 | 逻辑寻址、路由选择、分组转发 |
| 传输层 | 端到端通信、可靠性、流量控制、端口复用 |
| 会话层 | 建立、管理、终止会话,同步与检查点 |
| 表示层 | 数据格式转换、加密/解密、压缩/解压 |
| 应用层 | 为用户应用提供网络服务 |
实际生产,主要还是TCP/IP协议
TCP/IP协议
| 分层名称 | 分层功能 | 典型案例 | 典型设备 |
| 物理层 | 传输原始比特流,定义电气、机械、接口标准 | 现在以太⽹通⽤的⽹线(双绞 线)、早期以太⽹采⽤的的同 轴电缆(现在主要⽤于有线电视)、光纤, 现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等。 | 集线器(Hub)⼯作在物理层。 |
| 数据链路层 | 成帧、MAC 寻址、差错检测、介质访问控制 | ⽹卡设备的驱动、帧同步(就是说从⽹线上 检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作有以太⽹、令牌环⽹, ⽆线LAN等标准。 | 交换机(Switch)⼯作在数据链路层。 |
| 网络层 | 逻辑寻址、路由选择、分组转发 | 在IP协议中, 通过IP地址来标识⼀台主机, 并通过路由表的⽅式规划出两台主机之间的数据传输的线路(路由)。 | 路由器(Router)⼯作在⽹络层。 |
| 传输层 | 端到端通信、可靠性、流量控制、端口复用 | 传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到⽬标主机。 | ---------------- |
| 应用层 | 为用户应用提供网络服务 | 简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远程访问协议(Telnet)等。 | ----------------- |
有时会把物理层和数据链路层合为一层——网络接口层。
为什么使用TCP/IP协议
本地通信和网络通信本质上都是设备到设备的通信,计算机内部的冯诺依曼结构也是一个网络结构。唯一的区别就是距离变长了。
距离变长会引发新的问题:
1.主机之间怎么处理和使用数据?
2.数据更容易丢失,怎么办?
3.主机间更难定位,怎么办?
4.数据当下要立马去哪个设备?
TCP/IP协议就是以上问题的一个解决方案,通过协议分层,解决不同种类的问题。
应用层解决问题1、传输层解决问题2、传输层解决问题3、网络接口层解决问题4。
什么是TCP/IP协议
本身是一种网络长距离通信的解决方案。
该协议可以分层,是因为出现的问题也可以分层。
TCP/IP协议与操作系统的关系
网卡(网络接口层)就是底层硬件;
数据链路层在驱动程序中;
网络层和传输层两层被集成在内核中;
应用层在OS上层,由用户实现。
不同的操作系统之间可能内部层级结构和Linux有出入,但是只要都使用了TCP/IP协议,就可以做到互相通信。
这个协议最核心的就是传输层和网络层,最著名的协议分别是TCP协议和IP协议,所以就把这个协议统称为TCP/IP协议。
由图可知,从上至下所有层级,整个协议栈涉及硬件、驱动、os、用户,所以这个协议必需IT各行各业进行支持和配合。
深层理解协议
协议在代码层面,本质上就是一个约定好的结构体。
约定好数据结构体对象DATA的内部结构一致,在发送和接受数据之后,因为主机之间对数据DATA的结构体定义相同,因此就可以快速建立共识,完成数据解析。
协议栈是分层的,每层都有双方,都有协议。同层之间也可以互相认识对方的协议。
网络传输基本流程
局域网(以太网)网络通信原理
局域网通信时在内部是透明公开的,通信内容会让所有的人收到,但是只有指定的主机会对收到的数据进行响应处理(泛洪)。
· 在以太网中,任何时刻只允许一台机器像网络中发送数据。
· 多台主机同时发送时会出现数据干扰,我们叫作数据碰撞。
·没有交换机的情况下,一个以太网就是一个碰撞域。
· 所有发送数据的主机要进行碰撞检测和碰撞避免。
所以,一个局域网内主机越多,网速可能就会变得越慢,因为要花时间做碰撞检测和碰撞避免,而且数据干扰也越难避免。
以太网是主机之间共享的资源,所以可以说以太网就是临界资源,这些碰撞避免和检测算法就是为了保证主机之间通信的互斥性。
要指定一个主机,就需要每台主机有一个唯一的标识——MAC地址。
补充:通信方式除了以太网,还有令牌环网和无线lan。
令牌环网就是在以太网通信的基础上加入一个令牌,令牌会传递,拿到令牌的才可以进行通信。这个令牌其实就是一个互斥锁。
无线lan可以认为是无线版的以太网。
该补充了解即可。
MAC地址
MAC地址,即物理地址,用来识别数据链路层中相连的节点;
格式:长度48bit(即6byte),一般用16进制和冒号的形式来表示(如12:34:56:78:90:AB)。
MAC地址具有唯一性,通常是全球唯一的,但是一般只需要在一个子网内是唯一的就行了。
数据的封装和解包分用
主机间通信,本质上是两个协议栈在通信,而且每一层之间都要有协议。所以发送报文的时候,每一层都要加上每一层的协议信息在报头。
封装时:每一层会给报文添加一个报头,这个报头叫协议报头,除了报头之外剩下的部分都叫有效载荷,再把报文发送给下层。
解包和分用时:把和自己同层同协议的协议报头和有效载荷进行分离,把报头留下进行解析,把有效载荷发送给上层。
1️⃣先不考虑应用层协议,对于任何协议而言:1、报头必须能做到可以和有效载荷进行分离;2、报文中必须包含如何将自己的有效载荷交付给上一层的具体协议。
2️⃣当发送完整报文到网络上之后,在链路层分离出链路层报头后,如果解析出目标主机MAC和本机不符,报文就会立刻被丢弃,不会再进行解包了。
3️⃣封装和解包的过程顺序跟栈操作是一样的。封装的过程其实是入栈操作,依次将报头入栈;解包的过程其实是出栈操作,依次将报头出栈。这就是为什么要把协议做成栈结构,叫作协议栈的原因。
4️⃣
应用层的报文——请求与应答;
传输层的报文——数据段;
网络层的报文——数据报;
链路层的报文——数据帧。
5️⃣网卡的混杂模式:即使目标网卡MAC地址不匹配,也会把报文继续向上解包。这也是很多抓包工具的工作原理。
为什么要自顶向下封装?
因为网卡在最下层,而且发送报文只能由网卡完成,同时操作系统是网卡的管理者,所以必须贯穿操作系统栈和协议栈。
跨网络传输流程
网络中的地址管理——IP地址
IP地址用来在全球范围内唯一标识主机。(公网IP)
IP地址有两个版本:IPv4和IPv6。IPv4地址有4byte,IPv6地址有6byte,IPv6是用来解决IPv4地址严重不足的问题。但是因为一些现实因素,现在依旧还是IPv4为主,用NAT网络转换来应对地址不足的问题。
和MAC地址不同,虽然都是用来标识唯一性的,两者用来标识目标,IP更远更广,MAC更近,主要在局域网中唯一标识。
当主机A向主机B发送报文时,发现目标主机B不在当前局域网内,就会把报文发送给路由器,路由器也是一个主机。路由器解析报文之后,能帮你找到你目标主机的目标子网,然后重新封装后,再发送给目标子网中,再目标子网中的主机B就能收到报文,且比对MAC地址之后匹配,最终发送成功(大致传输方向如此,细节会在以后说)。
而在路由过程中,IP地址一直不变,MAC地址一直在变,MAC地址只在局域网中有效。
IP网络层的意义:提供网络虚拟层,让世界的所有网络都是IP网络,屏蔽最底层网络的差异。
查看自己主机的IP和MAC
Windows:
ipconfig /allLinux:
ifconfig❤~~本文完结!!感谢观看!!接下来更精彩!!欢迎来我博客做客~~❤