一、TCP/IP 知识重点
1. TCP/IP 分层模型(四层 vs 五层 vs OSI)
实际工作和面试中最常用的是 五层模型(综合了 OSI 和 TCP/IP 的优点):
| 层级 | 名称 | 主要协议/设备 | 核心功能 |
|---|---|---|---|
| 5 | 应用层 | HTTP, HTTPS, DNS, SSH, SMTP | 为用户提供网络服务 |
| 4 | 传输层 | TCP , UDP | 端到端通信,可靠/不可靠 |
| 3 | 网络层 | IP, ICMP, ARP | 路由和寻址 |
| 2 | 数据链路层 | 以太网, VLAN, 交换机 | 同一链路上的帧传输 |
| 1 | 物理层 | 网线、光纤、网卡 | 比特流传输 |
面试常见问题:为什么说 TCP/IP 是"事实标准"?因为它简洁、开放、可扩展,而不是由某个厂商控制。
2. 重点协议详解
🔹 IP 协议(网络层)
-
无连接、不可靠:不保证数据包一定到达,顺序可能乱。
-
分片与重组:当数据包超过链路 MTU(通常 1500 字节)时,路由器会分片,最终由接收方重组。
-
IPv4 头部 :重点关注 TTL(防止环路) 、协议字段(6=TCP, 17=UDP) 、校验和。
🔹 ARP 协议(介于 L2/L3 之间)
-
功能:已知 IP 地址,解析出对应的 MAC 地址。
-
工作过程:广播 ARP 请求 → 目标回复单播 ARP 应答 → 写入 ARP 缓存。
-
常见问题:ARP 欺骗、ARP 广播风暴。
🔹 ICMP 协议
-
功能:传递差错报告和网络诊断。
-
典型应用 :
ping( Echo 请求/应答)、traceroute(利用 TTL 耗尽)。 -
注意 :有些网络会禁掉 ICMP,导致
ping不通但业务正常。
🔹 TCP(传输控制协议)--- 重中之重
| 特性 | 说明 |
|---|---|
| 连接性 | 面向连接,必须三次握手建立连接 |
| 可靠性 | 确认应答(ACK)、超时重传、序列号、校验和 |
| 流量控制 | 滑动窗口,接收方告诉发送方"还能收多少" |
| 拥塞控制 | 慢启动、拥塞避免、快重传、快恢复 |
| 全双工 | 双方可同时发送数据 |
三次握手(建立连接):
-
客户端 → SYN, Seq=x
-
服务器 → SYN+ACK, Seq=y, Ack=x+1
-
客户端 → ACK, Ack=y+1
四次挥手(断开连接):
-
作用:确保双方数据都发送完毕。
-
关键状态:
TIME_WAIT(等待 2MSL,防止最后 ACK 丢失)。
🔹 UDP
-
无连接、不可靠,没有握手、确认、重传。
-
优点:低延迟、低开销,适合实时音视频、DNS、游戏。
-
典型头部:源端口、目的端口、长度、校验和。
3. 常用通信过程(重点理解)
从浏览器输入 www.baidu.com 到页面显示,涉及哪些协议?
-
DNS:解析域名 → IP 地址(使用 UDP 或 TCP)。
-
HTTP/HTTPS:构建请求。
-
TCP:三次握手建立连接(HTTPS 还要 TLS 握手)。
-
IP:封装数据包,查路由表跳转。
-
ARP:如果下一跳 MAC 未知,先发 ARP。
-
以太网:封装成帧,经网卡、交换机、路由器传输。
二、VLAN 知识重点
1. VLAN(虚拟局域网)的本质
-
定义:在物理局域网内部,用软件逻辑划分出多个相互隔离的广播域。
-
解决的问题:
-
抑制广播风暴
-
提高安全性(不同 VLAN 默认不能互访)
-
简化网络管理(同一 VLAN 可跨多台交换机)
-
2. 工作原理
-
Tag(标签):在以太网帧中插入 4 字节的 802.1Q 标签(VLAN ID 占 12 位,范围 1~4094,0 和 4095 保留)。
-
Access 端口:只属于一个 VLAN,发往该端口的帧不带标签(通常连接主机)。
-
Trunk 端口:允许多个 VLAN 带标签通过(通常连接交换机或路由器)。
3. 关键概念
| 概念 | 说明 |
|---|---|
| VLAN ID | 唯一标识一个 VLAN,范围 1~4094 |
| 默认 VLAN | 通常是 VLAN 1,所有端口初始都在 VLAN 1 |
| Native VLAN | Trunk 端口上不携带标签的 VLAN(默认 VLAN 1) |
| VLAN 间路由 | 通过路由器 或三层交换机的 SVI 实现不同 VLAN 通信 |
4. VLAN 典型配置命令(思科风格,理解原理)
bash
# 创建 VLAN
vlan 10
name Sales
# 将端口划入 Access 模式
interface gig0/1
switchport mode access
switchport access vlan 10
# 配置 Trunk
interface gig0/24
switchport mode trunk
switchport trunk allowed vlan 10,20,30
5. 云网络中的 VLAN 类比
-
传统 VLAN → 云中的 VPC(逻辑隔离网络)。
-
VLAN ID (4096 个) → VPC 数量几乎无限制(通过 VXLAN 实现了 1600 万)。
-
Trunk → 云中的 VPC 对等连接 或 专线接入。
-
Access 端口 → 云服务器的 虚拟网卡。
三、TCP/IP 与 VLAN 的关系
-
TCP/IP 是协议栈,定义了数据从应用层到物理层的封装和传输规范。
-
VLAN 是数据链路层的技术,在以太网帧头加入 Tag,改变的是帧在二层网络中的转发行为。
-
共存:TCP/IP 的数据包经过以太网封装时,可以由交换机根据 VLAN Tag 决定如何转发。
一句话总结:
TCP/IP 决定了数据"怎么打包、怎么可靠传输";VLAN 决定了数据"在二层网络里能走到哪、能不能跨过交换机"。
四、面试/考试高频题速记
TCP/IP 部分
1. TCP 和 UDP 的区别?(表格式回答 + 详细说明)
| 维度 | TCP | UDP |
|---|---|---|
| 连接性 | 面向连接(三次握手) | 无连接(无需握手) |
| 可靠性 | 可靠传输(确认、重传、序列号) | 不可靠(不确认、不重传) |
| 流量控制 | 有(滑动窗口) | 无 |
| 拥塞控制 | 有 | 无 |
| 有序性 | 保证数据顺序 | 不保证 |
| 效率 | 较低(头部开销大、确认机制) | 较高(头部简单) |
| 头部长度 | 20~60 字节 | 8 字节固定 |
| 典型应用 | HTTP、HTTPS、FTP、SSH、SMTP | DNS、VoIP、视频直播、游戏 |
面试补充:
-
TCP 适用于要求数据完整、不丢失的场景(文件传输、网页)。
-
UDP 适用于允许少量丢包、要求低延迟的场景(实时通话、直播)。
2. 三次握手过程
-
第一次握手 :客户端发送
SYN=1, Seq=x(随机初始序列号),进入SYN_SENT状态。 -
第二次握手 :服务器收到后,回复
SYN=1, ACK=1, Seq=y, Ack=x+1,进入SYN_RCVD状态。 -
第三次握手 :客户端收到后,发送
ACK=1, Seq=x+1, Ack=y+1,进入ESTABLISHED。服务器收到后也进入ESTABLISHED。
为什么不是两次?
防止"已失效的连接请求报文段"突然又传到服务器,导致服务器误以为客户端要建立连接而白白等待。三次握手确保了双方都有能力收发数据。
状态迁移图(简版):
text
客户端 服务器
| |
|--------SYN (seq=x)--------->| (LISTEN)
| (SYN_SENT) |
|<------SYN+ACK (seq=y,ack=x+1)|
| (ESTABLISHED) | (SYN_RCVD)
|--------ACK (ack=y+1)-------->|
| | (ESTABLISHED)
3. 为什么需要 TIME_WAIT?
-
定义 :主动关闭连接的一方(通常是客户端)在发送最后一个 ACK 后,会进入
TIME_WAIT状态,持续 2MSL(Maximum Segment Lifetime,通常 2 分钟)。 -
两个原因:
-
保证最后一个 ACK 能被对方收到 :如果 ACK 丢失,对方会重发 FIN,
TIME_WAIT状态可以收到并重发 ACK。 -
防止旧连接的数据干扰新连接:等待足够长时间,确保本连接所有报文都从网络中消失。
-
面试常见追问 :TIME_WAIT 过多怎么办?
- 调整内核参数
net.ipv4.tcp_tw_reuse(允许复用)和tcp_tw_recycle(已废弃,不建议),或使用长连接减少连接频繁关闭。
4. 如何用 tcpdump 抓取指定端口和主机的包?
常用命令示例:
bash
# 抓取 eth0 网卡上主机 192.168.1.100 与端口 80 的通信
tcpdump -i eth0 host 192.168.1.100 and port 80
# 抓取源 IP 为 10.0.0.1 且目标端口为 443 的包
tcpdump -i any src host 10.0.0.1 and dst port 443
# 抓取 TCP 且端口是 22 或 23
tcpdump -i eth0 'tcp port 22 or tcp port 23'
# 抓取特定协议的包(icmp、arp 等)
tcpdump -i eth0 icmp
# 保存到文件
tcpdump -i eth0 -w capture.pcap
# 从文件读取并显示内容
tcpdump -r capture.pcap
重要参数:
-
-i:指定网卡(any表示所有网卡) -
-n:不解析域名(加快速度) -
-v/vv:显示更详细信息 -
-c:抓取指定数量的包
5. 一个 IP 包从主机 A 到主机 B,经过路由器时哪些字段会变?
会变的字段:
-
TTL(Time To Live):每经过一个路由器减 1,防止环路。
-
头部校验和(Header Checksum):因为 TTL 变了,校验和需要重新计算。
-
源 MAC 地址和目的 MAC 地址:每经过一跳,二层封装会更换为下一跳的 MAC,但 IP 头里的 IP 地址不变。
不会变的字段 :
源 IP 地址、目的 IP 地址(除非做了 NAT,但那是特殊场景)。
面试点睛 :
"IP 地址全球唯一标识主机,MAC 地址只负责下一跳物理传输。"
验证命令:traceroute 或 tracert 可以看到每一跳的路由器。
VLAN 部分
1. VLAN 的作用(至少 3 点)
-
隔离广播域:减少广播流量,提高网络性能。
-
提升安全性:不同 VLAN 默认不能直接通信,需要经过三层路由,可以配合 ACL 控制。
-
简化管理:可以按部门、项目等逻辑分组,成员可以跨物理位置。
-
灵活组网:不用重新布线就能调整网络划分。
-
减少冲突域(虽然交换机本身就隔离冲突域,但 VLAN 进一步减少广播域)。
2. Access 和 Trunk 的区别?
| 特性 | Access 端口 | Trunk 端口 |
|---|---|---|
| 所属 VLAN | 只能属于一个 VLAN | 可以承载多个 VLAN |
| 帧标签 | 不打 802.1Q 标签 | 除 Native VLAN 外,都打标签 |
| 连接对象 | 主机(PC、服务器、打印机) | 交换机、路由器、服务器(虚拟化) |
| 配置方向 | 设置 access vlan |
设置 trunk allowed vlan |
| 默认模式 | 所有端口刚出厂时通常是 Access | 需手动配置 |
Native VLAN 补充 :
Trunk 端口上可以定义一个 Native VLAN,该 VLAN 的帧在 Trunk 上传输时不打标签。两端 Native VLAN 必须一致,否则可能造成 VLAN 跳跃攻击。
3. 不同 VLAN 的主机怎么通信?
方法 :通过 三层路由 实现 VLAN 间通信。
两种常见方式:
-
路由器 + 交换机 :
交换机的 Trunk 端口连到路由器的物理接口,路由器配置子接口(802.1Q 封装),每个子接口对应一个 VLAN,配置 IP 作为网关。
示例(路由器子接口):
text
interface gi0/0.10 encapsulation dot1Q 10 ip address 192.168.10.1 255.255.255.0 -
三层交换机(推荐) :
创建 SVI(Switch Virtual Interface,即 VLAN 接口),配置 IP 地址,启用
ip routing。示例:
text
vlan 10 name Sales interface vlan 10 ip address 192.168.10.1 255.255.255.0 ip routing主机网关指向 SVI 地址,三层交换机内部硬件转发。
面试追问 :三层交换机比"路由器+交换机"快在哪里?
答:三层交换机使用专用硬件(ASIC)转发,不经过 CPU 处理路由,速度达到线速。
4. VLAN ID 的取值范围是多少?
-
标准范围:1 ~ 4094(因为 802.1Q 标签中 VID 占 12 位,2^12=4096,0 和 4095 保留)。
-
保留 VLAN:
-
VLAN 0:用于优先级,不含 VID。
-
VLAN 4095:保留。
-
VLAN 1:默认 VLAN,通常所有端口初始属于 VLAN 1。
-
-
扩展范围:某些厂商支持 1 ~ 4094,但部分交换机可通过 VTP 或私有协议扩大,但标准就是 4094 个可用。
5. 如果一个交换机端口既收到带 Tag 的帧又收到不带 Tag 的帧,如何决定属于哪个 VLAN?
取决于端口的模式:
-
Access 端口 :
如果收到 带 Tag 的帧,并且 Tag 中的 VLAN ID 与端口所属 VLAN 一致,会去掉 Tag 后接收;如果不一致,直接丢弃。
如果收到 不带 Tag 的帧,认为它属于端口所在 VLAN(打上内部 Tag)。
-
Trunk 端口 :
收到 带 Tag 的帧,根据 Tag 的 VID 判断属于哪个 VLAN,如果该 VID 在
allowed vlan列表中就接收,否则丢弃。收到 不带 Tag 的帧,认为它属于 Native VLAN(默认 VLAN 1)。所以两端 Native VLAN 必须相同,否则会跨 VLAN 通信,产生安全问题。
一句话总结:
-
不带 Tag → 默认交给 Native VLAN(Trunk)或端口所属 VLAN(Access)。
-
带 Tag → 按 TAG 中的 VID 处理,若端口不支持该 VID 则丢弃。
补充:面试官可能追深的 VLAN 问题
-
VLAN 跳跃攻击(VLAN Hopping) 如何防范?
-
关闭 Trunk 端口的 Dynamic Trunking 协议(DTP),手动指定 Trunk。
-
显式设置 Native VLAN 为一个未使用的 VLAN(非 VLAN 1)。
-
所有 Access 端口上关闭 trunking 功能。
-
-
私有 VLAN(Private VLAN) 是什么?
解决同一个 VLAN 内部需要进一步隔离的问题(如同一个 VLAN 下的不同主机不能互访,但都能访问网关)。