Skip to content

在 OSI 参考模型(Open Systems Interconnection)中,不同的层级有明确的职责和对应的数据传输单元(PDU, Protocol Data Unit),其目的为了更好地定义网络通信过程中的数据封装、传输和解封装。下面关于每层进行一个简单说明,具体如下:

  • 应用层(Application Layer)负责用户交互和服务接口,数据传输单位为数据(Data)。
  • 表示层(Presentation Layer)负责数据的编码、解码与加密,数据传输单位为数据(Data)。
  • 会话层(Session Layer)负责建立、管理和终止会话,数据传输单位为数据(Data)。
  • 传输层(Transport Layer)负责提供可靠数据传输和错误恢复,数据传输单位为数据(Data)。
  • 网络层(Network Layer)负责路径选择和逻辑地址分配,数据传输单位为报文/包(Packet)。
  • 数据链路层(Data Link Layer)负责将数据组织为帧并处理差错控制,数据传输单位为帧(Frame)。
  • 物理层(Physical Layer)负责比特流的传输,例如电压、光信号等,数据传输单位为比特(Bit)。

0df3d7ca7bcb0a46ea7b9d826363f6246b60af2b

对于爬虫开发者来说,主要接触的网络协议集中在应用层、表示层、会话层、传输层和网络层,而数据链路层、物理层因太过底层与爬虫开发的关系相对较小,除非遇到特殊需求(如流量分析、网络攻击模拟等)。下面我们对爬虫与主要接触的层级之间的交互进行一个说明,具体如下:

  • 应用层(Application Layer)与用户交互,处理实际的业务逻辑(爬虫开发中最常接触的层级)。

    • HTTP/HTTPS:大多数 Web 爬虫通过 requestshttp.client 发送 HTTP/HTTPS 请求。
    • DNS:域名解析,通常自动完成,但在某些情况下(如绕过反爬),可能需要手动处理。
    • FTP:抓取文件资源时偶尔会用到。
    • WebSocket:实时通信协议,在一些动态网站抓取中需要使用。
  • 表示层(Presentation Layer)负责数据的格式化、加密、解密和压缩。

    • 编码/解码:如网站返回 JSON、XML、HTML 等格式的数据,需要进行解析。
    • 加密/解密:绕过加密数据的反爬机制时,需处理加密解密操作。
    • 压缩/解压缩:部分响应数据可能使用 Gzip 压缩。
  • 会话层(Session Layer)建立、管理和终止会话。

    • Cookie 和 Session:维持与服务器的状态,例如登录信息的保持。
    • 身份验证:如通过 OAuth、JWT 等认证机制访问 API。
    • WebSocket 会话管理:用于处理长连接。
  • 传输层(Transport Layer)提供端到端的通信保障,负责数据的可靠性传输(如 TCP)或快速传输(如 UDP)。

    • TCP:HTTP/HTTPS 基于 TCP 传输。
    • UDP:某些特殊协议(如 DNS)基于 UDP。

表示层

python
import gzip

data = gzip.decompress(response.content)

会话层常见工具

  • Python 的 requests.Session 对象。

  • 浏览器开发者工具中的 Cookie 和 Session 管理。

  • 爬虫中的表现:

    • 超时重传、丢包检测等。

    • 可配置的连接池和重试机制。

    • 示例:

      python
      import requests
      
      response = requests.get('https://example.com', timeout=10)

5. 网络层 (Network Layer)

  • 用途:负责路由和逻辑地址(IP 地址)管理。

  • 常见协议:

    • IP:确定请求目标。
    • ICMP:用于 Ping 测试网络连通性。
  • 爬虫相关的应用:

    • IP 代理:使用代理池绕过 IP 封锁。

    • IP 地址解析:通过 DNS 或解析工具将域名转换为目标 IP。

    • 调试连通性:

      python
      import os
      os.system("ping example.com")

数据链路层和物理层对爬虫开发的影响

  • 数据链路层物理层 涉及硬件、网卡、MAC 地址以及比特流传输,主要用于底层网络通信。
  • 这些层通常由操作系统和硬件处理,爬虫开发者不直接与其交互。
  • 如果爬虫涉及深度网络分析(如抓包、逆向工程或流量监控),可能需要关注这些层。例如:
    • 抓包工具:Wireshark 分析帧数据。
    • 底层协议分析:ARP 或特定数据链路协议。

总结

爬虫开发者主要关注的网络协议层级:

  • 应用层:最重要,直接处理 HTTP 请求、HTML 数据解析。
  • 表示层:解码、解压、加密解密。
  • 会话层:管理 Cookie、Session。
  • 传输层:关注超时、重试、TCP 连接管理。
  • 网络层:主要与代理、IP 地址相关。

数据链路层和物理层 虽然重要,但日常爬虫开发中不常接触,只有在网络调试或特殊需求时才会涉及。

Wireshark

最强大的抓包工具,直接在网卡进行抓包,,但数据展示直观度不如上面工具。

Wireshark(前身 Ethereal)是一个网络封包分析软件。因为使用 WinPCAP 作为接口,直接与网卡进行数据报文交换,撷取网络封包,并尽可能显示出最为详细的网络封包资料。

工具优势:直接在网卡上进行抓包,所抓包的信息资料也最为详细。因为是在物理层抓包,可以对使用代理 IP 的爬虫程序抓包。

工具劣势:需要一定时间学习使用,上手难度较高;

140124-5f3385b4978ca

启动界面:

774327-20181216081023389-2002447427

选择网卡:选择菜单栏上 Capture -> Option,勾选对应网卡(这里需要根据各自电脑网卡使用情况选择,如果是无线网就勾选 WLAN,如果是有线网就勾选以太网,简单的办法可以看使用的 IP 对应的网卡),点击Start,启动抓包。

774327-20181216081719715-1763002076

抓包界面:

774327-20181216083953866-9796212

颜色说明:数据包列表区中不同的协议使用了不同的颜色区分,标识定位在菜单栏View --> Coloring Rules。

774327-20181216092058380-751854098

Display Filter(显示过滤器):用于设置过滤条件进行数据包列表过滤。菜单路径:Analyze --> Display Filters。

774327-20181216161033619-451281242

IP地址过滤:为避免其他无用的数据包影响分析,可以通过在过滤栏设置过滤条件进行数据包列表过滤,获取结果如下。说明:ip.addr == 119.75.217.26 and icmp 表示只显示ICPM协议且源主机IP或者目的主机 IP 为 119.75.217.26 的数据包。

774327-20181216082650625-902953031

Packet List Pane(数据包列表):显示捕获到的数据包,每个数据包包含编号,时间戳,源地址,目标地址,协议,长度,以及数据包信息。

774327-20181216161154412-766346180

Packet Details Pane(数据包详细信息):在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。各行信息分别为:

  • Frame:传入到物理层的数据帧概况;
  • Ethernet II:数据链路层以太网帧头部信息;
  • Internet Protocol Version 4:网络层 IP 包头部信息,此处是IPv4;
  • Transmission Control Protocol:传输层的数据段头部信息,此处是TCP;
  • Hypertext Transfer Protocol:应用层的信息,此处是 HTTP 协议;

2013050217125736394

TCP包:查看TCP包具体内容。

2013050217125787134

时间戳显示格式:调整方法为 View -->Time Display Format --> Date and Time of Day。

774327-20181216113851595-75851722

建议

更多 Wireshark 使用方法参看:wireshark抓包新手使用教程