计算机网络基础
概念与分层模型
网络的概念
网络是现代软件系统的基础(分布式系统、微服务系统、云、流媒体、物联网都离不开它)
两个常见的模型
OSI七层模型:(物理、数据链路、网络、传输、会话、表示、应用),便于概念教学所以使用该分层
TCP/IP(四/五层)模型:(链路/网络接口、网络/Internet、传输/Host-to-Host、应用),更贴近实际协议栈,(IP/TCP/UDP/HTTP)
对照表:
1.物理层->网线/光纤/无线
2.数据链路层->Ethernet、MAC、ARP、交换机
3.网络层->IP(IPv4/IPv6)、路由、ICMP
4.传输层->TCP/UDP、端口、流控、拥塞控制
5.应用层->DNS、HTTP、TLS、SMTP、FTP、SSH
物理层与链路层(从线缆到帧)
物理层:介质(双绞线、光纤、同轴)、信号编码、带宽、噪声、衰减、抖动(jitter)
链路层(数据帧):
- MAC地址(48bit,厂商前缀+唯一接口ID);交换机根据MAC转发
- Ethernet帧结构:目的MAC、源MAC、类型/长度、Payload、FCS(CRS)
- ARP(地址解析协议):把IPv4地址映射到MAC(ARP请求/应答);存在ARP欺骗风险
- 交换机vs集线器:集线器广播,交换机基于CAM表转发;交换机隔离碰撞域
- VLAN(虚拟局域网):802.1Q标记帧,使同一物理交换机上存在多个逻辑网络
- 生成树协议(STP):防止交换网络环境
网络层:IP、路由、子网
IP地址:
- IPv4(32位),IPv6(64位)——IPv6没有广播,用邻居发现替代ARP
- 子网掩码/CIDR:例如
192.168.1.0;/n表示网络位数
示例(子网计算):IP192.168.10.130/26->mask255.255.255.192(块大小64)->所在网段192.168.10.128/26,广播192.168.10.191,可用主机192.168.10.129-192.168.10.190 - 私有地址段:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16
ICMP:用于错误与误诊(ping使用ICMP Echo Request/Reply)
分片:当数据包>MTU(最大传输单元)时会分片;建议使用Path MTU Discovery避免分片
NAT(网络地址转换)
- SNAT/DNAT/PAT:把私有IP映射到公网IP+端口,实现地址复用(家用路由器常见)
- NAT的副作用:对端对端可达性、某些协议(FTP、SIP)需要ALGs或穿透
路由与路由表:每个路由器维护路由表(目标->下一跳、接口、metric)
路由算法与协议
基本类型:
- 距离向量(Distance Vector):如RIP。每个节点只知道到邻居的距离,通过定期交换路由表收敛;易产生环路(计数到无限)
- 链路状态:如OSPF。每个路由器广播链路状态,网络上每个节点构建完整拓扑并运行Dijikstra求最短路径
- 路径矢量:如BGP(自治系统之间路由),用于互联网主干,具有策略控制(不是简单的最短路径)
常见协议:
- RIP(老、最大跳数15)
- OSPF(内部网关协议,链路状态)
- BGP(自治系统间路由,策略驱动)
路由收敛、环路与预防:split horizon、poison reverse、route dampening、BGP政策等
传输层:TCP与UDP
端口号:0-65535(0保留),标准服务端口如HTTP/80、HTTPS/443、DNS/53
UDP(无连接、尽最大努力交付、低延迟、适合实时/流媒体/DNS)
TCP(可靠流):
三次握手建立连接(SYN->SYN/ACK->ACK)
四次挥手断开(FIN/ACK…)
序列号(Seq)与确认号(Ack)、滑动窗口
拥塞控制机制:
- 慢启动:cwnd从1MSS(最大报文段)指数增长到阈值ssthresh
- 拥塞避免(AIMD):加性增大、乘性减少
- 快速重传/快速恢复:三次重复ACK触发快速重传
- SACK(选择性确认):减少不必要重传
TCP状态:LISTEN->SYN_RCVD->ESTABLISHED->FIN_WAIT等
应用层常见协议
DNS(域名解析):
- 递归验证vs迭代查询、缓存、TTL、权威/递归服务器,DNSSEC提供签名验证
HTTP/HTTPS
- HTTP1.1(持久连接、管道化有限)、HTTP/2(多路复用、头压缩)、HTTP/3(基于QUIC、使用UDP)
- HTTPS=HTTP+TLS(加密层),证书链、公钥基础设施(PKI)
TLS:
- 握手:协商加密套件、交换密钥(通常用ECDHE做密钥交换以实现前向保密),交换证书,建立对称密钥
其他:SMTP(邮件)、FTP、SSH、WebSocket(长连接/双向)等
