传输层的特点

TCP:保证数据的可靠和顺序交付

端口号

TCP 和 UDP 分别拥有自己的端口号,两者互不干扰。也就是说,TCP 进程和 UDP 的进程可以使用同一个端口号。可以从两个角度来帮助理解:

  • IP 协议会先根据协议类型,将数据交给 TCP 或者 UDP,再由 TCP/UDP 根据端口号交给不同的进程。
  • 系统在绑定套接字时,需要提供三个参数:IP,协议,端口。

为什么用端口号标识应用程序,而不是 pid?
不同的计算机系统使用的进程编号是不同的,端口号就是对应用程序编号的抽象。(计算机领域,抽象出一个中间层,问题就简化了很多)

服务器端口号

  • 0~1023 是服务器使用的熟知端口号
  • 1024 ~ 49151 是服务器使用的登记端口号,使用这些端口号的应用程序需要向组织登记

客户端端口号

  • 49152 ~65535 是供客户端使用的端口号

TCP 和 UDP 的对比

TCP UDP
面向的对象 字节流
为每个字节都设置了编号
数据报
传输层不进行拆分和合并操作
通信对象 只支持 1 对 1,全双工的 (1,多) 对(1,多)
是否有连接 有连接的
需要维护连接相关的数据结构(缓存,连接对象等,窗口)
无连接
分组首部 20B 8B
流量控制 给予滑动窗口实现流量控制 没有
拥塞控制 设置有拥塞窗口 没有
适用场景 对可靠性要求高的程序:
远程登陆
对实时性要求高的程序:
能够容忍数据丢失,不能容忍大的时延,比如电话和会议
差错校验 可选的,对首部以及数据部分进行
可靠性 重传:超时重传;以及 3 冗余 ACK 重传
序号与确认机制
没有重传和确认