一、基础理论及其协议1.1 OSI 七层模型图层级应用层 (L7)表示层 (L6)会话层 (L5)传输层 (L4)网络层 (L3)数据链路层 (L2)物理层 (L1)主要功能用户接口、网络服务数据格式、加密、压缩建立、管理、终止会话端到端连接、可靠传输寻址、路由选择帧同步、物理地址寻址比特流、物理媒介典型协议/设备HTTP/HTTPS, DNS, FTPJPEG, ASCII, 加密/解密RPC, SQL, NFSTCP, UDP, 端口号IP, ICMP, 路由器Ethernet, 交换机, MAC电缆, 光纤, 集线器**注**重点关注HTTP、HTTPS、DNS、TCP、UDP、ICMP协议的作用以及所在的层级。1.2 网络协议与命令行工具 应用层 (Layer 7)HTTP/HTTPS超文本传输安全协议。用途用于浏览器和网站服务器之间的通信。补充HTTPS 在 HTTP 基础上增加了TLS/SSL 加密发生在表示层和会话层。代表命令curl—— 验证 Web 服务是否正常响应发起 HTTP/HTTPS 请求。必须依赖底层的解析和网络连通性除非走代理。DNS域名系统协议。用途将人类可读的域名如www.example.com解析为机器可读的 IP 地址。定位互联网的“电话簿”。代表命令nslookup—— 将域名如ollama.ai转换为真实的 IP 地址。 传输层 (Layer 4)TCP传输控制协议。特性面向连接、可靠、基于字节流。机制具有三次握手、错误重传、流量控制等机制。应用HTTP、HTTPS、SMTP 等主要基于 TCP。UDP用户数据报协议。特性无连接、不可靠、基于数据报。优势效率高、延迟低。应用DNS、视频流、VoIP 等常使用 UDP。代表命令telnet—— 验证目标主机的特定端口是否开放建立 TCP/UDP 三次握手。成功说明端到端的端口策略开放正常。 网络层 (Layer 3)ICMP互联网控制消息协议。用途用于传递网络状态和控制信息。代表工具ping测试连通性。traceroute跟踪路径。 核心协议与命令对比表层级协议名称核心命令命令主要用途应用层HTTP/HTTPS / DNScurl/nslookup模拟请求 / 域名解析传输层TCP / UDPtelnet端口策略与连通性验证网络层ICMPping/traceroute基础连通性 / 路由追踪二、网络故障诊断工具箱2.1 命令行VS代码VS含义注1重点关注第二列和第4列的命令及其含义部分排查网络问题常用。注2下述表格的行顺序为网络故障诊断顺序层及协议命令行及参数Python及参数功能说明应用层 - DNSnslookup registry.ollama.aisocket.gethostbyname(registry.ollama.ai)验证域名是否可解析为IP地址网络层 - ICMPping ark.cn-beijing.volces.comos.system(ping ...)验证网络连通性ICMP协议传输层 - TCPtelnet ark.cn-beijing.volces.com 443socket.create_connection((host, 443), timeout5)验证指定TCP端口是否可达应用层 - HTTPcurl -v http://ark.cn-beijing.volces.comrequests.get(http://...)发送HTTP请求-v查看详细响应应用层 - HTTPScurl -vk https://ark.cn-beijing.volces.comrequests.get(https://..., verifyFalse)发送HTTPS请求-k和verifyFalse忽略SSL证书验证应用层 - HTTPScurl -v https://ark.cn-beijing.volces.comrequests.get(https://...)发送HTTPS请求默认verifyTrue检查SSL证书应用层 - HTTP/HTTPScurl -v --proxy proxy_url https://...requests.get(https://..., proxies{http:proxy, https:proxy})通过代理发送请求2.2curl命令高频用法标准 HTTP 请求curl -v http://domain.com-v(verbose)打印详细的请求和响应信息请求头、状态码等。默认访问 80 端口等同于底层telnet domain.com 80。标准 HTTPS 请求curl -v https://domain.com默认访问 443 端口等同于底层telnet domain.com 443。默认会严格检查服务器的 SSL 证书是否有效。忽略证书的 HTTPS 请求curl -vk https://domain.com-k(insecure)忽略 SSL 证书校验常用于自签证书或证书过期时的测试。使用代理测试curl -v --proxy \http://ip:port\ https://domain.com强制让该请求通过指定的代理服务器转发。(注如果写成--proxy \\则表示强制不使用任何代理绕过系统环境变量)。2.3 Python示例代码注关注python代码与命令的关联实际情况常常是python代码调用不连通例如ollama pull xxx拉取模型失败底层也是python的http代码)。此时先通过curl命令诊断问题最后在代码中合适的位置添加参数。# HTTP请求importrequests responserequests.get(http://ark.cn-beijing.volces.com)# HTTP 本身就是明文的根本没有 SSL/TLS 握手过程所以对 HTTP 来说不存在“检查或忽略 SSL 证书”的概念。忽略证书-k专用于 HTTPS。# 带代理的HTTPS请求proxies{https:http://proxy.example.com:8080}responserequests.get(https://ark.cn-beijing.volces.com,proxiesproxies,verifyFalse)三、网络不连通的排障逻辑Ping 与 Telnet 的关系网络层 vs 传输层ping不通但telnet通正常现象。云厂商出于安全策略经常禁用 ICMP禁ping但不影响 80/443 业务端口的 TCP 连接。ping通但telnet不通说明服务器活着但服务没启或者该端口被防火墙安全组拦截了。Telnet 与 Curl 的关系传输层 vs 应用层telnet80 不通 ➡️curl http一定不通没有底层 TCP就没有上层 HTTP。本地telnet不通 ➡️ 但curl配合代理使用时可能成功。因为请求被发送给了代理服务器由代理服务器在远端完成了 DNS 解析和连通。telnet443 通 ➡️curl https大概率通但如果证书配错了、服务端报错 502 等应用层仍会失败。Nslookup 与 Curl 的关系DNS vs 代理机制本地nslookup解析失败 ➡️curl直接请求一定会失败找不到 IP。本地nslookup解析失败 ➡️ 但curl配合代理使用时可能成功。因为请求被发送给了代理服务器由代理服务器在远端完成了 DNS 解析。结论代理机制可以绕过本地的 DNS 污染或解析故障。四、关于代理Proxy的认知代理的作用范围代理通常工作在应用层如 HTTP 代理或会话层如 SOCKS5。工具的支持度curl是应用层工具原生支持并可以使用代理--proxy。浏览器同理。ping(网络层) 和telnet(传输层)无法直接使用HTTP 代理它们不认识应用层的代理协议。因此当网络环境必须依赖代理才能出网时ping和telnet测试不通是正常的只能用curl去验证最终连通性。五、总结诊断顺序先nslookup ark.cn-beijing.volces.com检查 DNS。再telnet ark.cn-beijing.volces.com 443检查端口。最后用curl -vk https://ark.cn-beijing.volces.com测试实际服务。如果 ping 不通无需担心重点通过telnet检查端口和通过curl检查服务。如果直连失败尝试通过代理访问如curl --proxy http://代理IP:端口。总结按照nslookup(找IP),ping(看主机存活),telnet(看端口策略),curl(看业务响应)的顺序或逆推逻辑几乎可以秒杀所有常见的网络连通性问题。