(4)传输层
1. 基本概念
简单来说,网络层实现了设备与设备的通信问题。但是在实际应用中,一个设备上通常会运行多个进程,这些进程可能都需要进行网络通信。因此,我们需要一种机制来区分这些进程的通信数据,这就是端口的作用。每个进程都会监听一个或多个端口,当这些端口收到数据时,对应的进程就会处理这些数据。
当客户端程序和服务器程序建立通信连接后,我们需要规范这个通信流程。这包括如何处理数据丢包的问题,以及如何控制通信的速度。这些问题通常由传输层的协议(如TCP或UDP)来处理。
除此之外,我们还需要研究以下问题:
- 如何处理网络拥塞?网络拥塞可能会导致数据传输速度下降,甚至导致网络连接断开。我们需要一种机制来检测和控制网络拥塞。
- 如何保证数据的顺序?由于网络的不确定性,数据包可能会乱序到达。我们需要一种机制来保证数据包的顺序。
- 如何保证数据的完整性?在数据传输过程中,可能会发生错误,导致数据的损坏。我们需要一种机制来检测和纠正这些错误。
- 如何保证通信的安全性?在开放的网络环境中,我们需要保护数据不被未授权的用户访问或修改。
而这些研究问题一般就体现在TCP或者UDP协议中。
而TCP和UDP最简单的区别就是,一个用于流式数据,一个用于非流式数据。
流式数据的特点就在于数据可以丢包,比如说视频任务等,数据处理完就无所谓了。
非流式数据的特点在于数据需要有完整的控制能力,比如说下载任务,每一个数据包都不能丢,而且得有序。
除此之外,一般而言TCP被认为是控制能力强,但牺牲一定性能的;而UDP则是控制能力弱,但性能最快的。
在两个协议之间,有很多从控制能力和性能之间做trade-off
的魔改协议。
如QUIC(Quick UDP Internet Connections)。这是由Google开发的一种基于UDP的传输层协议。它的目标是降低网络延迟,提高网络通信的效率,特别是在有丢包和延迟的网络环境中。
2. 对比
2.1 TCP和UDP的区别
TCP(传输控制协议)和UDP(用户数据报协议)是两种常见的传输层协议,它们有以下主要的区别:
-
连接性:TCP是一种面向连接的协议,它在数据传输前需要建立连接.而UDP是一种无连接的协议,它不需要建立连接就可以直接发送数据.
-
可靠性:TCP提供了数据传输的可靠性保证,它使用了确认/重传和流量控制等机制来确保数据的正确传输.而UDP不提供数据传输的可靠性保证,它只是简单地将数据发送出去,不关心数据是否能正确到达.
-
传输方式:TCP是一种流式协议,它将数据看作是一个无结构的字节流.而UDP是一种数据报协议,它将数据划分为一个个的数据报,每个数据报都独立传输.
-
速度:由于TCP需要进行连接建立和可靠性保证,所以它的传输速度通常比UDP慢.而UDP由于没有这些开销,所以它的传输速度通常比TCP快.
-
应用场景:TCP通常用于需要可靠传输的应用,例如Web浏览/电子邮件和文件传输等.而UDP通常用于对实时性要求高的应用,例如语音和视频通信/在线游戏等.
以上就是TCP和UDP的主要区别.需要注意的是,选择使用TCP还是UDP需要根据应用的具体需求来决定.
2.2 TCP和UDP相关的协议与端口号
基于TCP的协议:
- HTTP:端口80,用于Web浏览
- HTTPS:端口443,用于安全的Web浏览
- FTP:端口20和21,用于文件传输
- SSH:端口22,用于安全的远程登录
- Telnet:端口23,用于远程登录
- SMTP:端口25,用于电子邮件发送
- POP3:端口110,用于电子邮件接收
- IMAP:端口143,用于电子邮件接收
基于UDP的协议:
- DNS:端口53,用于域名解析
- DHCP:端口67和68,用于动态主机配置
- SNMP:端口161和162,用于简单网络管理
- RTP:端口通常在5000到6000之间,用于实时音视频传输
需要注意的是,以上的端口号都是默认的端口号,实际使用中可以根据需要更改.