传输层通过 IP 网络连接应用程序端点。TCP 和 UDP 都使用 16 位端口号,但向应用程序公开的通信模型和保证不同。
网络基础 · 第 6 课
传输层
学习 TCP 和 UDP 如何使用端口,并在应用程序端点之间提供不同的传送语义。
端口与套接字
目标端口帮助操作系统把流量送达监听套接字。标识连接或流量不能只靠一个端口:协议、源地址与目标地址、源端口与目标端口都很重要。因此,同一个服务器端口可以同时服务许多客户端。
一个 TCP 服务器端口如何同时处理多个客户端?
TCP 字节流
只要连接仍然可用,TCP 就会提供有序、可靠的字节流。它使用序列号、确认、重传、流量控制和拥塞控制。TCP 不保留应用程序消息边界:一次写入可能通过多次读取到达,多次写入也可能由一次读取返回。应用程序必须自行定义成帧方式。
可靠并不等于绝对送达。连接可能超时、重置或失败,收到确认也不能证明应用程序已将数据持久提交。
TCP 如何处理应用程序消息边界?
TCP 握手
正常 TCP 连接以三次握手开始:
- 发起方发送带有初始序列信息的
SYN。 - 监听方回复
SYN-ACK,带上自己的序列信息和确认。 - 发起方返回
ACK。
该过程在两个端点中建立传输状态。它不会验证应用服务器的身份,也不能证明所请求的应用操作会成功。
正常的 TCP 三次握手顺序是什么?
UDP 数据报
UDP 保留数据报边界,并提供基于校验和的错误检测,但不提供 TCP 式连接状态、排序、重传、流量控制或拥塞控制。应用程序可以自行添加所需的可靠性或拥塞行为。UDP 并不必然更快;性能取决于协议设计、工作负载、路径和实现。
UDP 向应用程序提供哪项属性?
检查传输端点
使用 ss 以只读方式检查监听和已连接套接字:
$ ss -lntup
$ ss -tn state established
查看进程详情可能需要特权。监听套接字只能证明传输边界上的本地就绪状态;防火墙、路由、地址族、TLS 和应用程序健康仍需通过适当测试确认。
监听中的 TCP 套接字能确定什么?
课程已完成
你已完成 传输层
现在,你可以区分 TCP 字节流行为与 UDP 数据报行为。
使用协议、地址和端口标识一个流。
将 TCP 视为不保留消息边界的可靠有序字节流。
认识 TCP 握手能够和不能证明的内容。
将 UDP 的可靠性与拥塞行为视为应用程序设计选择。
在本地套接字状态之外验证应用程序健康。