网络原理初识:从“几台电脑各干各的”到“数据包跨网段飞奔”的一整套思维模型

网络原理初识:从"几台电脑各干各的"到"数据包跨网段飞奔"的一整套思维模型

网络这东西,乍看像"把网线插上就能上网",细看其实是一套严密的工程体系:要能定位主机、定位进程、定义数据格式、在不同设备间转发、还能在接收端把数据交还给正确的应用程序。把这些关键概念按一条线串起来:网络互连 → LAN/WAN → IP/端口 → 协议与五元组 → 协议分层(OSI/TCP-IP)→ 设备分层位置 → 封装与分用。


1. 网络是怎么"从无到有"的:独立模式 → 网络互连

最早的计算机是独立模式 :每台计算机彼此相互独立,各自存软件和数据,协作效率低。随着业务需要协同、共享数据与软件,"多台计算机协同完成业务"变成刚需,于是出现了网络互连 :把多台计算机连接在一起实现数据共享。

这里有个非常重要的等价关系:

数据共享的本质 = 网络数据传输 = 网络通信。

网络互连按规模大致分为两类:局域网(LAN)和广域网(WAN)。


2. 局域网 LAN:本地私有网,内网的典型形态

**局域网(LAN, Local Area Network)**的关键词是 Local:本地、局部组建的私有网络。局域网内主机之间方便通信,所以也常被叫"内网";如果两个局域网之间没有连接,它们是无法直接通信的。

来看局域网常见的组网方式(从简单到标准):

  1. 网线直连
  2. 通过集线器(Hub)
  3. 通过交换机(Switch)
  4. 交换机 + 路由器混合组网(更接近真实企业网络)


3. 广域网 WAN:路由器把多个 LAN 串起来,互联网是它的子集

**广域网(WAN, Wide Area Network)**通常由路由器把多个局域网连接起来,形成物理范围更大的网络。广域网内部的各个局域网可以看作它的子网。

一个很现实的例子:北/中/南分公司甚至海外分公司通过专线互联,这就属于广域网。

如果是全球公共型广域网,就叫互联网 (公网/外网),它可以视为广域网的一个子集。并且要注意:LAN/WAN 其实是相对概念------某些"不那么严格"的语境里,人们说 WAN 往往就是指互联网。


4. 网络通信到底在"通信"什么:进程到进程,而不是"电脑到电脑"

网络互连的目的,是实现网络通信。更精确地说:网络主机中的不同进程之间,通过网络传输数据

于是问题来了:

  • 如何定位"是哪台主机"?
  • 如何定位"主机上的哪个进程"?
  • 如何让对方知道"这串 0/1 表示什么格式的数据"?

答案对应三件套:IP 地址 + 端口号 + 协议


5. IP 地址:用来定位主机(就像快递的收货地址)

5.1 概念

IP 地址用来标识网络主机(以及路由器等网络设备)的网络地址,本质就是"定位主机在哪里"。

5.2 格式

IP 地址是一个 32 位二进制数 ,通常分为 4 个 8 位(4 字节),再用"点分十进制"写成 a.b.c.d 形式,其中每段是 0~255 的整数,例如 100.4.5.6


6. 端口号:用来定位进程(就像快递的收货人)

6.1 概念

IP 只能定位到一台主机,但主机上有很多进程在收发数据。端口号就是用来标识"主机上的哪个进程在通信"。

6.2 格式

端口号是 0~65535 的数字。进程通过绑定端口来发送/接收网络数据。

到这里你已经能"定位到唯一进程"了:IP + 端口可以唯一标识一个通信端点。但仍缺一块:数据格式


7. 协议:规定"数据怎么长",否则 0/1 没法解释

网络传输的介质是光信号/电信号,通过"频率、强弱"等方式表达 0 和 1。要传输文本、图片、视频等不同信息,必须约定数据格式。

**网络协议(protocol)**就是网络通信中所有设备必须共同遵守的一组约定/规则(如何建立连接、如何识别、数据包格式等)。它最终体现为:在网络上传输的数据包长什么样

为什么协议这么重要?因为现实世界里有很多厂商、很多操作系统、很多网络设备------要让它们互通,就必须有统一标准。


8. 五元组:一次网络通信的"身份证"

在 TCP/IP 体系里,常用五元组标识一次网络通信:

  1. 源 IP(源主机)
  2. 源端口(源主机进程)
  3. 目的 IP(目的主机)
  4. 目的端口(目的主机进程)
  5. 协议号(双方约定的数据格式,比如 TCP/UDP)

这套东西特别像快递系统:地址 + 收件人 + 运输规则,一条链路就被唯一确定了。

8.1 在 Windows 上怎么看五元组

来看一个非常实用的命令:

  • netstat -ano:查看网络连接信息(包含 IP/端口/状态/PID)
  • 需要过滤时:netstat -ano | findstr <过滤字符串>(常按端口号或 PID 过滤)

9. 协议为什么要分层:像"面向接口编程",降低复杂度

网络通信比"打电话"复杂得多,所以协议通常按层次来定义。分层的最大好处,是类似"面向接口编程":每层只需要对下层提出需求、对上层提供服务,中间实现细节被封装起来

对使用方来说:只管调用接口,不用关心底层怎么实现。

对提供方来说:隐藏复杂实现,只暴露稳定接口。

结果是:更易扩展、更易维护。


10. OSI 七层:逻辑框架很完整,但工程上太重

OSI(Open System Interconnection)七层模型是逻辑上的定义与规范,把网络从逻辑上分为 7 层,用来帮助不同类型主机实现数据传输。

但结论也很直接:OSI 七层复杂且不实用 ,没有成为主流落地实现。现实网络更多参考它的思想,真正普及的是 TCP/IP 分层模型。


11. TCP/IP 五层(或四层):真实世界的主流分层

TCP/IP 是一组协议簇的代名词。常用的实现模型是 五层 (有时把物理层弱化成 四层)。每层调用下层提供的能力来完成自己的任务:

11.1 应用层

负责应用程序间通信,例如 SMTP、FTP、Telnet 等;日常网络编程主要面对这一层。

11.2 传输层

负责两台主机之间的数据传输。TCP 提供可靠传输能力(保证数据可靠从源到目标)。

11.3 网络层

负责地址管理与路由选择。IP 用 IP 地址标识主机,路由表规划路径;路由器工作在网络层

11.4 数据链路层

负责设备间的数据帧传送与识别,例如网卡驱动、帧同步、冲突检测、差错校验等;以太网、无线 LAN 等标准在这里;交换机工作在数据链路层

11.5 物理层

负责光/电信号的传递方式(网线、光纤、电磁波等),决定最大传输速率、距离、抗干扰能力;集线器工作在物理层

以下为跨网段主机的文件传输


12. 设备在分层模型里的位置:主机/路由器/交换机/集线器各管哪几层

这个映射非常有助于排障:

  • 主机:操作系统内核实现从传输层到物理层(五层模型的下四层)
  • 路由器:实现网络层到物理层(下三层)
  • 交换机:实现数据链路层到物理层(下两层)
  • 集线器:只实现物理层

(这里讨论的是传统意义的二层交换机、三层路由器;现实设备也可能出现三层/四层交换机、四层路由器等演进形态。)


13. 同网段 vs 跨网段:数据会不会经过路由器,是分水岭

  • 同一网段的两台主机通信,链路更简单,通常不需要经过路由器。
  • 跨网段通信时,数据从一台主机到另一台主机的过程中会经过一个或多个路由器(路由选择开始发挥作用)。

这也是很多网络问题的根源:同网段能通,跨网段不通,优先检查路由/网关/路由表与 ACL(访问控制)一类配置。


14. 封装与分用:数据包为什么一层套一层,到了对面又能拆开

14.1 不同层对数据的不同称谓

  • 传输层:段(segment)
  • 网络层:数据报(datagram)
  • 链路层:帧(frame)

14.2 封装(Encapsulation)

应用层数据通过协议栈发送到网络上时,每层协议都会加一个首部(header),把上层数据当作载荷(payload)。首部里包含很多关键信息:首部长度、载荷长度、上层协议类型等。这个"逐层加头"的过程就是封装。

14.3 分用(Demultiplexing)

数据到达目的主机后,每层协议再剥掉对应首部,并根据首部里的"上层协议字段",把数据交给正确的上层协议处理,最终回到正确的应用程序。

这就是为什么你抓包时会看到:以太网头、IP 头、TCP 头、再到 HTTP 数据------它们不是"重复信息",而是每一层完成自己职责所必须携带的控制信息。


总结

  • LAN/WAN 是规模概念;互联网是公共型 WAN 的子集
  • 进程通信靠三件套:IP(主机)+ 端口(进程)+ 协议(格式)
  • 一条连接用五元组定位,netstat -ano 能让它"现形"
  • 分层是为了复杂系统可维护;现实落地看 TCP/IP 五层(或四层)
  • 路由器/交换机/集线器各自只负责部分层级
  • 数据靠"封装"走天下,靠"分用"回到正确应用
相关推荐
ServBay2 天前
告别面条代码,PSL 5.0 重构 PHP 性能与安全天花板
后端·php
JaguarJack4 天前
FrankenPHP 原生支持 Windows 了
后端·php·服务端
BingoGo4 天前
FrankenPHP 原生支持 Windows 了
后端·php
JaguarJack5 天前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo5 天前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack5 天前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay6 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954487 天前
CTF 伪协议
php
BingoGo9 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack9 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端