【Linux】:Linux网络协议

再识协议

上面的内容,我们只是懂了一些基本概念,还是达不到我们的目标,下面我们再次重

新理解协议和协议分层。 为什么要有 TCP/IP 协议?

• 首先,即便是单机,你的计算机内部,其实都是存在协议的,比如:其他设备和

内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,比如:

SATA,IDE,SCSI 等。只不过我们感知不到罢了。而且这些协议都在本地主机各自

的硬件中,通信的成本、问题比较少。

其次,网络通信最大的特点就是主机之间变远了。任何通信特征的变化,一定会

带来新的问题,有问题就得解决问题,所以需要新的协议咯

所以,为什么要有 TCP/IP 协议?本质就是通信主机距离变远了

什么是 TCP/IP 协议?

• TCP/IP 协议的本质是一种解决方案

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

TCP/IP 协议与操作系统的关系(宏观上,怎么实现的)

所以究竟什么是协议?

比特就业课

比特就业课

11 / 26

• 截止到目前,我们还没接触过任何协议,但是如何朴素的理解协议,我们已经可

以试试了。

• OS 源代码一般都是用 C/C++语言写的。

下面,仔细看看下面的图

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

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

用同样的代码实现协议,用同样的自定义数据类型,天然就具有"共识",能够识别

对方发来的数据,这不就是约定吗?

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

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

方的协议。

• 网络购物,快递单的例子

网络传输基本流程

局域网网络传输流程图

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

• 首先回答,两台主机在同一个局域网,是否能够直接通信?是的

• 原理类似上课

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

认识 MAC 地址

MAC 地址用来识别数据链路层中相连的节点; • 长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:

08:00:27:03:fb:19) • 在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地

址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址). 后面我们详细谈论数据链路层的时候,会谈 mac 帧协议,此处我们做一个了解即可。

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

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

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

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

• 局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标

mac 地址判定

• 这里可以试着从系统角度来理解局域网通信原理

初步明白了局域网通信原理,再来看同一个网段内的两台主机进行发送消息的过程

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

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

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

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

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

数据报 (datagram),在链路层叫做帧(frame). • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部

(header),称为封装(Encapsulation). • 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是

什么等信息. • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理. 最后,在整体复盘一下:

在网络传输的过程中,数据不是直接发送给对方主机的,而是先要自定向下将数据交

付给下层协议,最后由底层发送,然后由对方主机的底层来进行接受,在自底向上进

行向上交付,下面是一张示意图。 数据包封装和分用

下图为数据封装的过程

跨网络传输流程图

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

IP 协议有两个版本, IPv4 和 IPv6. 我们整个的课程, 凡是提到 IP 协议, 没有特殊说明的, 默认都是指 IPv4

• IP 地址是在 IP 协议中, 用来标识网络中不同主机的地址; • 对于 IPv4 来说, IP 地址是一个 4 字节, 32 位的整数; • 我们通常也使用 "点分十进制" 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用点

分割的每一个数字表示一个字节, 范围是 0 - 255;

跨网段的主机的数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或

多个路由器. 下面是一张示意图

首先理解一下 IP 地址的意义

• 为什么要去目标主机,先要走路由器?

• 目的 IP 的意义

对比 IP 地址和 Mac 地址的区别

• IP 地址在整个路由过程中,一直不变(目前,我们只能这样说明,后面在修正) • Mac 地址一直在变

• 目的 IP 是一种长远目标,Mac 是下一阶段目标,目的 IP 是路径选择的重要依

据,mac 地址是局域网转发的重要依据

提炼 IP 网络的意义和网络通信的宏观流程

IP 网络层存在的意义:提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽

最底层网络的差异

相关推荐
d0ublεU0x001 分钟前
【生存技能】ubuntu 24.04 如何pip install
linux·ubuntu·pip
Javis21114 分钟前
【Linux高级全栈开发】2.1高性能网络-网络编程——2.1.1 网络IO与IO多路复用——select/poll/epoll
linux·运维·网络
画中有画17 分钟前
一种安全不泄漏、高效、免费的自动化脚本平台
运维·安全·自动化·自动化脚本
suyukangchen24 分钟前
深入理解 Linux 阻塞IO与Socket数据结构
linux·数据结构·python
1001101_QIA28 分钟前
【QT】UDP通讯本地调试
网络·网络协议·udp
yong158585534342 分钟前
[SIGPIPE 错误] 一个 Linux socket 程序,没有任何报错打印直接退出程序
linux·服务器·网络·c++
南隅。2 小时前
【Linux】用户管理
linux
撸码到无法自拔3 小时前
云计算-私有云-私有云服务运维
运维·云计算
云边有个稻草人3 小时前
【Linux系统】第四节—详解yum+vim
linux·vim·yum·软件包管理器·linux软件生态·linux编辑器-vim使⽤·yum具体操作
极小狐5 小时前
如何使用极狐GitLab 软件包仓库功能托管 maven?
java·运维·数据库·安全·c#·gitlab·maven