计算机网络初步认识

1:网络为何而生

计算机最初的形态是独立模式:每台终端各自存储数据、运行业务,多个人使用时只能排队等待,效率极低。就像小松用终端 A 处理业务 1 时,小竹和小梅只能依次等候,资源无法共享,协作更是无从谈起。

网络互联的核心,就是打破单机的孤岛状态,让多台计算机连接在一起实现数据共享。随着计算机数量增多,交换机、路由器成为连接核心,由此诞生了两种基础网络形态:

  • 局域网(LAN) :小范围的网络连接,比如办公室、家里的网络,依靠交换机实现内部设备互通;
  • 广域网(WAN) :将远隔千里的局域网连接起来,比如东京、大阪的局域网通过多台路由器互通,甚至能连接到海外的洛杉矶网络。

其实局域网和广域网只是相对概念,没有绝对的边界,比如我们常说的 "全国性广域网",在更大的视角下也可看作一个大型局域网。而人需要协同工作的本质,注定了网络的产生是必然结果 ------ 计算机是人的工具,工具的互联,本质是人的协作需求的延伸。

2:网络协议

多台计算机要顺畅通信,光有物理连接远远不够,就像两个人交流,不仅要有说话的渠道,还要说同一种语言、遵守同一套沟通规则,这就是协议的本质:通信双方的约定。

计算机之间的传输媒介是光信号和电信号,通过频率、强弱表示 0 和 1 的二进制信息,要传递复杂信息,就必须约定好数据格式、信号解读方式等细节。如果 A 用频率表示 01,B 用强弱表示 01,哪怕都想通信,也会像 "我说中文,你说葡萄牙语" 一样无法沟通。

而现实中,计算机的厂商、操作系统、硬件设备千差万别,要让不同设备互通,就需要统一的协议标准,由业界公认的组织制定,让所有参与者遵守。比如 IEEE 制定了局域网的 802 系列标准、ISO 提出了经典的 OSI 七层模型、IETF 主导了 TCP/IP 协议族的开发,这些组织成为了网络世界的 "规则制定者"。(有兴趣可以自己了解这些组织机构)

3:分层结构

协议本质是运行在计算机上的软件,而软件设计的核心思路之一是模块化、解耦合 ,协议也因此被设计为分层结构------ 这是网络基础中最关键的设计思想,没有之一。

用一个简单的例子理解分层:我们用电话沟通,可分为语言层通信设备层。语言层负责用汉语 / 英语交流,通信设备层负责电话 / 无线电的信号传输。如果想把电话换成无线电,只需修改通信设备层,语言层完全不用变;如果想和外国人交流,只需把汉语换成英语,设备层也无需改动。分层让每一层的功能独立,修改一层不会影响其他层,大幅降低了维护成本。

网络通信的协议分层比这个例子更复杂,主流的分层模型有两种:

1:OSI七层协议

OSI 七层模型是网络通信的逻辑规范,把网络从下到上分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,每一层有明确的功能和对应的物理设备:
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放
式系统互联参考模型,是一个逻辑上的定义和规范;
把网络从逻辑上分为了 7 层. 每一层都有相关、相对应的物理设备,比如路由
器,交换机;
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型
的主机实现数据传输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,
理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可
靠的通讯;
但是, 它既复杂又不实用; 所以我们按照 TCP/IP 四层模型来讲解

OSI 模型的优点是概念清晰、功能划分明确,是网络理论的基础,但缺点也很明显:过于复杂,会话层、表示层难以在操作系统中落地,因此工程实践中很少直接使用。

2:TCP/IP 模型:实际应用的核心框架

TCP/IP 是网络通信的实际落地标准 ,是一组协议的总称(TCP/IP 协议簇),主流分为五层模型 (物理层、数据链路层、网络层、传输层、应用层),也常因忽略物理层(硬件层面)称为四层模型,这是我们学习和开发的核心依据,各层功能和核心设备清晰且实用:

分层 核心功能 核心设备 / 协议
应用层 负责应用程序间沟通,如 FTP(文件传输)、HTTP(网页访问)、SMTP(邮件) 各类应用协议
传输层 管理两台主机间的数据传输,确保可靠 / 高效传输 TCP、UDP,端口号
网络层 地址管理(IP 地址)与路由选择,规划数据传输路径 IP、ICMP,路由器
数据链路层 设备间数据帧的传送、识别,冲突检测、差错校验 以太网协议,交换机
物理层 光 / 电信号的传递方式,定义传输介质(网线、光纤、电磁波) 集线器,网线 / 光纤

不同的网络设备实现的分层范围不同:主机的操作系统实现了从传输层到物理层,路由器实现了从网络层到物理层,交换机实现了从数据链路层到物理层,集线器仅实现物理层。

4:网络传输的核心过程:封装与解包

理解了协议分层,就能看懂网络数据的传输全过程 :数据从应用层出发,自上而下经过每一层,每层都会给数据加上自己的报头 (本层的协议信息,如地址、长度),这个过程叫封装 ;数据到达目标主机后,自下而上经过每一层,每层剥掉自己的报头,把数据交给上层,这个过程叫解包,最终数据到达应用层,被用户程序接收.

举个例子:你在聊天软件发送 "你好",这个字符串就是有效载荷(真正要传递的内容):

  1. 应用层:给 "你好" 加上聊天协议的报头,封装成应用层数据;
  2. 传输层:加上 TCP/UDP 报头(含端口号),封装成
  3. 网络层:加上 IP 报头(含源 / 目的 IP),封装成数据报
  4. 数据链路层:加上以太网报头(含源 / 目的 MAC 地址)和尾部,封装成
  5. 物理层:把帧转换成电 / 光信号,通过传输介质发送。

目标主机接收到信号后,从物理层到应用层依次解包,每层剥掉对应的报头,最终 "你好" 被传递到目标聊天软件,完成通信。

这里要注意:不同层对封装后的数据包有不同称谓 ------ 传输层叫段,网络层叫数据报,数据链路层叫帧,核心都是 "报头 + 有效载荷"。

5:网络地址管理MAC地址和IP地址

数据要准确传递,必须有唯一的标识,网络中最核心的两个标识是MAC 地址IP 地址,二者分工不同,缺一不可。

1:MAC地址,数据链路层的唯一标识

MAC 地址用来识别数据链路层中相连的节点,是网卡出厂时固化的地址,长度 48 位(6 个字节),通常用 16 进制表示(如 08:00:27:03:fb:19),理论上全球唯一。

MAC 地址的作用是局域网内的转发依据,就像快递的 "小区门牌号",在同一个局域网中,数据通过 MAC 地址找到目标设备。但 MAC 地址有局限性:只能在局域网内生效,跨局域网无法识别。

2:IP地址,网络层的全局标识

IP 地址(主要是 IPv4)是网络层的地址,用来标识网络中不同的主机,长度 32 位(4 个字节),用点分十进制表示(如 192.168.0.1),每个字节范围 0-255。

IP 地址的作用是跨网络的路由依据,就像快递的 "收件人手机号 + 省市区地址",数据从一台主机到另一台跨网段主机,需要通过路由器根据 IP 地址规划传输路径,找到目标网络。

3:MAC和IP的核心区别

  • IP 地址:长远目标,在整个路由过程中保持不变,是路径选择的依据;
  • MAC 地址:下一阶段目标,每经过一个路由器都会重新封装,更换下一跳的 MAC 地址,是局域网内转发的依据。

简单说:要把数据从北京的主机发到上海的主机,依靠 IP 地址找到上海的目标网络;数据到达上海的局域网后,依靠 MAC 地址找到目标主机。


然后结合封装与解包,体现路由器解包和重新封装的特点


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

6:认识socket,网络编程初步

数据传输到目标主机并不是终点,因为最终使用数据的是主机上的进程 (如浏览器、QQ、迅雷),主机上同时运行着多个进程,如何把数据精准交付给目标进程?这就需要端口号 ,以及由 IP 地址 + 端口号组成的Socket

1:端口号,传输层的进程标识

端口号是传输层的协议内容,是 2 字节(16 位)的整数,范围 0-65535,用来标识主机上的唯一网络进程,告诉操作系统 "这份数据要交给哪个进程处理"。

端口号的范围划分有明确规定:

  • 0-1023:知名端口号,为常用应用层协议预留,如 HTTP 的 80 端口、FTP 的 21 端口、SSH 的 22 端口,固定不变;
  • 1024-65535:动态分配端口号,为客户端程序预留,由操作系统在程序启动时动态分配。

端口号的核心规则:一个端口号只能被一个进程占用,一个进程可以绑定多个端口号。这里要区分端口号和进程 ID(PID):PID 是系统对进程的全局标识,端口号是网络层面的进程标识,分开设计让系统进程管理和网络模块解耦合,更灵活。

2:socket网络进程的唯一标识

IP 地址 标识互联网中的唯一主机,端口号 标识主机上的唯一网络进程,二者组合就是Socket(套接字)IP地址+端口号,这是互联网中进程的唯一标识

网络通信的本质,其实是两个互联网进程之间的通信 ,用{源IP, 源端口号, 目的IP, 目的端口号}这一四元组,就能唯一标识互联网中一次通信的两个进程,确保数据不会发错对象。

3:传输层的两大协议,TCP和UDP

传输层是连接网络层和应用层的核心,为应用层提供数据传输服务,最典型的两个协议是 TCP 和 UDP,二者特性截然不同,适用于不同的业务场景:

TCP(传输控制协议):有连接、可靠传输、面向字节流。建立连接后才会传输数据,能保证数据无丢失、无重复、按序到达,适合对可靠性要求高的场景,如聊天、文件传输、网页访问;

UDP(用户数据报协议):无连接、不可靠传输、面向数据报。无需建立连接,直接发送数据,不保证数据到达,传输效率高,适合对实时性要求高的场景,如直播、视频通话、游戏。

4:网络字节序

计算机内存中的多字节数据有大端小端之分(大端:低地址存高字节;小端:低地址存低字节),不同主机的字节序可能不同,直接传输会导致数据解读错误。

TCP/IP 协议规定:网络数据流采用大端字节序 ,无论主机是大端还是小端,发送数据时都要转换为大端,接收数据时再转换为主机字节序。为了让程序具有可移植性,系统提供了专门的转换函数:htonl/htons(主机字节序转网络字节序)、ntohl/ntohs(网络字节序转主机字节序),开发时直接调用即可。

相关推荐
浩子智控1 小时前
zynq嵌入式开发(2)—基本开发测试实例
linux·嵌入式硬件·硬件架构
闻道且行之1 小时前
Nginx 安装、做成服务及 HTTPS 配置全流程
linux·运维·nginx·https
昵称只能一个月修改一次。。。2 小时前
Linux系统编程:网络编程
linux·服务器·网络
猫猫的小茶馆2 小时前
【Linux 驱动开发】Linux 内核启动过程详解
linux·c语言·arm开发·驱动开发·stm32·单片机·mcu
人工智能训练2 小时前
Qwen3.5 开源全解析:从 0.8B 到 397B,代际升级 + 全场景选型指南
linux·运维·服务器·人工智能·开源·ai编程
蜕变的小白2 小时前
Linux系统编程-->UDP编程:C/S模型实战详解
linux·运维·网络协议·udp
linuxxx1102 小时前
让openclaw使用系统命令:“rm“, “mkdir“, “touch“, “ls“, “cat“, “echo“
linux·服务器·windows
ldj20202 小时前
Linux系统开放端口命令
linux
草莓熊Lotso2 小时前
MySQL 数据库基础入门:从概念到实战
linux·运维·服务器·数据库·c++·人工智能·mysql