网络通信是怎样完成的:域名解析、连接建立与数据传输
本文通过访问网站、实时语音、文件上传、邮件发送、实时状态更新和设备上报六个场景,结合简短说明与流程箭头,介绍各自从通信准备到数据接收的完整过程。
沿着这些过程,可以看清
DNS、TCP、UDP、TLS与各应用层协议分别负责什么,以及它们怎样配合完成一次通信。
网络通信中的协议分工
常用的五层模型,说明数据从应用程序到网络,再到对方应用程序的过程。
| 层次 | 负责什么 | 相关协议或技术 |
|---|---|---|
| 应用层 | 规定查询、请求、命令和消息怎样交换 | DNS、HTTP、FTP、SMTP、WebSocket、MQTT |
| 传输层 | 为通信双方的应用提供数据传输 | TCP、UDP |
| 网络层 | 根据目标地址,在不同网络之间转发数据 | IP |
| 数据链路层 | 在相邻设备之间传送数据帧 | 以太网、Wi-Fi 的链路机制 |
| 物理层 | 通过电信号、光信号或无线信号传输比特 | 网线、光纤、无线传输 |
TLS解释
通信还可能需要安全保护。TLS(Transport Layer Security,传输层安全协议)提供加密、完整性保护和身份认证,用于保护传输内容、检测篡改,并验证通信对方的身份。
TLS 在这里不单独列为五层模型中的一层。在基于 TCP 的 HTTPS 通信中,HTTP 内容先经过 TLS 保护,再交给 TCP 传输:
访问网站:从域名到网页内容
以首次打开 https://example.com/ 为例,采用基于 TCP 的 HTTP/1.1 和 TLS 1.3。
① 查询地址
电脑 ⇄ DNS 解析服务:查询 example.com,获得 IP 地址
② TCP 三次握手:建立传输连接
客户端 → 服务器:SYN(同步),请求连接,告知自己的起始序列号
服务器 → 客户端:SYN + ACK(同步并确认),确认收到,告知自己的起始序列号
客户端 → 服务器:ACK(确认),确认收到服务器的起始序列号
③ TLS 握手:准备安全通信(简化)
浏览器 → 服务器:提供支持的加密方式和密钥协商信息
服务器 → 浏览器:选定参数、提供协商信息,并用证书和签名证明身份
浏览器验证网站身份,双方校验握手结果,随后使用生成的密钥保护通信
④ HTTP 请求与响应
HTTP 规定请求和响应的格式,内容经过 TLS 保护,由 TCP 传送。
浏览器 → 网站服务器:GET /,请求网站首页
网站服务器 → 浏览器:200 OK,返回首页的 HTML 内容
⑤ 展示页面
浏览器:解密响应 → 解析网页 → 加载图片、样式等资源 → 展示页面HTTP 让服务器知道浏览器请求哪个资源,也让浏览器知道处理结果和返回内容;TLS 保护这些信息,TCP 可靠、有序地传输数据,IP 和下层网络负责将数据送达。
实时语音:通过 UDP 传递声音
以使用 SIP 服务、声音可以在双方之间直接传送的网络电话为例。
① 准备通话
双方通过 SIP 呼叫、接听,用 SDP 说明声音怎么编码、发到哪里。
你的程序 ⇄ SIP 服务 ⇄ 对方程序:呼叫、接听并交换通话参数
② 发送声音
声音编码后,由 RTP 添加编号和时间信息,再通过 UDP 发送。
你的设备 → 对方设备:UDP 传送 RTP 声音数据
③ 接收与播放
对方程序根据 RTP 信息整理声音,再解码播放。
接收数据 → 整理 → 解码 → 扬声器播放UDP 不保证送达和顺序,声音丢失或迟到时,由语音程序决定补偿、等待或跳过。双方按相同流程双向传声,挂断时通过 SIP 结束通话。
上传文件:FTP 怎样分开传命令和文件
以通过普通 FTP 的被动模式上传图片为例。
① 连接与登录
通过 DNS 查询地址,再经过 TCP 三次握手建立控制连接并登录。
客户端 ⇄ DNS 解析服务:查询服务器地址
客户端 ⇄ FTP 服务器:TCP 三次握手、FTP 登录
② 准备上传
通过控制连接取得数据地址和端口,再经过一次 TCP 三次握手建立数据连接。
客户端 ⇄ FTP 服务器:TCP 三次握手,建立数据连接
③ 上传图片
上传命令和结果走控制连接,图片内容走数据连接。
客户端 → FTP 服务器:图片内容(数据连接)
FTP 服务器 → 客户端:上传结果(控制连接)FTP 用控制连接管理操作,用数据连接传输文件,两条连接都通过 TCP 传送数据。
发送邮件:从提交到收件邮箱
以小明通过邮件客户端,使用 SMTP 给小红发送邮件为例。
① 小明提交邮件
客户端通过 DNS 查询发件服务器地址,建立 TCP 连接并完成所需认证,
再用 SMTP 把邮件交给发件服务器。
小明的客户端 → 发件服务器:我要给 xiaohong@example.com 发邮件
② 发件服务器寻找接收方
服务器查看邮箱中 @ 后面的 example.com,
查询 DNS 的 MX(邮件交换)记录,确定这个域的邮件由谁接收,
再查询该收件服务器的 IP 地址。
发件服务器 ⇄ DNS 解析服务:example.com 的邮件交给哪台服务器?
③ 转发并放入邮箱
发件服务器与收件服务器建立 TCP 连接,通过 SMTP 转发邮件;
收件邮件系统再把邮件放入小红的邮箱。
发件服务器 → 收件服务器:这是发给小红的邮件
收件服务器内:邮件投递程序 → 小红的邮箱两段邮件传输都使用 SMTP,新建 TCP 连接时都需要三次握手。DNS 则帮助查询服务器的位置。
实时状态更新:WebSocket 怎样持续交换消息
以浏览器通过 wss 查看订单状态为例,采用基于 HTTP/1.1 的开启握手。
① 建立连接
通过 DNS 查询服务器地址,再完成 TCP 三次握手和 TLS 握手。
浏览器 ⇄ DNS 解析服务:查询服务器地址
浏览器 ⇄ 订单服务器:建立 TCP 连接、准备安全通信
② 开启消息通道
浏览器请求改用 WebSocket,服务器同意,
浏览器检查握手回应后开始消息通信。
浏览器 → 订单服务器:请求改用 WebSocket
订单服务器 → 浏览器:101(切换协议),同意使用 WebSocket
③ 接收更新
订单出库后,服务器通过已有连接通知浏览器,页面随即更新。
订单服务器 → 浏览器:订单已出库连接建立后,双方都可以主动发送消息;wss 使用 TLS 保护通信内容。
设备上报:MQTT 怎样按主题分发消息
以传感器通过 MQTT 上报客厅温度、手机接收为例。消息服务器称为 Broker,本例使用 TLS 保护通信。
① 连接消息服务器
传感器和手机各自通过 DNS 查询 Broker 地址,完成 TCP、TLS 握手,
再向 Broker 申请 MQTT 通信。
传感器 ⇄ Broker:申请并确认 MQTT 连接
手机 ⇄ Broker:申请并确认 MQTT 连接
② 订阅主题
手机订阅“客厅温度”主题,告诉 Broker 自己想接收哪类消息。
手机 → Broker:订阅客厅温度
Broker → 手机:返回订阅结果
③ 发布与接收
传感器向“客厅温度”主题发布消息,Broker 转发给手机。
传感器 → Broker:发布温度 26.5℃
Broker → 手机:转发温度,手机更新显示多个设备可以订阅同一主题,由 Broker 分别转发消息,传感器无需逐个联系接收设备。
总结
六个场景的业务不同,但都需要多个协议配合:DNS 帮助查询目标,应用层协议规定消息的含义和交换方式,TCP 或 UDP 承担传输,IP 和下层网络将数据送往对方;需要安全保护时,再由 TLS 保护通信。
连接与握手是在准备通信,随后交换的才是网页请求、声音、文件、邮件或设备消息。地址查询可以利用缓存,可用连接也可以复用,因此后续通信不一定每次都从头开始。
版权所有
版权归属:念宇
