1. 传输层协议:TCP vs. UDP
我们都知道HTTP协议,运行于TCP协议之上,是万维网的运转的基础。作为一名前端开发,我们似乎理所应当熟悉HTTP、TCP协议,以致于HTTP状态码、报文结构、TCP三次握手、四次挥手等等都已经成为了标配的基础面试题。但对于其他协议,我们似乎多多少少感到陌生。
下图是一个TCP/IP通讯协议的4层结构图,在基于网际层的运输层,它提供了节点间的数据传送服务,其中最为人所熟知的 TCP协议(Transmission Control Protocol)和 UDP协议(User Datagram Protocol)。
两个协议本身涉及到内容非常多,但在实际选择使用中,我们不妨直接通过对比TCP和UDP,来去学习和理解它们。
1.1. TCP和UDP对比
总体上有以下三点不同:
TCP是面向连接的,UDP是无连接的。
TCP是面向字节流的,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的。
TCP提供可靠的传输,也就是说TCP连接传输的数据不会丢失,没有重复,并且按顺序到达,UDP提供不可靠传输。
1.1.1. UDP无连接,TCP面向连接
UDP在传输数据之前不需要建立连接,传输双方可以随时发送数据,因此UDP是无连接的。而TCP协议在传输数据之前三次握手建立连接,在结束后需要四次挥手释放连接,具体细节在此不做赘述。
1.1.2. UDP面向报文,TCP面向字节流
对于UDP,发送接收方应用层只给UDP传输层发送或接收报文,而UDP除了传输外的处理只是对应用层报文添加或摘除UDP首部,保留了应用层报文,因此说UDP是面向报文。
对于TCP而言,TCP只将应用层交下来的数据当做一连串的无结构字节流,仅将他们存入缓存并根据策略构建TCP报文进行发送,而接受方TCP只提取数据载荷部分存入缓存,并同时将缓存字节流交给应用层。TCP不保证双方应用层的发送和接收数据具有对应大小关系。因此说它是面向字节流的,而它也是TCP实现流量控制和拥塞控制的基础。