【Linux】网络基础

目录

[一. 计算机网络背景](#一. 计算机网络背景)

[二. 协议](#二. 协议)

[1. 网络协议](#1. 网络协议)

[2. OSI 七层模型](#2. OSI 七层模型)

[3. TCP/IP 五层模型](#3. TCP/IP 五层模型)

[三. 网络传输基本流程](#三. 网络传输基本流程)

[1. TCP/IP 协议](#1. TCP/IP 协议)

[2. MAC 地址](#2. MAC 地址)

[3. 数据封装和分用](#3. 数据封装和分用)

[4. 认识 IP 地址](#4. 认识 IP 地址)

[三. 认识端口号](#三. 认识端口号)

[1. 端口号划分](#1. 端口号划分)

[2. 端口号与进程 ID的关系](#2. 端口号与进程 ID的关系)

[4. 理解 socket](#4. 理解 socket)

[四. 传输层的典型代表](#四. 传输层的典型代表)

[1. TCP 协议](#1. TCP 协议)

[2. UDP 协议](#2. UDP 协议)

[五. 网络字节序](#五. 网络字节序)

总结:


一. 计算机网络背景

在早期,计算机体积庞大价格昂贵,一台计算机仅能供少数人在固定的地点进行使用,无法进行不同设备之间的数据互通,是一座巨大的信息孤岛。在 1950 年代,美国军方和科研机构开始尝试进行**"点对点连接"** ,将多台终端电话线连接到一台中心计算机 ,实现**"多终端共享单机资源"** ,本质是**"集中式连接"** 。到了 20 世纪初,由文顿・瑟夫(Vint Cerf)和罗伯特・卡恩(Robert Kahn)设计的 TCP/IP 协议 ,形成了互联网雏形,TCP 主要对数据进行"打包",IP 负责寻址和路由 ,由此实现了网络互通。1990 年,万维网出现,将互联网从军事领域的专业工具,变成了大众服务,提出了三大技术,URL 统一资源定位符用于定位资源,HTTP 用于传递文字图片链接等资源,HTML 可以构建可视化网络界面。再后来,就是万物互联时代,4G/5G 出现让互联网从连接人,到连接物体设备等等。


在最开始进行软件开发的时候,每一台主机实现一个业务功能,开发效率低等待时间长。如下图, 业务 B 需要等待业务 A 开发完毕后才能开始进行,主机间的数据无法互相传递,这就导致开发效率极致低下。

后来,随着发展,我们开始使用终端服务器的方法,将一台主机作为终端服务器,主机 ABC 之间可以相互切换,共享数据由终端服务器进行管理,提升了开发效率

再后来,开发主机越来越多,切换频率越来越高,我们便在其中加上一层中间层,将寻找主机切换主机的任务分离解耦出去,于是就有了路由器和交换机。这些计算机就组成了最初的局域网。

随着局域网不断增加,如何将这些一个一个的局域网连接在一起呢?按照上面的方法,我们只需要更多更大的路由器交换机即可。一个一个的局域网相连接便有了广域网。

二. 协议

协议本质是一种约定,在计算机中,协议就是对于信息传输的语法语义时序等一系列的统一规则,只有彼此之间达成了共识,我们才能完成通信。就好比两个语言不互通的人无法进行交流,语言不互通无法知道对方想要表达的内容。

1. 网络协议

由上述可得出,计算机之间要通信,就需要有人站出来制定一个规则,大家必须遵守这个规则进行通信,于是便有了网络协议

我们用打电话的例子进行类比

我们网络通信就像是打电话,在上层通信的两人需要使用共同的语言才能进行交流,下方的设备之间也要遵循共同的设备协议才能进行通信传输,网络的层状结构 将每一层进行了解耦划分,每一层遵循每一层的协议,提高了可维护性。

网络是一个层状结构 ,是操作系统的一部分,通过层状结构,对每一个重要部分进行解耦,各个部分各司其职,涉及到软硬件互相通信

2. OSI 七层模型

OSI 七层模型(Open Systems Interconnection Reference Model,开放系统互连参考模型)是由国际标准化组织(ISO)在 1984 年提出的网络通信分层规范 ,它将复杂的网络通信过程划分为 7 个独立的功能层级,每一层专注于解决特定的通信问题,通过标准化的接口实现层间协作。在 OSI 模型中,数据从发送方到接收方的传输遵循 "封装→传输→解封装" 的流程,每一层会对数据添加本层的 "头部信息"(类似快递包裹的标签)。

OSI 七层模型是理论上的理想模型 ,而实际互联网中广泛使用的是TCP/IP 四层模型(或简化为五层模型)。

3. TCP/IP 五层模型

TCP/IP协议是互联网核心通信协议套件,采用分层结构,每层结构负责协议特定功能,层与层之间通过接口协作,形成通信流程。下面我们就从下到上的了解每层结构

物理层: 负责光/电信号的传输,通过光电信号的**"频率"和"强弱"来表示数据0和1**,从而达到数据传输的效果。物理层的能力决定了数据传输的最大速率最大距离抗干扰性强弱。

数据链路层: 与物理硬件直接对接的一层,主要进行设备间的数据帧的传送和识别,他会将上层传下来的数据进行打包,做成数据帧。它会负责将帧进行封装发往相邻路由器,认识 MAC 地址,进行冲突控制,差错修复等问题。交换机工作在此处

网络层:负责地址管理和路由选择,决策数据的传输方向路由器工作在此处。

传输层:负责两台主机之间的数据传输,保证数据的可靠性。

应用层:负责应用程序间沟通,**为用户进程提供服务,**针对不同的应用将数据传输到此处后进行不同的处理。

我们用快递运输的例子来简单理解一下这几层,我们从上到下的理解

应用层 ,我们确定了要寄什么物品;传输层 保证我们将物品安全的送到快递站;网络层 相当于快递站为我们的快递确定好运输线路怎么运输;数据链路层 决定了我们的快递最后一公里怎么运输,将地址确定到我们的小区;物理层负责将快递运输出去。

三. 网络传输基本流程

在计算机的内部都是存在协议的,我们的各种硬件都会遵循着不同的协议,我们进行本地通信时,这些协议都是我们硬件内部的东西,通信成本小,问题也少。

当我们主机之间距离变远了,网络通信就会带来新问题。

在传输的过程中,彼此的传输信号会被干扰导致数据损坏的问题,传输数据时谁来接收这份数据,怎么传输这份数据等等。

1. TCP/IP 协议

TCP/IP 协议本质是一种解决方案,解决数据怎么发,发到哪,如何确保送达等问题。

IP 相当于地址的地址导航 ,给每一份联网的设备分配唯一一份 IP 地址,并负责在复杂网络中选择数据传输的路径。TCP 协议 相当于运输保障系统,负责与收数据的对象交互确认,将数据拆分重组。

2. MAC 地址

mac 地址用来识别数据链路层中的节点;长度为 48 位,6 个字节,一般用 16 进制数字加冒号形式来表示(08:00:27:03:fb:19)

mac 地址是网络设备出厂时固化在网卡中的唯一物理标识 ,相当于网络中的身份证号码 ,用于在数据链路层识别和通信。它的核心作用就是确保在"近距离"网络中,确保数据精准传递到目标设备而不会发送给其他设备。

在以太网中,任何时刻只允许一台机器向网络中发送数据(锁使用),当同时有多台设备发送时就会产生数据干扰,我们称之为数据碰撞,所有发送主机都要进行碰撞检测和碰撞避免。发送数据时,每份主机都会受到这样一份数据,主机通过 mac 地址进行判定,该数据是否是发送给自己的,若不是发送给自己的,主机就不进行接收。

3. 数据封装和分用

明白了局域网通信原理,我们来看一个网段内两台主机发送信息的过程

数据由上层用户进行传输,进行一层一层的封装,通过硬件设备传到主机2当中,接着从下至上进行数据的解包,最后用户 B 成功的拿到了数据。

每层协议在拿到上一层打包的数据后,都会对该层数据进行报头添加 ;将数据传输到设备后,会将报文进行解析,一步一步的进行拆解最后上层解包拿到数据。相当于每一层都解析对应的报头 ,这也对应了我们上面说的层状结构的解耦

简单说,传递的数据信息就是有效载荷 ,经过每一层加工进行报头添加,有效载荷和报头就组成了报文。

4. 认识 IP 地址

IP 协议分两种,一个是 IPv4 另一个是 IPv6,在市面上较为常用的是 IPv4 协议。IPv6 由于与 IPv4 不兼容,迁移成本高的原因其流通速度和普及速度相对较慢。所以我们后续所讲的 IP 地址默认为 IPv4

IPv4 是一个 4 字节,32位整数的地址。我们通常用"点分十进制"的字符串来表示该地址(192.168.0.1),每一个数字范围是 0 - 255

IP 地址是一种长远目标Mac 地址是下一阶段目标。IP 地址负责规划好起点和终点,Mac 地址负责从每一个阶段的起点和终点。

三. 认识端口号

端口号(port)是传输层协议的内容,端口号是一个2字节16位的整数,端口号用来标识进程,告诉操作系统当前数据要交给谁进行处理,IP 地址 + 端口号 能够标识网络上某一台主机的某一个进程,一个端口号只能被一个进程所占用

1. 端口号划分

0 - 1023 知名端口号,一般是固定端口号。1024 - 65535 操作系统动态分配的端口号,用与客户端程序端口号。

2. 端口号与进程 ID的关系

**一个端口号只能绑定一个进程,但是一个进程可以绑定多个端口号。**当一个进程上有多个端口号时,后端服务器可以同时监听多个端口。

4. 理解 socket

有了上面的知识我们得知,IP 地址能标识互联网中唯一一台主机,port 端口号能标识主机中唯一一个进程,那么 IP + port 的形式就能标识互联网中唯一一个进程 ,那么网络通信的本质就是进程间通信,我们将 IP + port 的组合叫做套接字 socket

socket 的英文翻译就是插口插座的意思,类似网络通信,用插线连接起两边的插口。

四. 传输层的典型代表

1. TCP 协议

TCP 协议是传输层协议,是由系统调用的。它是有连接的,需要三次握手四次挥手,安全性高;它是可靠传输;面向字节流的,传输是可以分片重组的。

2. UDP 协议

UDP 协议也是传输层协议,由系统调用。它是无连接的,直接发送数据,速度快效率高;它不是可靠传输;面向数据报传输,将一份一份完整的数据报进行传输

五. 网络字节序

网络字节序时 TCP/IP 协议中规定的统一数据字节排序方式,用于解决不同计算机架构在多字节数据传输时的字节顺序冲突问题。**在 TCP/IP 中统一采用大端字节序,即低地址高字节的方式。**为了保证输出主机和接收主机字节序一致,我们使用系统接口进行大小端转换。

函数名 功能 适用场景
htons() 主机字节序 → 网络字节序(16 位整数) 端口号(16 位)转换
ntohs() 网络字节序 → 主机字节序(16 位整数) 从网络接收端口号后转换
htonl() 主机字节序 → 网络字节序(32 位整数) IP 地址(32 位)转换
ntohl() 网络字节序 → 主机字节序(32 位整数) 从网络接收 IP 地址后转换

总结:

至此,我们已系统梳理了网络编程中的四大核心支柱 ------ 端口号与进程 ID 的关联逻辑、TCP 与 UDP 的传输特性差异、网络字节序的统一标准, 以及常用 Socket 接口的使用规范。这些概念并非孤立存在,而是相互衔接、共同支撑起网络通信的完整流程:从进程通过 Socket 绑定端口获取通信 "身份",到遵循网络字节序解决跨架构数据解析难题,再根据业务需求选择 TCP 的可靠传输或 UDP的实时高效,最终通过标准化的接口实现数据的发送与接收。

相关推荐
拉拉拉拉拉拉拉马3 小时前
在ssh远程连接的autodl服务器(中国无root权限服务器)上使用copilt的Claude模型
运维·服务器·ssh
敲上瘾3 小时前
HTTP协议工作原理与生产环境服务器搭建实战
服务器·网络·c++·网络协议·http
伞啊伞3 小时前
自动化运维工具 Ansible 集中化管理服务器
运维·自动化·ansible
一只花里胡哨的程序猿4 小时前
odoo18应用、队列服务器分离(SSHFS)
运维·服务器·odoo
风车带走过往4 小时前
部署开源PPTagent 生成工具
linux·开源
范桂飓4 小时前
在 Windows GPU 机器上运行 Linux CUDA
linux·运维·windows
小跌—4 小时前
Linux:线程池
linux
深思慎考4 小时前
LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(4——通过jsoncpp库建立搜索模块)
linux·c++·搜索引擎
虚伪的空想家4 小时前
生产环境K8S的etcd备份脚本
运维·容器·kubernetes·脚本·备份·etcd