网络基础1

目录

初识协议

协议分层

软件分层的好处

OSI七层模型

[TCP/IP 五层(或四层)模型](#TCP/IP 五层(或四层)模型)

再谈协议

[为什么要有 TCP/IP 协议?](#为什么要有 TCP/IP 协议?)

[TCP/IP 协议与操作系统的关系](#TCP/IP 协议与操作系统的关系)

所以究竟什么是协议?

网络传输基本流程

[认识 MAC 地址](#认识 MAC 地址)

局域网(以太网为例)通信原理

报文的传输


我们来学习网络基础

网络笼统的分成局域网和广域网。局域网 LAN: 计算机数量更多了,通过交换机和路由器连接在一起,广域网 WAN: 将远隔千里的计算机都连在一起。

初识协议

"协议" 是一种约定,计算机之间的传输媒介是光信号和电信号,通过 "频率" 和 "强弱" 来表示 0 和 1 这样的 信息,要想传递各种不同的信息,就需要约定好双方的数据格式。

只要通信的两台主机,约定好协议就可以了么,显然不可能。

所以指定了通信规则的约定仍然需要更细致的约定,并让参与的人都遵守,能制定细致的网络协议的都是有影响力的组织或者大公司或者官方机构。所以什么是网络协议:

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

在计算机体系里面协议无处不在。

协议分层

协议本质也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计成为 层状结构的。

所有的问题基本都可以通过新增一层软件层来解决,上面提到了协议是软件,根据同一个协议设计出来的不同的网络格式和实现方式,但正是协议的标准化 使得这些异构网络能够互相通信。然而,能否成功通信还取决于协议实现的一致性兼容性,反正关于协议约定的部分我们都有,都保持一致。

软件分层的好处

软件分层(Layered Architecture)是一种将系统划分为多个层级的设计方法,每一层专注于特定的功能,并通过明确定义的接口与其他层交互。这种架构模式在操作系统、网络协议、企业级应用等领域广泛应用。

以打电话为例,语言层这层和通信设备层这层是分开的,我们打电话只需要向电话说出我们要说的东西,别人也这么说这是语言层的交流,但是实际上我们相互交流的那些话都是通过下层的通信设备层的那些设备进行传输的,这些设备遵循电话机协议实现,所以可以互通,我们在拿着电话交流的时候是不需要管下层那些设备有没有传输的,下层的那些设备是不需要管我们讲了什么的,反正只负责传输,将庞大系统分解为多个层级,每层只需关注自身职责(如网络协议中,应用层处理业务逻辑,传输层管理可靠性),软件分层实际上就降低了设计的复杂度。

打电话的例子从小白视角:同层协议是直接通信的,工程师视角认为同层协议没有直接通信,是各自使用下层提供的结构能力完成的通信,当然底层除外。

既然层与层之间关系不大,而且只关心本层的通信,所以分层就是实现了高内聚(同层相互联系紧密),低耦合(不同层之间依赖关系弱化),分层就是解耦合的有效方式提高了代码的可维护性,降低了维护成本。

OSI七层模型

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放 式系统互联参考模型,是一个逻辑上的定义和规范:

把网络从逻辑上分为了 7 层. 每一层都有相关、相对应的物理设备,比如路由 器,交换机。

OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型 的主机实现数据传输。

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

但是, 它既复杂又不实用; 所以我们按照 TCP/IP 四层模型来讲解。

其实在网络角度,OSI 定的协议 7 层模型其实非常完善,但是在实际操作的过程 中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的是 5 层协议。

TCP/IP 五层(或四层)模型

TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇。TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完 成自己的需求。

4层和5层的区别就是多算了一个应用层,此时应用层就讲原本的OSI七层模型里面的应用层/表示层/会话层合并了,但是无论是4层协议还是5层本质还是遵循了原本7层的设计理念。

再谈协议

为什么要有 TCP/IP 协议?

TCP/IP协议主要是解决传输距离变远的问题,假设主机A向主机B发送信息,如果距离比较近那随便发都不会丢的,但是假设距离太远了,网络通信的最大特点就是主机之间变远了,变远的话数据传输丢失等的其他情况的概率就大了,加上距离变远了网上那么多主机,怎么定位并找到主机C,怎么办,加上发数据不是目的只是手段,用数据才是目的,主机C怎么知道我发出去的数据怎么被处理,被使用呢?这么多问题有物理层的问题,链路层的问题,网络层的问题这些问题无不是传输距离变远引起的,怎么解决,为了解决这些问题引入了TCP/IP协议族,所以协议是这些通信时出现问题的解决方案,我们说协议栈是分层的,是不同种类的问题导致了协议栈的分层。

一下输出两条结论:

这么多协议,操作系统需要管理这些协议的,遵循先描述再组织的原则,所以操作系统里面肯定有一个struct。。。来描述协议的,所以网络是操作系统里面的一个模块,网络是属于操作系统的,冯诺依曼体系本质就是网络。

上面这个图还有一个细节,就是主机A需要先将信息发送到路由器才能发送到处于不同网段的其他主机,所以这个主机和路由器是在同一个网段的。

TCP/IP 协议与操作系统的关系

TCP/IP 协议与操作系统的关系可以用 "灵魂与身体" 来类比------协议是通信的规则(灵魂),操作系统是规则的执行者(身体)。

由此我们可以看出同层协议无论在任何主机都是相同的,如果这些主机可以互相通信的话,这是前提。操作系统是协议的执行者,网络属于操作系统的一部分,所以TCP/IP网络都是用C写的。

所以究竟什么是协议?

所谓协议就是通信双方都认识的结构化的数据类型,协议就是一个结构体

windows和linux的主机可以互相通信本质就是网络层协议一样,协议一样那实现的代码肯定一样,只是底层不同,所以协议的结构体类型肯定一样。

网络传输基本流程

每台主机在局域网上,要有唯一的标识来保证主机的唯一性:mac 地址,这个mac地址是局部域的唯一性,当主机上的报文通过交换机/路由器来到不同的网段会有所变化,主要是不同的局域网的起始位置发生变化。

认识 MAC 地址

上面这个ether后面就是mac地址

局域网(以太网为例)通信原理

以太网中,任何时刻,只允许一台机器向网络中发送数据,如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞,所有发送数据的主机要进行碰撞检测和碰撞避免,没有交换机的情况下,一个以太网就是一个碰撞域,那报文是这么在局域网发生到接收的呢,假设A主机发送一个报文,报文发出时,其报头会携带报头+有效载荷,有效载荷就是数据,那报头会记录这个报文要发送的源网卡mac地址和目标的网卡的mac地址,所以每个报文都是从上层的软件层发出,然后经由最下面的网卡发出并接受,所以网卡是硬件,主要还是用户想发,接收到报文时也是底层的硬件(网卡)先接受到,然后再经由操作系统往上传给用户,A主机将报文发送到局域网里面,那里面的所有的主机都同时接收到了,他们的网卡会进行地址匹配,匹配成功就交付操作系统往上传,匹配失败了就丢弃,所以通信时一个报文被丢弃上层的软件是不知道的,所有的主机发送报文都是通过以太网,所以以太网是公共资源,是临界资源,这样就不允许多个主机同时发送报文,我们为了保证临界资源的原子性,不能一个报文还没有处理完,又发来了一个,多个主机发出报文时这种情况会发生碰撞,怎么识别碰撞的呢,每一台主机都是通过总线连接的,如果一次只是发送一个那电压会比较小,当多个设备在同一时间、同一共享介质(如早期以太网的同轴电缆)上发送数据时,信号会相互干扰,导致数据损坏。那如果多个报文同时处理时电压不就更大了吗,通过总线的电压大小的是否突破阈值进行判断是否发生碰撞,其实现代网络设备和协议栈的设计核心目标之一就是高效并发处理多个报文,这种碰撞的情况会越来越少。

那用户B的操作系统怎么知道对应的网卡里面有数据了,当网卡里面有数据的时候会发出中断,执行中断向量表里面的中断方法,使操作系统陷入内核进行处理报文。网卡不断的接收数据,然后操作系统再取数据交给上层软件,这样如果操作系统慢了,或者中断发慢了或者网卡接收太快了都可能导致主机内数据积压,这种接收再转让操作系统向上传递的机制对于操作系统来说就是生产者-消费者模型!!!

报文的传输

报头部分,就是对应协议层的结构体字段,我们一般叫做报头。除了报头,剩下的叫做有效载荷,

故,报文 = 报头 + 有效载荷。

报文从用户产生下来一路经过各自层,会携带各自层的报头,作为上层的报头会成为下层识别的对象,因为在封装时各层只会关系上层和本层的信息,没有上一层的报头就不会封装本层的报头,报文在数据链路层(如以太网)的帧头中会携带网卡(MAC)地址,但仅适用于同一局域网内的直接通信,然后一条包含了所有层以及源mac地址,和源/目表网卡地址的报头就产生了,发送到另一个主机,另一个主机发现目标网卡地址就是我自己将进行自下而上的解包了,也是一层一层的脱去报头。

所以,在网络传输的过程中,数据不是直接发送给对方主机的,而是先要自定向下将数据交 付给下层协议,最后由底层发送,然后由对方主机的底层来进行接受,在自底向上进 行向上交付,所以同一个局域网内的传输会经过封装+解包+分用的过程

分用(Demultiplexing) 是网络协议栈中的关键机制,用于将接收到(解包)的数据正确分发到目标应用或协议 。它的核心逻辑是:
"通过报文中的标识字段(如端口号、协议类型),决定数据应该交给哪个上层协议或应用程序处理。"

要完全使得报头和有效载荷分离后才能进行将有效载荷分给不同的目标程序/应用使用。

相关推荐
一一Null1 小时前
关于手机取证中逻辑采集与系统备份的差异
服务器·网络·智能手机
码农新猿类1 小时前
服务器本地搭建
linux·网络·c++
SlientICE2 小时前
TCP是什么?不需要!使用ESP32网络层直接通信!
网络·单片机·网络协议·tcp/ip
小李超勇的..4 小时前
SOME/IP
网络·网络协议·tcp/ip
EasyDSS5 小时前
WebRTC实时通话EasyRTC嵌入式音视频通信SDK,构建智慧医疗远程会诊高效方案
大数据·网络·网络协议·音视频
左灯右行的爱情5 小时前
计算机网络-传输层基础概念
网络·计算机网络·php
群联云防护小杜5 小时前
隐藏源站IP与SD-WAN回源优化:高防架构的核心实践
网络·分布式·网络协议·tcp/ip·安全·架构·ddos
老马啸西风6 小时前
Neo4j GDS-09-neo4j GDS 库中路径搜索算法实现
网络·数据库·算法·云原生·中间件·neo4j·图数据库
Go高并发架构_王工6 小时前
基于 GoFrame 框架的电子邮件发送实践:优势、特色与经验分享
网络·经验分享·golang
SlientICE6 小时前
预防WIFI攻击,保证网络安全
网络·安全·php