Linux网络编程:宏观网络体系

目录

网络基础概念

计算机网络背景

初识协议

协议分层

OSI七层模型

TCP/IP(五层)四层协议

再识协议

为什么会有TCP/IP协议?

什么是TCP/IP协议?

TCP/IP协议和OS的关系

所以究竟什么是协议?

网络传输基本流程

局域网网络传输流程图

局域网通信原理

认识MAC地址

基于两台主机解析网络传输

数据包的封装和分用

跨网络传输流程图

网络中的地址管理---认识IP地址

IP地址vsMAC地址


网络基础概念

计算机网络背景

独⽴模式: 计算机之间相互独⽴;


⽹络互联: 多台计算机连接在⼀起, 完成数据共享;

局域⽹LAN: 计算机数量更多了, 通过交换机和路由器连接在⼀起;


⼴域⽹WAN: 将远隔千⾥的计算机都连在⼀起;

所谓 "局域⽹" 和 "⼴域⽹" 只是⼀个相对的概念. ⽐如, 我们有 "天朝特⾊" 的⼴域⽹, 也可以看做⼀个⽐较⼤的局域⽹.
• 计算机是⼈的⼯具,⼈要协同⼯作,注定了⽹络的产⽣是必然的.

初识协议

协议,就像是一种约定。

生活例子:比如你是南方的,但是你考上了北方的大学,你为了给家里节省话费,你就跟家人做个约定,如果电话响了1声就是报平安,2声就是记得打生活费,3声就是有事情需要当面聊...... 而这种基于某种信号的决策,就是协议。

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

思考: 只要通信的两台主机, 约定好协议就可以了么?

• 定好协议,但是你⽤频率表⽰01,我⽤强弱表⽰01,就好⽐我⽤中国话,你⽤葡萄⽛语⼀样,虽

然⼤家可能遵守的⼀套通信规则,但是语⾔不同,即是订好了基本的协议,也是⽆法正常通信的。

所以,完善的协议,需要更多更细致的规定,并让参与的⼈都要遵守。

• 计算机⽣产⼚商有很多;

• 计算机操作系统, 也有很多;

• 计算机⽹络硬件设备, 还是有很多;

• 如何让这些不同⼚商之间⽣产的计算机能够相互顺畅的通信? 就需要有⼈站出来, 约定⼀个共同的

标准, ⼤家都来遵守, 这就是 ⽹络协议;

协议分层

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

好处:

• 在这个例⼦中, 我们的"协议"只有两层:语⾔层、通信设备层。

• 但是实际的⽹络通信协议,设计的会更加复杂, 需要分更多的层

• 但是通过上⾯的简单例⼦,我们是能理解,分层可以实现解耦合,让软件维护的成本更低

这样如果出现问题,或者需要更换设备,只需要处理对应层即可,方便维护。

理解各层之间直接通信

从上述例子我们还可以看出,虽然在打电话时我们并不是直接进行沟通的,但是我们可以认为我们是在直接进行沟通,并且这两台电话也不是直接在进行沟通的,数据经过电话后,还需要各种基站,各种电信网络来进行数据转发,但是这两台电话依旧可以认为是直接在和对方电话进行通信的。

因此对于网络协议我们需要有一个基本的认识:关于通信,同层协议可以认为自己在和对方层直接进行通信,从而达到简化对于网络协议栈的理解。

也就是说,在网络协议栈中我们可以认为通信双方的应用层之间直接在进行通信,也可以认为通信双方的传输层之间直接在进行通信,对于网络层和数据链路层也同样如此。

OSI七层模型

1.OSI(Open System Interconnection,开放系统互联)七层网络模型称为开方式系统互联参考模型,是一个逻辑上的定义和规范。
2.OSI把网络从逻辑上分为了七层,每一层都有相关的、相对应的物理设备,比如路由器,交换机。
3.OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输,比如手机和电视之间数据的传输。
4.OSI七层模型最大的优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
5.但是,OSI七层模型既复杂又不实用,所以后来在具体实现的时候就对其进行了调整,于是就有了我们现在看到的TCP/IP四层协议。

其实在⽹络⻆度,OSI定的协议7层模型其实⾮常完善,但是在实际操作的过程中,会话层、表⽰层是不可能接⼊到操作系统中的,所以在⼯程实践中,最终落地的是5层协议。

TCP/IP(五层)四层协议

TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.

TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求.

• 物理层: 负责光/电信号的传递⽅式. ⽐如现在以太⽹通⽤的⽹线(双绞 线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤, 现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等. 集线器(Hub)⼯作在物理层.

集线器:

电磁信号在长距离传输过程中信号是会衰减的,而集线器的主要功能就是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。

需要注意的是,集线器属于纯硬件网络底层设备,基本上不具有类似于交换机的"智能记忆"能力和"学习"能力,也不具备交换机所具有的MAC地址表,所以它发送数据时都是没有针对性的,而是采用广播方式发送,也就是说,当集线器要向某节点发送数据时,不是直接把数据发送到目的节点,而是把数据包发送到与集线器相连的所有节点。

以太网:

"以太网"这个名字实际来源于物理学,在早期的时候,很多科学家都认为任何信息的传播都是需要媒介的,因此物理学家们就认为光的传播也是需要媒介的。这时物理学家们就发现了一个问题:既然光能够从太阳传播到地球上,那么在这个传播的过程中一定需要某种媒介,但太阳和地球之间不是绝对真空的状态吗?

此时物理学家们就提出了一个"以太假说",认为宇宙空间并不是真空的,而是填充满了一种叫做"以太"的物质的,此时"以太"就可以作为光传播的媒介。但后来经过实验后发现,"以太"这种物质实际上是不存在的。

其中在这个故事线当中有两个人是与计算机学科相关的,一个人叫做图灵,另一个叫做冯诺依曼,这两个人当时也是参与了这场讨论的,因为他们不仅是计算机科学家,同时也是数学家。

经过后来的发展,在局域网产生之后就需要对局域网进行命名,而在局域网命名的时候人们就将其命名为"以太网"。因为我们曾经在物理学上认为"以太"就是传送物质的介质,也就是说"以太"是具有某种通信能力的,虽然"以太"在物理学上验证是不存在的,但现在在计算机领域我们做出来了这样一种东西,它也是能够传播物质(信息)的,同时也为了纪念之前的"以太假说",于是早期的局域网标准就被命名为了"以太网"。

• 数据链路层: 负责设备之间的数据帧的传送和识别. 例如⽹卡设备的驱动、帧同步(就是说从⽹线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作。有以太⽹、令牌环⽹, ⽆线LAN等标准. 交换机(Switch)⼯作在数据链路层.

• ⽹络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识⼀台主机, 并通过路由表的⽅式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)⼯作在⽹路层.

• 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到⽬标主机.

• 应⽤层: 负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远程访问协议(Telnet)等. 我们的⽹络编程主要就是针对应⽤层.

⼀般⽽⾔

• 对于⼀台主机, 它的操作系统内核实现了从传输层到物理层的内容;

• 对于⼀台路由器, 它实现了从⽹络层到物理层;

• 对于⼀台交换机, 它实现了从数据链路层到物理层;

• 对于集线器, 它只实现了物理层;

但这并不是绝对的,比如很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)。

再识协议

为什么会有TCP/IP协议?

⾸先,即便是单机,你的计算机内部,其实都是存在协议的,⽐如:其他设备和内存通信,会有内

存协议。其他设备和磁盘通信,会有磁盘相关的协议,⽐如:SATA,IDE,SCSI等。只不过我们感知不到罢了。⽽且这些协议都在本地主机各⾃的硬件中,通信的成本、问题⽐较少。

其次,数据的传输距离变长了,必然会产生以下问题:

1.如何保证数据准确地传达到下一个设备?(数据链路层)

2.如何定位发送的目标主机?(ip网络层)

3.长距离传输的数据丢失问题(tcp传输层)

4.如何处理发来的数据(应用层)

所以本质就是通信主机距离变远了,需要新的协议解决这些问题。

什么是TCP/IP协议?

• TCP/IP协议的本质是⼀种解决⽅案

• TCP/IP协议能分层,前提是因为问题们本⾝能分层

TCP/IP协议和OS的关系

所以究竟什么是协议?

OS主要是由C语言写的,而OS里的协议是非常多的,这也就意味着协议也是要被OS管理的。那么协议是如何描述的?因为OS主要由C语言编写,所以协议本质上就是结构体。

问题:主机B能识别data,并且准确提取a=10,b=20,c=30吗?

回答:答案是肯定的!因为双⽅都有同样的结构体类型struct protocol。也就是说,⽤同样

的代码实现协议,⽤同样的⾃定义数据类型,天然就具有"共识",能够识别对⽅发来的数

据,这不就是约定吗?

关于协议的朴素理解: 所谓协议,就是通信双⽅都认识的结构化的数据类型

因为协议栈是分层的,所以,每层都有双⽅都有协议,同层之间,互相可以认识对⽅的协

议。

网络传输基本流程

局域网网络传输流程图

局域网通信原理

• ⾸先回答,两台主机在同⼀个局域⽹,是否能够直接通信?

答案是当然可以。

• 原理类似上课

同学们在教室里上课,老师点了张三的名字,所有人都听到了,但是只有张三会回应,其他人将老师的信号丢弃了。同一个局域网里的主机,一台主机发送消息给目标主机的时候其实其他主机也收到了,但其他主机识别到信息不是发给自己的于是丢弃。

那么其他主机是怎么直到信息不是发给自己的?那就要谈mac地址了

• 每台主机在局域⽹上,要有唯⼀的标识来保证主机的唯⼀性:mac地址

认识MAC地址

• MAC地址⽤来识别数据链路层中相连的节点;

• ⻓度为 48 ⽐特位, 即 6 个字节. ⼀般⽤ 16 进制数字加上冒号的形式来表⽰(例如:

08:00:27:03:fb:19)

• 在⽹卡出⼚时就确定了, 不能修改. mac地址通常是唯⼀的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些⽹卡⽀持⽤⼾配置mac地址).

• windows>ipconfig /all

在xshell中可以用ifconfig命令查看自己主机的mac和ip

局域⽹通信的过程中,主机对收到的报⽂确认是否是发给⾃⼰的,是通过⽬标mac地址判定

• 以太⽹中,任何时刻,只允许⼀台机器向⽹络中发送数据

• 如果有多台同时发送,会发⽣数据⼲扰,我们称之为数据碰撞(就像是水中涟漪)

• 所有发送数据的主机要进⾏碰撞检测和碰撞避免(很好理解,环境太混乱,不可能所有信息都接收,只需要判断是不是我要的信号即可。要进行碰撞检测和碰撞避免的潜台词其实就是,以太网是一个共享资源,每次只允许一台主机,使用以太网,向目标主机发送数据,碰撞检测和碰撞避免就是一种变相的"锁"!

• 没有交换机的情况下,⼀个以太⽹就是⼀个碰撞域

• 局域⽹通信的过程中,主机对收到的报⽂确认是否是发给⾃⼰的,是通过⽬标mac地址判定

• 这⾥可以试着从系统⻆度来理解局域⽹通信原理

基于两台主机解析网络传输

初步明⽩了局域⽹通信原理,再来看同⼀个⽹段内的两台主机进⾏发送消息的过程


⽽其中每层都有协议,所以当我进⾏上述传输流程的时候,要进⾏ 封装 和 解包
网络通信就是一个贯穿协议栈的过程,自顶向下封装,自底向上进行解包。
为啥叫栈,其实就是封装和解包是一个类似入栈出栈的过程。

下边我们来明确一些概念

• 报头部分,就是对应协议层的结构体字段,我们⼀般叫做报头

• 除了报头,剩下的叫做有效载荷

• 故,报⽂ = 报头 + 有效载荷

然后,我们在明确⼀下不同层的完整报⽂的叫法

• 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报

(datagram),在链路层叫做帧(frame).

• 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装

(Encapsulation).

• ⾸部信息中包含了⼀些类似于⾸部有多⻓, 载荷(payload)有多⻓, 上层协议是什么等信息.

• 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部, 根据⾸部中的 "上层

协议字段" 将数据交给对应的上层协议处理.

最后,整体复盘一下:

我们这里以两台主机进行文件传输为例,此时各层对应的协议如下:

两台计算机通过TCP/IP协议通讯的过程如下:

在⽹络传输的过程中,数据不是直接发送给对⽅主机的,⽽是先要⾃顶向下将数据交付给下层协议,最后由底层发送,然后由对⽅主机的底层来进⾏接受,在⾃底向上进⾏向上交付,所以说网络通信,看上去就像是两台主机在彼此通信,本质是协议栈在进行通信。

下⾯是⼀张⽰意图。

数据包的封装和分用

任何协议(应用层除外)都要解决两个问题:

a.将报头和有效载荷进行分离(解包)

b.把数据交付给上层的哪一种协议的问题(分用)

数据封装过程

数据分用过程

跨网络传输流程图

网络中的地址管理---认识IP地址

IP协议有两个版本,分别是IPv4和IPv6。IPv4用32个比特位来标识IP地址,而IPv6用128个比特位来标识IP地址。

• IP 地址是在 IP 协议中, ⽤来标识⽹络中不同主机的地址;

• 对于 IPv4 来说, IP 地址是⼀个 4 字节, 32 位的整数;

• 我们通常也使⽤ "点分⼗进制" 的字符串表⽰ IP 地址, 例如 192.168.0.1 ; ⽤点分割的每⼀个

数字表⽰⼀个字节, 范围是 0 - 255 ;

IP地址vsMAC地址

mac地址是保证局域网中主机的唯一性

ip地址是保证主机全网的唯一性

这样做的有什么意义?既然ip地址都是全网唯一了,为啥又要一个mac地址保证局域网中主机的唯一性?

其实,mac是数据链路层,ip地址是网络层,这种分层的设计

跨⽹段的主机的数据传输. 数据从⼀台计算机到另⼀台计算机传输过程中要经过⼀个或多个路由器.

下⾯是⼀张⽰意图

  1. 链路层寻址逻辑
  • 跨网判定:通过子网掩码与目标IP做AND运算,比对是否同子网
  • 网关转发:若跨网→封装网关MAC(通过ARP获取)而非目标主机MAC
  • 本质:MAC只解决"当前物理网络下一跳"问题,IP负责端到端路由
  1. 路由器的协议转换能力
  • 多协议支持:物理层/数据链路层驱动栈(以太网/Wi-Fi/PPP等)
  • 报头转换:拆解入接口二层帧头→路由决策→按出接口协议重构帧头
  • 关键价值:实现异构网络互联(如光纤入户转Wi-Fi)
  1. 网络分层抽象的意义
  • 屏蔽差异:上层应用无需感知底层是5G还是光纤
  • 统一接口:IP层看到的是统一的逻辑网络,差异由路由器消化
  • 设备兼容:只要实现TCP/IP协议栈,任何设备都可接入(物联网基石)

网络通信的过程通过路由器传输是一个不断封装解包的过程

• IP⽹络层存在的意义:提供⽹络虚拟层,让世界的所有⽹络都是 IP ⽹络,屏蔽最底层⽹络的差异。

此篇完。

相关推荐
想不明白的过度思考者3 小时前
JavaEE初阶——TCP/IP协议栈:从原理到实战
java·网络·网络协议·tcp/ip·java-ee
人邮异步社区4 小时前
内网攻防实战图谱:从红队视角构建安全对抗体系
网络·安全·web安全
猫林老师4 小时前
OpenHarmony南向开发环境搭建 - 深入理解Ubuntu、DevEco Device Tool与HPM
linux·运维·ubuntu·harmonyos·openharmony
碱化钾5 小时前
学习笔记——GPU训练
笔记·学习
爱装代码的小瓶子5 小时前
Linux下的权限与文件
linux·运维·服务器
ggaofeng6 小时前
linux中mount的本质是什么?自己如何实现一个伪文件系统
linux·mount·自己实现伪文件系统
敲上瘾6 小时前
Linux系统C++开发环境搭建工具(二)—— etcd 使用指南
linux·c++·etcd
wan5555cn6 小时前
国产电脑操作系统与硬盘兼容性现状分析:挑战与前景评估
人工智能·笔记·深度学习·机器学习·电脑·生活
派森先生6 小时前
sk08.【scikit-learn基础】--『监督学习』之K近邻算法
学习·scikit-learn·近邻算法