进入传输层,包括两个重要的协议——TCP和UDP
TCP 和 UDP 的区别
(1)TCP 是面向连接的,UDP 是面向无连接的。所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
(2)TCP 提供可靠交付。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达;UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。
(3)TCP 是面向字节流的。发送的时候发的是一个流,没头没尾;UDP 继承了 IP 的特性,基于数据报的,一个一个地发,一个一个地收。
(4)TCP 是可以有拥塞控制的。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点;UDP 就不会,应用让我发,我就发,管它洪水滔天。
总结:TCP 是一个有状态服务;UDP 则是无状态服务。
如果 MAC 层定义了本地局域网的传输行为,IP 层定义了整个网络端到端的传输行为,这两层基本定义了这样的基因:网络传输是以包为单位的,二层叫帧,网络层叫包,传输层叫段。我们笼统地称为包。包单独传输,自行选路,在不同的设备封装解封装,不保证到达。
UDP 包头
当我发送的 UDP 包到达目标机器后,发现 MAC 地址匹配,于是就取下来,将剩下的包传给处理 IP 层的代码。把 IP 头取下来,发现目标 IP 匹配,IP头里面有个8位的协议,里面会指明使用了TCP还是UDP协议。处理完传输层的事情,内核的事情基本就干完了,无论是TCP还是UDP都监听一个端口,通过这个端口号来区分应用程序。
UDP特点
(1)沟通简单:没有大量的数据结构、处理逻辑、包头字段。
(2)轻信他人:它不会建立连接,通过监听的端口,任何用户都可以传数据,他也可以传给任何人数据,甚至可以同时传给多个人数据。
(3)愣头青,做事不懂权变:无法实现拥塞控制,无论发生怎样严重的网络丢包,都不会调整发送速度。
UDP应用场景
(1)需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用。
(2)不需要一对一沟通,建立连接,而是可以广播的应用。UDP 的不面向连接的功能,可以使得可以承载广播或者多播的协议。对于多播,我们在讲 IP 地址的时候,讲过一个 D 类地址,也即组播地址,使用这个地址,可以将包组播给一批机器。
(3)需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候。
具体应用场景
(1)QUIC(全称Quick UDP Internet Connections,快速 UDP 互联网连接)是 Google 提出的一种基于 UDP 改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。被选为第三代HTTP协议
(2)流媒体的协议
(3)实时游戏
(4)IoT 物联网
(5)移动通信领域