计网五层模型--运输层篇
本文最后更新于:2022年4月9日 中午
运输层位于应用层和网络层之间,是分层的网络体系结构中的重要组成部分。在OSI七层参考模型中,传输层是面向通信的最高层,也是用户功能的最底层。运输层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。
1. 进程之间的通信
如果了解网络层的同学会知道,网络层已经能把源主机上发出的数据传送给目的主机,那么我们为什么还要加上一个运输层呢?这就涉及到运输层的第一个关键功能,运输层能够将网络层的在两个端系统之间的交付服务扩展到运行在两个不同的端系统上的应用层之间的交付服务。
更通俗点说就是,主机用户应用层通信的主体,位于两台网络主机中真正的数据通信主体并不是这两台主机,而是两台主机中的各种网络应用进程。因此更为准确的说法是,两个主机进行通信就是两个主机中的应用进程互相通信。IP协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付到应用程序中。同一时间一台主机上可能有多个进程同时运行,这时候就需要为应用程序提供一个标识,那就是端口。而传输层就是为了提供这种端到端的服务而存在的。
可以看出网络层IP协议提供了主机之间的逻辑通信,而运输层协议提供的是进程之间的逻辑通信。
我们来举个例子,某用户在使用浏览器查找某网站的信息时,其主机的应用层运行着浏览器进程。如果在浏览网页的同时,还要使用电子邮件给网站发送信息,那么主机的应用层就还要运行电子邮件的客户程序。如上图,主机A的应用进程AP1和主机B的AP3通信,与此同时,AP2和和对方的AP4通信。从而引出了运输层的另一个重要功能–复用(multiplexing)和分用(demultiplexing)。
- 复用:在发送端,多个应用进程公用一个传输层;
- 分用:在接收端,传输层会根据端口号将数据分派给不同的应用进程。
“运输层提供应用进程间的逻辑通信”。
“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。
可以看出,网络层和和运输层有明显的区别,并且运输层还具有网络层无法替代的许多其他的功能。
- 运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。
- 运输层还要对收到的报文进行差错检测。
- 运输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP。
接下来,我们解决什么是端口?
2. 运输层端口
**TSAP(传输层服务访问点)**:是上层(应用层)调用下层(传输层)的一个逻辑接口,其实就是我们所说的端口,端口用来标识应用层的进程。在协议栈层间的抽象的协议端口是软件端口,运输层使用的是软件端口。
端口(port):端口用16位二进制来表示,所以共有65535个端口号。但是,端口号只具有本地意义,它只是为了标志本计算机应用层中的各个应用程序在和运输层交互时的接口。不同的计算机中,相同的端口号是没有关联的。
根据端口号范围可以分为两类:
1)服务器使用的端口号。这里又分为两类:一般将0~1023号端口分配给一些市面上公用的一些网络协议或应用,这一类端口号的分配被广大使用者所接受,事实上成为了一种标准,称为保留端口或者熟知端口号。另一类叫作登记端口号,数值为1024~49151。它是为没有熟知端口号的应用程序使用的。
2)客户端使用的端口号。剩下的是一般端口,可以自己使用。这类端口号仅在客户端进程运行时才动态选择,因此又叫短暂端口号。
套接字(Socket):
在网络中通过IP地址来标识和区别不同的主机,通过端口号来标识和区分一台主机中的不同应用程序。因此采用发送方和接收方的套接字组合来识别端点。即,
套接字=(主机IP地址,端口号) 它唯一的标识了网络中一个主机和其上的一个应用(进程)
我们接下来重新讨论网络的传输原理,即两个实体怎样才能在一种会丢失或者损坏数据的媒体上可靠地通信呢?
3. 两个重要协议
根据应用程序的需求不同,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP。当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但是这种逻辑通信信道相当于一条全双工的可靠信道。但是当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道。
全双工传输:通信双方可以同时发数据和接收数据。
3.1 TCP/IP 的运输层有两个不同的协议:
(1) 用户数据报协议 UDP (User Datagram Protocol)
(2) 传输控制协议 TCP (Transmission Control Protocol)
根据所使用的协议不同划分传输单元:
TCP 传送的数据单位协议是 TCP 报文段(segment)
UDP 传送的数据单位协议是 UDP 报文或用户数据报。
协议特点:
- UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。
- TCP 则提供面向连接的服务。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
3.2 UDP用户数据报协议
1)UDP特点
UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。
UDP 是无连接的,即发送数据之前不需要建立连接。
UDP 使用尽最大努力交付,即不保证可靠交付。它是尽力而为交付,不能确保每一个数据报都送达。
UDP 是面向报文的。就是指:UDP数据传输的单位是报文,且不会对数据作任何 拆分 和 拼接 操作。
在发送端,应用程序给传输层的UDP什么样的数据,UDP不会对数据进行切分,只增加一个UDP头并交给网络层。
在接收端,UDP收到网络层的数据报后,去除IP数据报头部后遍交给应用层,不会作任何拼接操作。
UDP 没有拥塞控制,很适合多媒体通信的要求。UDP始终以恒定的速率发送数据,并不会根据网络拥塞情况对发送速率作调整。这种方式有利有弊。
弊端:网络拥塞时有些报文可能会丢失,因此UDP不可靠。
优点:有些使用场景允许报文丢失,如:直播、语音通话,但对实时性要求很高,此时UDP还是很有用武之地的。UDP 支持一对一、一对多、多对一和多对多的交互通信。(支持多播)
UDP 的首部开销小,只有 8 个字节。
那么,你知道UDP不可靠具体体现在哪些方面吗?
当运输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交给应用进程。当发现目的端口号不正确时,就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方。
2)UDP的报文头
- 源端口
- 目的端口
- 长度:整个数据报的长度,最小长度是8(仅有首部)
- 检验和:整个数据报的检验和,检测UDP数据报在传输过程中是否有错,有错就丢弃。
伪首部:用于在计算校验和的时候,临时添加在UDP用户数据报前面,得到一个临时的数据报,伪首部既不向下传送也不向上递交。
3.3 TCP传输控制协议
1)TCP特点
- TCP 是面向连接的运输层协议。
- 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。
- TCP 提供可靠交付的服务。TCP发送的数据无重复、无丢失、无错误、与发送端顺序一致。
- TCP 提供全双工通信。TCP的两端既可以作为发送端,也可以作为接收端。
- 面向字节流。指的是:TCP以字节为单位。虽然传输的过程中数据被划分成一个个数据报,但这只是为了方便传输,接收端最终接受到的数据将与发送端的数据一模一样。
- TCP 连接是一条虚连接而不是一条真正的物理连接。
2)TCP发送报文所采用的方式:
- TCP 对应用进程一次把多长的报文发送到TCP 的缓存中是不关心的。
- TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
- TCP 可把太长的数据块划分短一些再传送。TCP 也可等待积累有足够多的字节后再构成报文段发送出去。
3)TCP的连接
TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字(socket)或插口。
端口号拼接到(contatenated with) IP 地址即构成了套接字。每一条TCP连接唯一地被通信两端的两个端点所确定。
TCP 连接 ::= {socket1, socket2} = {(IP1: port1), (IP2: port2)}
同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在多个不同的TCP连接中
4)TCP数据报格式
具体字段意义可参见–TCP报文格式详解
在下一篇运输层篇之TCP中将说明这些原理是如何体现在因特网面向连接的运输协议TCP中,并且讨论一个重要问题,即如何控制运输层实体的传输速率以及避免网络中的拥塞,或从拥塞中恢复过来?
参考资料:
《计算机网络(第5版) 谢希仁》
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!