计算机网络(五):运输层简介和UDP
承接上篇博客,从本篇开始介绍运输层。
为什么需要运输层
在讲网络层时就提到,网络层是尽力交付数据包,是不可靠的传输。既然如此,作为网络层的再上一层,运输层用于可靠的信息交付就是必然的了。于是,我们可以得出网络层存在的必要原因之一:完成可靠的交付。
再就是,在前一节,我们已经明白了,网络层是将数据从端传输到端。在网络中,数据的传输最高一级别就是到网络层(即路由器的最高一层是网络层)。既然网络层已经完成了端到端的传输,那么运输层除了校验之外,还有什么额外的功能呢?同样的,我们在上一节提到了,计算机网络的端是非常智能的,和电话机不一样。如此说来,在计算机网络的端的作用可不仅仅是单独的信息交互,而是十分复杂的信息见的交互。这主要表现在多进程的交互。因此端是很智能的,因此,存在很多进程同时和远程的进程进行交互。
这会导致一个问题,即使数据通过网络层传输到了端,但仍然不知道交付给那个进程。于是,运输层的另一个作用就是,将收到的IP数据包交付给对应的进程。
在这个过程中,运输层的运作有两个特点:
复用:发送方不同的应用进程都可以使用同一个运输层传输数据
分用:接收方的运输层在剥去报文的首部后,能够把这些数据交付给正确的应用进程
一句话总结:网络层是为主机提供通信,运输层是为进程提供通信
应用进程的标识——端口号
明确了运输层的作用,那么运输层是如何做到将数据包交给特定的应用进程呢?
毫无疑问,我们需要一个标识,而且这个标识应该在IP数据报的数据部分,这样运输层打开IP数据报后,将根据这个标识,将其交付给指定的应用进程。
在这里,我们需要达成一个共识,即标识是肯定需要的,若非如此,没有其他信息,必然无法得知将IP数据报交给谁。因此,需要额外的信息,这个额外的信息就是一种标识。
那么,哪些信息最后被选为标识了呢?
在此之前,我们先考虑下,有哪些信息是不能作为标识的。
首先,我们将目标放在了进程本身上,通过操作系统的学习,我们知道,每个进程都有一个整形的进程标识符。那么进程标识符可不可以作为交付IP数据报的依据呢?
答案是不行的,考虑如下的情况:
X端的A进程,发送信息给Y端的B进程,如果使用进程标识符,那么这个过程就会变成:X端先请求Y端获取B进程的进程标识符,然后A进程将B进程的进程标识符写入数据中在传输。如果传输到了Y端后,B进程早已被关闭,而又有一个和已被关闭的B进程相同进程标识符的C进程开启了,这时不就乱了吗?
上述过程暴露出的问题主要在于,进程标识符虽然唯一,但是是动态的。
综上,对于这种服务于运输层的标识符,我们的要求是唯一且不可变。
你也知道了,实际使用的是端口号。但需要明白什么使用端口以及端口的优点。
可以认为,端口就是专门为计算机网络服务的。如果你学习了操作系统,你会发现,其实全篇基本不会介绍端口号。因为端口是转为网络服务的。
UDP
UDP概述
运输层有两个协议,其一是TCP,另外一个是UDP。TCP很复杂,在这一节单讲UDP,为后面讲TCP做铺垫。
UDP–用户数据协议报(User Datagram Protocol),传输数据时不需要先建立连接,且远程主机的运输层收到UDP后不需要回复确认。另外,UDP不对发送的数据做校验,因此UDP是不可靠的交付。
说道这里,你可能会奇怪,这么说UDP和IP数据报貌似没什么区别,既没做整体的差错控制,又没有建立连接。没错,实际上UDP就是只在IP数据包之上增加了定位到应用程序和差错检验。
这就是说,运输层将上层(实际是应用层)的报文,加上UDP首部后就交给IP层。
这其中既没对报文进行合并也没拆分。
这里隐含了一个功能,即拆分报文的功能,既然运输层不对此进行拆分处理,那么实际上,这个功能是由应用程序来完成的。
另外一点,对于无连接的特性,由于UDP是无连接的,因此,对于UDP来说,应用层不存在拥堵机制。这是说,对于应用层来说,源主机不会因为堵塞而降低发送速率,这在实时应用中是很重要的(比如IP电话)。
除此之外,由于UDP不需要接收方回复,因此,也常用于多播。具体来说,UDP支持一对一,一对多,多对一,多对多的交互通信。
总结了上述特性,我们来总结下UDP的重要应用:
IP电话——比如,最常见的,微信的语音聊天,由于对实时性较高,因此必然是UDP,因为UDP的发送方发送速率不会受到网络拥堵的影响,这使得只要我们讲话,语音数据包都会被发送,而不会滞留。虽然会存在丢包导致断断续续。
多播——应用了UDP的一对多通信。
UDP首部
上面提到了,对于应用层的数据,运输层进行简单的包装得到UDP数据包,其实简单的包装就是添加一个UDP首部。
如果接收方拆开UDP首部后,发现目的端口号不正确或者不存在对应的端口号的程序,则直接丢弃,并有ICMP发送“端口不可达”差错报文给对方。参见上一节的traceroute功能。
上图中的伪首部主要用于检验UDP报文的正确性。