计算机网络基础

网络背景

独立模式:每个计算机都是相互独立的

网络互联:多台计算机连接在一起,用于传输数据

局域网:小范围本地网络,局限在单一地理区域:办公室、家庭、学校机房、一栋大楼、厂区。

广域网:跨远距离大范围网络,连接多个城市、省份、国家,核心就是互联网。

网络协议

概念:

计算机、网络设备之间通信必须遵守的一套规则、标准、约定

计算机之间的传输媒介是光信号和电信号.通过"频率"和"强弱"来表⽰0和1这样的信息.要想传递各 种不同的信息,就需要约定好双⽅的数据格式.

协议规定了 4 件核心事:

  1. 语法:数据格式、编码、信号电平(数据长什么样)
  2. 语义:每段数据代表什么含义(命令、错误、应答)
  3. 时序(同步):收发顺序、速率匹配、重传机制(什么时候发、怎么等回复)
  4. 差错处理:出错怎么重传、丢弃、告警

为什么要有协议

如果没有统一协议:

电脑 A 发的数据格式电脑 B 看不懂,双方无法沟通,网络完全失效。

OSI 七层模型每一层都有专属协议,每层只遵守本层协议完成对应工作。

协议分层

ISO七层模型

1. 应用层(Application Layer)

作用:为应用程序提供网络服务,直接面向用户程序,定义交互规则。

  • 典型协议:HTTP/HTTPS、FTP、TFTP、SMTP、DNS、Telnet、SSH
  • 设备:电脑软件(浏览器、微信、网盘客户端)
  • 数据单位:数据(Data)
2. 表示层(Presentation Layer)

作用:数据格式转换、加密解密、压缩解压缩,统一双方数据语法。

  • 功能:编码转换(ASCII/Unicode)、数据加密、图片 / 音视频编解码(JPEG、MP4)
  • 数据单位:数据(Data)
3. 会话层(Session Layer)

作用:建立、管理、终止应用之间的通信会话,同步数据传输。

  • 功能:会话创建 / 断开、断点续传、会话隔离
  • 数据单位:数据(Data)

前三层(应用、表示、会话)统称上层(用户层),负责软件应用交互。

4. 传输层(Transport Layer)

作用:端到端的数据传输,流量控制、差错校验、端口区分应用。

  • 两大核心协议:
    • TCP:可靠、面向连接、三次握手、重传、分片重组(文件、网页)
    • UDP:无连接、不可靠、速度快(直播、游戏、DNS)
  • 标识:端口号(0~65535)
  • 数据单位:段(Segment,TCP)/ 用户数据报(Datagram,UDP)
5. 网络层(Network Layer)

作用:跨网段寻址、路由选择,实现不同网络之间的数据转发。

  • 核心协议:IP(IPv4/IPv6)、ICMP、ARP、RIP、OSPF
  • 标识:IP 地址
  • 典型设备:路由器、三层交换机
  • 数据单位:数据包(Packet)

作用:同一局域网内节点通信,组帧、差错检测、介质访问控制。

  • 分两个子层:
    1. LLC 逻辑链路:差错校验、流量控制
    2. MAC 介质访问:MAC 地址、以太网、CSMA/CD
  • 典型协议:以太网、PPP、STP
  • 典型设备:交换机、网卡
  • 标识:MAC 物理地址
  • 数据单位:帧(Frame)
7. 物理层(Physical Layer)

作用:传输原始比特流,定义硬件电气 / 光学 / 机械接口标准。

  • 传输内容:0、1 二进制比特信号
  • 介质:网线、光纤、无线电波、同轴电缆
  • 设备:集线器 Hub、中继器、网线、光模块
  • 数据单位:比特(Bit)

TCP/IP五层模型

一、基础概念
  1. TCP/IP 不是单一协议,是包含大量协议的协议簇
  2. 采用分层通信,每层依靠下一层提供的网络能力完成自身功能。
二、五层逐层核心要点(自上而下)
  1. 物理层 传输光 / 电 / 电磁原始信号;载体有双绞线、同轴电缆、光纤、WiFi 无线电;决定网速、传输距离、抗干扰;设备:集线器 Hub。
  2. 数据链路层 负责局域网帧传输、帧识别;完成帧同步、冲突检测、差错校验;标准:以太网、无线 LAN;设备:交换机 Switch。
  3. 网络层 主机寻址 + 跨网段路由;依靠 IP 地址标识设备、路由表规划传输路径;设备:路由器 Router。
  4. 传输层 实现两台主机端到端数据传输;代表协议 TCP,保障数据可靠传输。
  5. 应用层 面向应用程序提供通信规则;典型协议:SMTP 邮件、FTP 文件传输、Telnet 远程登录;网络编程主要针对本层。
三、常见分层协议举例
  1. 应用层协议(用户服务) HTTP/HTTPS(网页)、DNS(域名解析)、FTP(文件传输)、SMTP(发邮件)、SSH 远程登录
  2. 传输层协议(端到端传输) TCP(可靠传输)、UDP(高速无连接)
  3. 网络层协议(跨网段寻址) IP、ICMP(ping 命令)、ARP、OSPF、BGP
  4. 数据链路层协议(局域网内网) 以太网协议 Ethernet、PPP、MAC 帧协议
  5. 物理层:没有协议,只有电气 / 硬件标准

网络传输的流程

局域网的传输流程

MAC地址

概念:

MAC地址,也叫物理地址、硬件地址 ,是网卡出厂时固化在硬件里的唯一 48 位二进制编号,用来在局域网(数据链路层) 标识一台网络设备(电脑网卡、手机 WiFi、交换机、路由器网口)。

前提

主机 A:IP 192.168.1.10,MAC AA:AA:AA:AA:AA:AA

主机 B:IP 192.168.1.20,MAC BB:BB:BB:BB:BB:BB

两台设备连在同一台交换机,属于同一个局域网。

步骤 1:判断目标是否本地主机

主机 A 要发数据给 192.168.1.20,对比自身子网掩码,判定目标和自己在同一局域网,不需要发给网关(路由器),直接内网转发。

步骤 2:ARP 查询 ------ 获取对方 MAC 地址

A 只知道 B 的 IP,不知道 MAC,发起 ARP 广播:

  1. A 发送ARP 广播帧 (目标 MAC:FF:FF:FF:FF:FF:FF 全网广播)
  2. 广播内容:"谁是 192.168.1.20,请把你的 MAC 地址发给我"
  3. 交换机收到广播帧,向所有端口转发
  4. 局域网内所有主机收到 ARP 报文,只有 IP 匹配的主机 B 回复ARP 单播
  5. B 把自己 MAC 发给 A;A、B 双方各自保存「IP-MAC 映射表(ARP 缓存)」
步骤 3:数据逐层封装(TCP/IP 五层从上到下)
  1. 应用层:浏览器 / 软件生成原始数据
  2. 传输层:加上 TCP/UDP 头部(源端口、目标端口)→ 段
  3. 网络层:加上 IP 头部(源 IP、目标 IP)→ 数据包
  4. 数据链路层 :加上帧头帧尾
    • 源 MAC:A 的 MAC
    • 目标 MAC:B 的 MAC(ARP 刚查到)
    • FCS 校验码 封装完成得到数据帧
  5. 物理层:转换成 0/1 比特电信号,通过网线发给交换机
步骤 4:交换机二层转发(核心局域网转发逻辑)
  1. 交换机收到 A 发来的数据帧,读取帧头部目标 MAC BB:BB:BB...
  2. 查询自身MAC 地址表:记录每个端口对应的设备 MAC
  3. 交换机只把帧从连接主机 B 的端口发出去,不会广播给其他设备(单播转发,节省带宽)
步骤 5:主机 B 逐层解封装接收
  1. 物理层:把电信号还原成完整数据帧
  2. 数据链路层:校验 FCS,核对目标 MAC 是本机,剥离 MAC 头部
  3. 网络层:读取 IP 头部,确认目标 IP 是本机,剥离 IP 头部
  4. 传输层:根据端口号交给对应程序,剥离 TCP/UDP 头部
  5. 应用层:程序读取原始数据,完成通信

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

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

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

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

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

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

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

• 局域⽹通信的过程中,主机对收到的报⽂确认是否是发给⾃⼰的,是通过⽬标mac地址判定

• 这⾥可以试着从系统⻆度来理解局域⽹通信原理

数据包的封装和分用

跨网络传输流程

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

IP(Internet Protocol,网际协议)地址,是网络层 用来给互联网 / 局域网中每一台主机、网络设备分配的逻辑编号,作用是跨网段寻址,让不同网络的设备能互相找到对方。

  • MAC 只管局域网内 通信;IP 管全网、跨网段通信。
  • IP 地址是逻辑地址,可以手动 / 自动修改;MAC 是硬件固化地址。
IPv4(目前最常用)
  1. 格式

32 位二进制,分成 4 段 8 位二进制,用点分十进制表示:

例:192.168.1.1 每一段取值范围:0 ~ 255

  1. 两大组成部分

IP 地址 = 网络位 + 主机位

  1. 网络位:标识当前属于哪个局域网网段;
  2. 主机位 :标识网段里某一台具体设备; 靠子网掩码区分哪部分是网络位、哪部分是主机位。
前置条件
  • 主机 A(内网 1):IP 192.168.1.10,MAC MAC-A,网关 192.168.1.1(路由器内网口 MAC:MAC-GW-In
  • 路由器:内网口 192.168.1.1,外网口公网 IP 203.0.113.5,外网 MAC MAC-GW-Out
  • 外网服务器 B:公网 IP 180.101.49.11,MAC MAC-B
  • A 和 B 不在同一局域网,必须经过路由器转发
核心规律
  1. IP 全程不变:源 IP=192.168.1.10,目标 IP=180.101.49.11 从头到尾不换
  2. MAC 每过一台路由器就重写:二层帧头部源 / 目标 MAC 会被路由器替换
步骤 1:主机 A 判断目标不在本地局域网

A 用自身 IP + 子网掩码 和目标 IP 做与运算,得出网段不同,判定需要发给网关(路由器)

步骤 2:ARP 获取网关 MAC

A 只知道网关 IP 192.168.1.1,不知道网关 MAC:

  1. A 发 ARP 广播帧:谁是 192.168.1.1?
  2. 路由器内网口回应 ARP 单播,把 MAC-GW-In 发给 A
  3. A 缓存 IP-MAC 对应关系
步骤 3:主机 A 封装数据,发给网关(第一层帧)

TCP/IP 五层封装:

  1. 应用层:网页 / 文件原始数据
  2. 传输层:添加 TCP/UDP 头部(端口号)→ 段
  3. 网络层 IP 头部:
    • 源 IP:192.168.1.10
    • 目标 IP:180.101.49.11(外网服务器)
  4. 数据链路层帧头部:
    • 源 MAC:MAC-A(本机)
    • 目标 MAC:MAC-GW-In(路由器内网口)
  5. 物理层转为比特流,发给交换机,交换机查 MAC 表转发给路由器
步骤 4:路由器解二层帧,读取 IP,路由转发
  1. 路由器收到帧,剥离二层 MAC 头部,取出 IP 数据包
  2. 查看数据包目标公网 IP 180.101.49.11 ,查询自身路由表,确定从外网口转发
  3. 重新封装全新二层数据帧:
    • 源 MAC:MAC-GW-Out(路由器外网口)
    • 目标 MAC:MAC-B(下一跳运营商设备 / 服务器 MAC) ✅ IP 头部完全不变,仅重写 MAC 头部
步骤 5:公网骨干链路逐层转发

数据经过运营商多台路由器,每经过一台都重复操作:

  • 拆掉旧 MAC 帧头
  • 根据目标 IP 查表选出口
  • 更换新的源、目标 MAC 源 IP、目标 IP 自始至终保持不变
步骤 6:外网服务器 B 接收解封装
  1. 物理层还原比特流
  2. 链路层校验 MAC,剥离帧头
  3. 网络层核对目标 IP 是本机,剥离 IP 头
  4. 传输层根据端口交给对应服务程序
  5. 应用层接收数据,处理请求并生成回复报文
步骤 7:回程数据(服务器→主机 A)逻辑对称
  1. 服务器回复数据包:源 IP = 服务器,目标 IP = 公网 IP 203.0.113.5
  2. 公网路由传回家用路由器
  3. 路由器做NAT 地址转换 :把目标公网 IP 替换成主机 A 内网 IP 192.168.1.10
  4. 路由器 ARP 查找主机 A 的 MAC,封装内网二层帧发给交换机,最终送达主机 A

Socket编程

源IP地址和目的IP地址

  • IP 地址的作用:在整个网络里,唯一标识一台主机(电脑 / 手机等设备),用来把数据送到正确设备。
  • 数据传输的终点不是主机,而是主机里的进程
    • 我们上网、聊天、下载、浏览网页,依靠 QQ、迅雷、浏览器这类进程接收数据;
    • IP 只能定位到整台设备,无法区分设备内部多个程序。
  • 引出核心问题 一台主机同时运行大量进程,数据抵达主机后,系统如何精准把数据交给对应的目标进程?需要额外标识区分进程。

通俗理解

  • IP 相当于小区门牌号 只能确定快递(数据)送到哪一户(主机),但一户人家里面有很多房间(进程:浏览器、QQ、视频软件)。
  • 只靠门牌号(IP),快递员只能送到楼下,不知道交给屋里哪个人 / 哪个房间; 所以除了 IP 定位设备,还需要端口号定位主机内部的进程(对应每个房间编号)。
  • 完整通信逻辑: IP 负责跨网络找到目标设备,端口号负责在设备内部找到对应的应用程序进程,二者配合才能完整交付数据给用户使用。

端口号

端⼝号( port )是传输层协议的内容.

• 端⼝号是⼀个 2 字节 16 位的整数;

• 端⼝号⽤来标识⼀个进程,告诉操作系统,当前的这个数据要交给哪⼀个进程来处理;

• IP地址+端⼝号能够标识⽹络上的某⼀台主机的某⼀个进程;

• ⼀个端⼝号只能被⼀个进程占⽤.

端⼝号范围划分

  • 范围:0~65535 共 65536 个
    • 公认端口:0~1023(80 网页、443 加密网页、22 远程 SSH、21FTP)
    • 注册端口:1024~49151
    • 动态 / 临时端口:49152~65535(客户端发起连接随机使用)
  • 特点:
  • 一台主机上同一时刻一个端口只能被一个进程占用
  • 网络通信必备:数据到达主机后,操作系统根据数据包里的目标端口,转发给对应网络进程;
  • 对外通信标识,跨网络传输时会封装在 TCP/UDP 头部。

传输层的代表(TCP/UDP)

一、基础定义

  1. TCP(传输控制协议)

面向连接、可靠传输协议,通信前建立专属连接,传输全程校验、重传、保序,保证数据完整无差错送达。

  1. UDP(用户数据报协议)

无连接、不可靠传输协议,不用提前建立连接,直接发数据包,无校验重传机制,速度快但可能丢包、乱序。

|-----------|-----------------------------|-----|---|---|---|
| 对比维度 | TCP | UDP | | | |
| 连接特性 | 面向连接(通信前握手,结束挥手) | 无连接,发完即走,不维持会话 ||||
| 可靠性 | 可靠:不丢包、不乱序、无重复 | 不可靠:可能丢包、乱序、重复到达 ||||
| 流量 / 拥塞控制 | 有滑动窗口、拥塞避免机制 | 无,发送方想发多快就发多快 ||| |
| 差错处理 | 出错自动重传,超时重发 | 出错直接丢弃,不重传 ||| |
| 头部开销 | 头部 20~60 字节,字段多(序号、确认、窗口等) | 固定 8 字节头部,极简 ||| |
| 传输速度 | 较慢,大量校验协商损耗 | 极快,无额外协商开销 ||| |
| 有序性 | 数据按发送顺序交付上层 | 数据到达顺序无法保证 ||| |
| 适用场景 | 文件下载、网页、邮件、数据库、远程登录 | 直播、语音视频通话、游戏、DNS 查询 ||||

网络字节序

一、什么是字节序

CPU 存储多字节数据(如 16 位端口、32 位 IP)有两种存放规则:

  1. 小端序 Little-Endian(主机字节序,PC / 手机 x86、ARM 常用) 低字节存内存低地址,高字节存高地址 例:数字 0x1234,内存存放:0x34 0x12
  2. 大端序 Big-Endian(网络字节序,TCP/IP 强制标准) 高字节存内存低地址,低字节存高地址 例:数字 0x1234,内存存放:0x12 0x34

二、为什么必须统一「网络字节序」

不同设备 CPU 字节序不一样:Windows 电脑是小端,部分嵌入式设备是大端。 如果直接把本机字节序的端口、IP 放到网络数据包里,两端解析数值会完全错乱,通信失败。 因此 TCP/IP 协议规定:所有传输层、网络层头部的多字节整数,一律使用大端序发送 ,这个标准就叫网络字节序

socket编程接口

定义:

Socket(套接字)是操作系统给应用层提供的一套网络编程接口,是应用程序和 TCP/IP 协议栈之间的桥梁。

程序不用手动封装 IP、TCP/UDP 头部,只需要调用 Socket 函数,操作系统内核自动完成分层封装、路由、收发数据。

总结:

  • Socket 是应用层访问 TCP/IP 内核的标准编程接口;
  • 分 TCP 流式、UDP 数据报两种套接字,流程完全不同;
  • TCP 需要建立连接,流程:socket→bind→listen→accept;
  • UDP 无连接,只用 socket+bind+sendto/recvfrom;
  • 依靠「IP + 端口」五元组区分不同进程、不同连接。
相关推荐
Lhappy嘻嘻1 天前
网络(四)|全网最细网络层原理:IP 协议、IP 地址分类、子网划分、路由转发、NAT 穿透详解
java·笔记·网络协议·计算机网络
儒雅的烤地瓜3 天前
计算机网络 | 网络诊断双刃剑:Tracert路由追踪实战与Windows防火墙端口配置指南
tcp/ip·计算机网络·wireshark·防火墙·powershell·cmd
2501_915106324 天前
TraceEagle 代理抓包教程 本机和手机的 HTTPS 抓包方法
网络协议·计算机网络·网络安全·ios·adb·https·udp
大草原的小灰灰6 天前
计算机网络与TCP/IP参考模型
tcp/ip·计算机网络
编程之路,妙趣横生7 天前
Tcp Socket
计算机网络·tcp
编程之路,妙趣横生7 天前
Udp Socket
计算机网络·udp
阿米亚波10 天前
【EVE-NG 实战】防火墙基础(VLAN · VRRP · NAT · ACL · 静态路由)
运维·网络·笔记·网络协议·计算机网络·网络安全·运维开发
liulilittle11 天前
Exhaustive drift-fix simulation V2 — KCC on shared-bottleneck wired path.
开发语言·网络·python·tcp/ip·计算机网络·信息与通信·通信
2401_8685347812 天前
案例介绍-小型网络规划及搭
python·计算机网络