TCP/IP和VLAN

一、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)、超时重传、序列号、校验和
流量控制 滑动窗口,接收方告诉发送方"还能收多少"
拥塞控制 慢启动、拥塞避免、快重传、快恢复
全双工 双方可同时发送数据

三次握手(建立连接)

  1. 客户端 → SYN, Seq=x

  2. 服务器 → SYN+ACK, Seq=y, Ack=x+1

  3. 客户端 → ACK, Ack=y+1

四次挥手(断开连接)

  • 作用:确保双方数据都发送完毕。

  • 关键状态:TIME_WAIT(等待 2MSL,防止最后 ACK 丢失)。

🔹 UDP
  • 无连接、不可靠,没有握手、确认、重传。

  • 优点:低延迟、低开销,适合实时音视频、DNS、游戏。

  • 典型头部:源端口、目的端口、长度、校验和。


3. 常用通信过程(重点理解)

从浏览器输入 www.baidu.com 到页面显示,涉及哪些协议?

  1. DNS:解析域名 → IP 地址(使用 UDP 或 TCP)。

  2. HTTP/HTTPS:构建请求。

  3. TCP:三次握手建立连接(HTTPS 还要 TLS 握手)。

  4. IP:封装数据包,查路由表跳转。

  5. ARP:如果下一跳 MAC 未知,先发 ARP。

  6. 以太网:封装成帧,经网卡、交换机、路由器传输。


二、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. 三次握手过程
  1. 第一次握手 :客户端发送 SYN=1, Seq=x(随机初始序列号),进入 SYN_SENT 状态。

  2. 第二次握手 :服务器收到后,回复 SYN=1, ACK=1, Seq=y, Ack=x+1,进入 SYN_RCVD 状态。

  3. 第三次握手 :客户端收到后,发送 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 分钟)。

  • 两个原因

    1. 保证最后一个 ACK 能被对方收到 :如果 ACK 丢失,对方会重发 FIN,TIME_WAIT 状态可以收到并重发 ACK。

    2. 防止旧连接的数据干扰新连接:等待足够长时间,确保本连接所有报文都从网络中消失。

面试常见追问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 地址只负责下一跳物理传输。"

验证命令:traceroutetracert 可以看到每一跳的路由器。


VLAN 部分

1. VLAN 的作用(至少 3 点)
  1. 隔离广播域:减少广播流量,提高网络性能。

  2. 提升安全性:不同 VLAN 默认不能直接通信,需要经过三层路由,可以配合 ACL 控制。

  3. 简化管理:可以按部门、项目等逻辑分组,成员可以跨物理位置。

  4. 灵活组网:不用重新布线就能调整网络划分。

  5. 减少冲突域(虽然交换机本身就隔离冲突域,但 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 下的不同主机不能互访,但都能访问网关)。

相关推荐
Yunzenn1 小时前
零基础复现Claude Code(五):终端篇——赋予执行命令的超能力
面试·github
deepdata_cn2 小时前
开放智能体网络协议(Agent Network Protocol,ANP)
网络协议·智能体
IT博客技术分享2 小时前
2026年4月份前端面试题及答案
面试
李日灐3 小时前
<4>Linux 权限:从 Shell 核心原理 到 权限体系的底层逻辑 详解
linux·运维·服务器·开发语言·后端·面试·权限
星辰_mya3 小时前
RPC 原理:Dubbo为了偷懒而存在的中间商
后端·网络协议·rpc·架构·dubbo
Wect3 小时前
HTML5 原生拖拽 API 实战案例与拓展避坑
前端·面试·浏览器
阿正的梦工坊3 小时前
计算机网络 IP 地址分配
网络·tcp/ip·计算机网络
聊点儿技术3 小时前
物联网设备IP归属地查询实操指南
物联网·tcp/ip·ip·ip归属地查询·ip地址查询·查ip归属地
knight_9___4 小时前
RAG面试篇7
java·面试·agent·rag·智能体