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 地址只负责下一跳物理传输。"

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


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 下的不同主机不能互访,但都能访问网关)。

相关推荐
晨米酱3 天前
AGENTS.md:Agent 的上下文策略层
面试·架构·agent
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
XUEYUAN52123 天前
ASN 自治系统号风控:平台如何通过 IP 所属自治域批量识别代理流量
python·网络协议·http·网络安全·socks5
CoderYanger3 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
CHENKONG_CK3 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
爱学习的执念3 天前
助力金九银十1000道软件测试面试题(功能、接口、自动化、WEB、APP.......)附答案
软件测试·面试
小的~~3 天前
银河麒麟V10 ARM部署TDengine(涛思)工业时序数据库安装与测试
面试·程序员创富
z落落3 天前
C#UDP+串口服务端+UDP 客户端(含 CRC16 校验)
网络·网络协议·udp
小刘在重生~3 天前
Oracle_day2 单行函数|组函数|分组|伪列|子查询|分页|多表连接
笔记·oracle·面试
Sam_Deep_Thinking3 天前
关于java final关键字的可见性
java·后端·面试·程序员