☰
军队文职考试——第5期:什么是网桥?防火墙的端口防护是什么?| ARP地址解析协议的工作原理 | TCP的三次握手过程,若两次握手可以吗? | 差错检测及常见的差错检测技术
2026/10/2 13:57:50 网站建设 项目流程

1.1 何为网桥?防火墙的端口防护是指什么?

1. 网桥

网桥是工作在数据链路层(OSI 第 2 层)的设备,用于连接两个或多个网段,根据MAC 地址转发数据帧。

主要特点:

  • 自学习:根据收到帧的源 MAC 和进入端口,建立 MAC 地址表。

  • 转发/过滤:目标 MAC 在同一端口则过滤,不在则转发。

  • 泛洪:未知单播、广播、组播通常向其他端口泛洪。

  • 防环:多网桥场景常用生成树协议 STP/RSTP 防止广播风暴。

  • 隔离冲突域,不隔离广播域:普通网桥/交换机每个端口隔离冲突域,但默认仍处于同一广播域。

  • 交换机本质上可看作多端口网桥。

2. 防火墙的端口防护

端口防护是指防火墙针对TCP/UDP 端口进行的访问控制。它通常基于五元组:

源 IP、目的 IP、源端口、目的端口、协议

常见措施:

  • 默认拒绝,只开放必要端口;

  • 限制来源 IP/网段;

  • 限制访问方向,如仅允许入站或出站;

  • 限制连接速率,防扫描、暴力破解、SYN Flood;

  • 状态检测,只允许已建立连接的回包;

  • 记录日志、告警和审计。

作用:减少暴露面,防止未授权访问高危端口,如 22、3389、3306、6379 等。

3. Python 演示:用 socket 做应用层端口防护

严格来说,下面不是“系统防火墙规则”,而是应用层简易防火墙:程序自己监听某端口,只允许白名单 IP 访问,其他连接立即关闭。

python

import socket import threading LISTEN_IP = "0.0.0.0" LISTEN_PORT = 9999 ALLOWED_IPS = {"127.0.0.1", "192.168.1.10"} # 白名单 def handle(conn, addr): ip, port = addr if ip not in ALLOWED_IPS: print(f"[拒绝] {ip}:{port}") conn.close() return print(f"[允许] {ip}:{port}") try: conn.settimeout(5) data = conn.recv(1024) conn.sendall(b"OK: " + data) except Exception as e: print("异常:", e) finally: conn.close() def main(): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((LISTEN_IP, LISTEN_PORT)) s.listen(50) print(f"应用层端口防护:监听 {LISTEN_IP}:{LISTEN_PORT}") while True: conn, addr = s.accept() threading.Thread(target=handle, args=(conn, addr), daemon=True).start() if __name__ == "__main__": main()

如果要创建真正的系统防火墙规则,需要调用系统命令,例如 Linux:

python

import subprocess # 只允许 192.168.1.10 访问 9999,其他丢弃 subprocess.run([ "iptables", "-A", "INPUT", "-p", "tcp", "--dport", "9999", "-s", "192.168.1.10", "-j", "ACCEPT" ], check=True) subprocess.run([ "iptables", "-A", "INPUT", "-p", "tcp", "--dport", "9999", "-j", "DROP" ], check=True)

注意:这段使用的是subprocess,不是socket库。

追问

  1. 网桥和路由器有什么区别?
    网桥工作在数据链路层,按 MAC 转发,不隔离广播域;路由器工作在网络层,按 IP 转发,隔离广播域,并能连接不同网段。

  2. 端口防护是否等于服务安全?
    不等于。端口防护只是访问控制,服务本身的漏洞、弱口令、权限配置错误仍需补丁、加固、WAF、最小权限等措施。

  3. socket 应用层过滤和 iptables 防火墙有什么区别?
    socket 过滤通常在 TCP 三次握手完成后才判断,无法防 SYN Flood,也不能保护其他进程已监听的端口;iptables 在内核网络栈更早丢弃报文,效率更高,能保护整个主机端口。


1.2 谈一谈 ARP 地址解析协议的工作原理

ARP,Address Resolution Protocol,用于IPv4 地址到 MAC 地址的解析。同一局域网内,主机发送 IP 包前需要知道下一跳的 MAC 地址。

工作过程:

  1. 主机 A 要发送数据给同网段主机 B,先查本机 ARP 缓存。

  2. 若没有 B 的 MAC,A 广播 ARP Request:

    • 发送方 IP/MAC:A 的 IP/MAC;

    • 目标 IP:B 的 IP;

    • 目标 MAC:全 0,表示未知。

  3. 局域网内所有主机收到广播,但只有 IP 匹配的主机 B 处理。

  4. B 单播 ARP Reply,告诉 A:“B 的 IP 对应我的 MAC。”

  5. A 更新 ARP 缓存,然后用 B 的 MAC 封装以太网帧发送数据。

  6. 若目标不在同一网段,A 解析的是网关的 MAC,而不是远端主机 MAC。

ARP 缓存有老化时间,以减少广播并适应网络变化。免费 ARP 可用于检测 IP 冲突或更新缓存。

安全风险:ARP 欺骗、ARP 中间人攻击。防护:静态 ARP、DHCP Snooping、动态 ARP 检测 DAI、端口安全、ARP 防火墙等。

追问

  1. ARP 请求为什么广播,而 ARP 应答通常单播?
    请求时不知道目标 MAC,必须广播询问;应答时请求方的 IP/MAC 已知,可以直接单播回复。

  2. ARP 缓存有什么作用?
    缓存 IP 到 MAC 的映射,减少重复广播,提高转发效率;老化机制可防止缓存长期过时。

  3. 如何防止 ARP 欺骗?
    可使用静态 ARP 绑定、DHCP Snooping、动态 ARP 检测 DAI、端口安全、ARP 防护网关,以及网络分段和监控告警。


1.3 谈一谈 TCP 的三次握手过程。为什么会采用三次握手?若两次握手可以吗?

TCP 三次握手:

  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。

为什么需要三次:

  • 确认双方都具备发送和接收能力;

  • 同步双方初始序列号 ISN;

  • 防止历史失效的连接请求突然到达,导致服务器建立无效连接;

  • 第三次 ACK 让服务器确认客户端已收到自己的 SYN+ACK。

两次握手不行:

  • 服务器发送 SYN+ACK 后若直接认为连接建立,但客户端可能没收到;

  • 旧的重复 SYN 可能让服务器建立“幽灵连接”,浪费资源;

  • 服务器无法确认客户端是否收到自己的初始序列号;

  • 因此三次是最小可靠建立连接次数。

追问

  1. SYN Flood 攻击与三次握手有什么关系?
    攻击者大量发送 SYN 但不完成第三次 ACK,服务器维护大量半连接,耗尽队列资源。防护可用 SYN Cookie、限速、代理等。

  2. TCP 初始序列号为什么要随机?
    防止攻击者预测序列号,进行伪造报文、注入数据或会话劫持。

  3. TCP 关闭为什么通常需要四次挥手?
    因为 TCP 是全双工,两个方向要独立关闭。被动方收到 FIN 后先 ACK,等应用处理完再发 FIN,因此 ACK 和 FIN 常分开,形成四次。


1.4 面向连接和非面向连接服务的特点是什么?

面向连接服务

代表:TCP。
特点:

  • 通信前建立连接,通信后释放连接;

  • 提供可靠传输:确认、重传、排序、去重;

  • 提供流量控制、拥塞控制;

  • 数据有序到达;

  • 开销大,时延相对高;

  • 适合文件传输、网页、邮件、数据库等。

非面向连接服务

代表:UDP。
特点:

  • 不建立连接,每个报文独立发送;

  • 不保证可靠、不保证顺序、不保证不重复;

  • 开销小、时延低、实时性好;

  • 适合音视频、DNS、实时游戏、广播/组播等;

  • 可靠性可由应用层补充。

追问

  1. TCP 一定可靠吗?UDP 一定不可靠吗?
    TCP 提供传输层可靠机制,但不保证应用层业务一定成功;UDP 本身不保证可靠,但应用层可加 ACK、重传、序号来实现可靠。

  2. 实时音视频为什么常用 UDP/RTP?
    实时业务更怕延迟和重传抖动,少量丢包可容忍。UDP 时延低,配合 RTP/RTCP、FEC 可改善质量。

  3. 如何基于 UDP 实现可靠传输?
    可在应用层实现序号、确认、超时重传、去重、排序、拥塞控制,如 QUIC、KCP、RUDP 等。


1.5 什么叫做差错检测?常见的差错检测技术有哪些?

差错检测是指:在数据传输或存储过程中,检测数据是否发生比特错误、丢失、篡改等。通常发送方附加冗余校验信息,接收方重新计算并比对。

常见技术:

  • 奇偶校验:增加 1 位,检测奇数个比特错误,简单但能力弱。

  • 校验和 Checksum:如 IP/TCP/UDP 首部校验和,反码求和,检错能力一般。

  • CRC 循环冗余校验:多项式除法,检错能力强,广泛用于以太网帧、磁盘、压缩文件。

  • 汉明码:不仅能检错,还能纠正一位错,常用于 ECC 内存。

  • FEC 前向纠错:发送冗余,接收端直接纠错,适合实时通信。

  • 哈希/MAC:如 HMAC,用于完整性认证和防篡改,不单是传输差错检测。

  • BCC 块校验字符:用于某些通信协议。

追问

  1. 奇偶校验和 CRC 有什么区别?
    奇偶校验简单,只能检测部分错误;CRC 用多项式运算,能检测更多错误,尤其突发错误,检错能力更强。

  2. 校验和为什么通常不能纠错?
    校验和冗余信息少,只能判断“可能出错”,不能定位具体错误比特;纠错需要更多冗余,如汉明码、FEC。

  3. 汉明码和 CRC 的典型应用场景是什么?
    汉明码常用于内存 ECC 等需要纠错的场景;CRC 常用于以太网、磁盘、文件传输等需要强检错的场景。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询