文章目录
前言
在开发软件方面,学习计算机网络能让你理解和实现不同设备、不同程序之间的数据通信,这意味着你不再局限于写单机应用,而是可以开发 联网软件(如聊天工具、网络游戏、Web服务、云应用等),并能掌握常见的 协议TCP/UDP/HTTP 与 客户端-服务器架构,从而具备构建真正互联网应用的能力。
一,局域网与广域网
局域网 LAN
定义:局域网是覆盖范围较小的计算机网络,通常限制在一个家庭、办公室、一栋楼、一个学校或工厂车间内。
特点:覆盖范围小(几十米 ~ 几公里),传输速度高(常见 100Mbps、1Gbps、10Gbps),成本低,可以由个人或企业自己建设(家里的 Wi-Fi 就是最典型的 LAN),网络拓扑常见:星型(交换机为中心)、总线型、环型,技术常见:以太网(Ethernet)、Wi-Fi
广域网 WAN
定义:广域网是覆盖范围极大的网络,跨越城市、省份、国家甚至全球。WAN 通常由电信运营商来建设和管理,用于连接多个局域网。
特点:覆盖范围大(几十公里 ~ 几千公里甚至全球),传输速度相对较低(受限于距离和设备,常见 Mbps 到 Gbps),建设和维护成本高,需要大量设备(光纤、卫星链路、路由器),使用复杂的传输技术:MPLS、专线、4G/5G、卫星通信等,典型代表:互联网(Internet)就是最大的 WAN
LAN 与 WAN 的关系
-
LAN是“局部小网络”,WAN是“连接这些局部网络的大网络”。 -
LAN就像一个个 小院子,设备之间能快速沟通;WAN就像 公路和高速,把这些小院子串联起来。 -
你家里的
LAN(Wi-Fi) → 通过电信运营商的WAN→ 连接到全球互联网(其他人的LAN)。 -
互联网(Internet) 就是由 无数
LAN+WAN互相连接组成的超级大网。
举个例子
-
在家里,手机和电脑通过 Wi-Fi 互相传文件,这是
LAN。 -
你用电脑打开 B 站、访问谷歌,这是通过家里的
LAN连接到 电信运营商的WAN,再经过互联网到达远方服务器所在的LAN。 -
整个过程:你的设备 (LAN) → 家用路由器 → 电信运营商 WAN → 互联网(WAN) → 目标服务器所在 LAN → 服务器
二,OSI模型
OSI 模型(Open Systems Interconnection,开放系统互连模型)是 国际标准化组织(ISO) 在 1984 年提出的一个网络通信参考模型。它把计算机网络通信划分为 七层:
| 名称 | 作用 |
|---|---|
| 应用层 | 直接面向用户应用(HTTP、FTP、SMTP、DNS 等) |
| 表示层 | 处理数据表示(加密/解密、压缩/解压缩、数据格式转换) |
| 会话层 | 管理通信会话(建立、保持、终止会话) |
| 传输层 | 负责端到端通信可靠性(TCP、UDP) |
| 网络层 | 负责寻址和路由(IP 协议) |
| 数据链路层 | 负责点到点传输(MAC 地址、以太网帧) |
| 物理层 | 负责比特传输(电信号、光信号) |
其实在网络角度,OSI定的协议7层模型其实非常完善,但是在实际操作的过程中,会话层、表示层
是不可能接入到操作系统中的,所以在工程实践中,最终落地的是5层协议

2-1 OSI模型和操作系统有什么关系
-
OSI 模型是 网络通信的理论框架,把复杂的网络通信过程拆成 7 层:
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
它就像“快递公司流程图”:取件、分拣、运输、派送,每一步都有明确分工 -
操作系统是一个 管理计算机资源的软件,它管:
CPU、内存、硬盘、显卡、网卡、网络通信
它就像“快递公司本身”,有员工、有流程,真正帮你把货送到
两者的关系你可以这样理解:
-
OSI 模型是理论蓝图 —— 规定了“快递”要分几步走。
-
操作系统是实际实现者 —— 它按照这个蓝图,在计算机里完成网络通信。
在实际操作系统里:
-
物理层、数据链路层:由网卡硬件 + 驱动实现(驱动在操作系统里)。
-
网络层(IP)、传输层(TCP/UDP):由操作系统的 协议栈 实现。
-
会话层、表示层、应用层:多数由应用程序或库来实现,比如浏览器、加密库。
也就是说:操作系统主要负责底层(传输层以下),应用程序负责上层(会话层以上)
三,协议
3-1 TCP/IP协议
它规定了 数据在网络中如何发送、传输和接收,是互联网的核心协议,简单理解:TCP/IP 就是计算机之间“互相说话的语言”。
TCP/IP 协议就是计算机在网络上通信的一套 规则。
TCP(传输控制协议):保证数据可靠传输,不丢、不乱序。
IP(网际协议):负责把数据送到正确的电脑地址。
3-2 协议和结构体
可以把协议想象成 双方都认识的结构体:每一条字段(field)对应协议里的一个数据元素(比如消息类型、长度、内容)。发送方填充结构体,把它的二进制内容发出去。接收方用同样的结构体解析收到的数据。
假设我们设计一个简单的消息协议:
// 定义协议结构体
struct Message {
uint8_t type; // 消息类型
uint16_t length; // 消息长度
char content[100]; // 消息内容
};
发送方填好这个结构体,然后发到网络上,接收方用同样的结构体解析,就能正确理解数据
协议 = 数据结构(struct)规则:
- 发送方 = 填结构体
- 接收方 = 按结构体解析
- 只要双方都遵循同一个“结构体定义”,通信就不会出错。
协议就像双方都认得的结构体,规定了数据的字段和顺序,让发送和接收双方能正确理解信息。
3-3 MAC地址
MAC 地址是 网络设备的唯一硬件标识。每个网卡(网卡可以是电脑的、有线网卡、Wi-Fi 模块)都有一个全球唯一的 MAC 地址。格式一般是 6 个字节(48 位),用十六进制表示,如:
00:1A:2B:3C:4D:5E
MAC 地址的作用:
唯一标识网络设备:就像身份证号,每台设备在局域网里都有唯一标识。
局域网通信:局域网(LAN)里,交换机用 MAC 地址决定把数据包送给哪台设备。
不依赖 IP:MAC 地址在硬件层(链路层)工作,不管设备的 IP 地址如何变化,它本身不变
四,网络相关命令
4-1 ifconfig
ifconfig是 Linux 系统中 查看和配置网络接口 的命令。
演示代码:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.1.107 netmask 255.255.240.0 broadcast 172.31.15.255
inet6 fe80::f816:3eff:fe1d:ff69 prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:1d:ff:69 txqueuelen 1000 (Ethernet)
RX packets 2871073 bytes 1143072304 (1.1 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3100639 bytes 1711873451 (1.7 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 848593 bytes 128534029 (128.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 848593 bytes 128534029 (128.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0 概览
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
-
eth0→ 网络接口名(通常是第一块以太网网卡) -
flags→ 接口状态标志:-
UP→ 接口已启用 -
BROADCAST→ 支持广播 -
RUNNING→ 驱动已加载,接口正在工作 -
MULTICAST→ 支持多播
-
-
mtu 1500→ 最大传输单元,每个数据包最大 1500 字节
IP 地址相关
inet 172.31.1.107 netmask 255.255.240.0 broadcast 172.31.15.255
-
inet 172.31.1.107→ IPv4 地址 -
netmask 255.255.240.0→ 子网掩码,用于划分网络和主机 -
broadcast 172.31.15.255→ 广播地址,用于向网络中所有设备发送信息
inet6 fe80::f816:3eff:fe1d:ff69 prefixlen 64 scopeid 0x20<link>
-
inet6→ IPv6 地址(链路本地地址) -
prefixlen 64→ 子网前缀长度 -
scopeid 0x20<link>→ 链路本地作用域,仅本地网络有效
MAC 地址
ether fa:16:3e:1d:ff:69 txqueuelen 1000 (Ethernet)
-
ether→ MAC 地址(网卡唯一硬件标识) -
txqueuelen 1000→ 发送队列长度,表示缓冲区可存储 1000 个待发送数据包
网络流量统计
RX packets 2871073 bytes 1143072304 (1.1 GB)
RX errors 0 dropped 0 overruns 0 frame 0
-
RX→ 接收(Receive)统计-
packets 2871073→ 接收的数据包数量 -
bytes 1143072304 (1.1 GB)→ 接收的总字节数 -
errors/dropped/overruns/frame→ 接收错误、丢包、缓冲溢出、帧错误数量
-
TX packets 3100639 bytes 1711873451 (1.7 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
TX→ 发送(Transmit)统计-
packets 3100639→ 发送的数据包数量 -
bytes 1711873451 (1.7 GB)→ 发送的总字节数 -
errors/dropped/overruns/carrier/collisions→ 发送错误、丢包、缓冲溢出、物理故障、碰撞统计
-
4-2 ping
ping 命令作用:ping 用来 测试你的计算机能否到达目标主机,同时测量 网络延迟(响应时间)。它通过 ICMP 协议发送“回显请求”,目标主机收到后返回“回显应答”。
演示代码:
root@hcss-ecs-f59a:~# ping www.bilibili.com
PING a.w.bilicdn1.com (221.204.56.94) 56(84) bytes of data.
64 bytes from 94.56.204.221.adsl-pool.sx.cn (221.204.56.94): icmp_seq=1 ttl=49 time=13.7 ms
.......
输出解析:
PING a.w.bilicdn1.com (221.204.56.94) 56(84) bytes of data.
-
a.w.bilicdn1.com→ ping 命令解析出来的目标域名的 实际服务器名 -
221.204.56.94→ 目标服务器的 IP 地址 -
56(84) bytes of data→ 发送的数据包大小-
56 字节→ ICMP 数据部分 -
84 字节→ ICMP 报头 + IP 头 + 数据总长度
-
64 bytes from 94.56.204.221.adsl-pool.sx.cn (221.204.56.94): icmp_seq=1 ttl=49 time=13.7 ms
-
64 bytes→ 收到的数据包大小(通常比发送少 20 字节 IP 头,因此显示 64) -
from 94.56.204.221.adsl-pool.sx.cn (221.204.56.94)→ 源地址- 显示域名 + IP
-
icmp_seq=1→ ICMP 序列号,第 1 个回显请求 -
ttl=49→ Time To Live(生存时间)-
数据包在网络中最多经过多少路由器
-
每经过一个路由器减 1
-
-
time=13.7 ms→ 往返延迟时间(RTT, Round-Trip Time),即你发送包到收到回应的时间

被折叠的 条评论
为什么被折叠?



