运输层服务
运输层位于应用层与网络层之间,在这一层中,最关键的是两种因特网运输层协议:TCP和UDP。
运输层协议为运行在不同主机上的应用进程提供了逻辑通信
- 通过逻辑通信,运行不同进程的主机好像直接相连一样,实际上它们通过了很多路由器和链路相连。应用进程使用运输层提供的逻辑通信功能彼此发送报文,而无需考虑承载这些报文的物理基础设施的细节。
- 运输层提供的是 进程和进程 之间的逻辑通信。
运输层和网络层的关系
在协议栈中,运输层刚好位于网络层之上。
网络层提供了主机之间的逻辑通信,而运输层提供了不同主机上进程之间的逻辑通信。
以家庭之间的通信为例:
- A家庭中有a、b、c、d四个成员;B家庭中有 q、w、e、r四个成员;
- A家庭中a成员收取整个家庭的信件后负责去邮局寄信和取信,B家庭中q成员收取整个家庭的信件后负责去邮局寄信和取信
- 邮局负责将信件送达到另一个地区的邮局
在此例中, 邮局负责两个家庭之间的逻辑通信,是将信件从一家送到另一家,而不是从一个人送到另一个人. 另一方面,a和q成员收取和分发家庭成员的信件,在各个家庭成员来看,a和q就是邮件服务,尽管他们只是端到端交付过程的一部分.
此例中:
- 应用层报文 = 信件
- 进程 = 家庭成员
- 主机(又称端系统) = 家庭
- 运输层协议 = a和q
- 网络层协议 = 邮件服务
值得注意的是,a和q都是在各自家庭工作,并没有参与到邮件的实际运输,类似地,运输层协议只工作在端系统中。在端系统中,运输层协议将来自应用进程的报文移动到网络边缘(即网络层),反过来也一样,但对有关这些报文在网络中的传输并不做规定。
当a和q出现了一些事情而无法提供服务时,两个家庭指定另外的成员代替他们的工作,而另外的成员比较粗心,可能会导致信件丢失,并且收取信件的频率降低,这就相当于是更换了运输层协议,不同的协议所做的服务是不同的。
从上面我们能发现,运输层协议所能提供的服务明显受制于网络层提供的服务,当网络层传输信件的时间很长时,运输层并不能保证信件到达的时间。
- 如果网络层协议无法为主机之间发送的运输层报文段提供时延或带宽保证的话,运输层协议也就无法提供保证。
但是,运输层也能提供某些网络层协议没有提供的服务,如运输层协议可以将报文加密,这样即使网络层不能保证报文传输的机密性,加密的操作也能保证报文不容易被其他人读取。
因特网运输层概述
运输层中主要有两种运输协议:TCP与UDP
- TCP为调用它的应用程序提供了一种可靠的、面向连接的服务
- UDP则提供了一种不可靠、无连接的服务
为了方便,将运输层分组称之为报文段,而网络层的分组称之为数据报。
网络层协议(网际协议)叫做IP。IP提供了主机之间的逻辑通信,服务模型是“尽力而为交付”,也就是说IP并不会做任何确保,不保证报文段的交付完整、按序交付等,因此,IP被称为不可靠服务。
每台主机至少需要有一个网络层地址,也就是IP地址。
多路复用与多路分解
在主机中,一般有多个网络应用进程在运行,当计算机中的运输层从底层的网络层接收数据时,需要将接收到的数据定向到对应的进程。
一个进程有一个或多个套接字(Socket),它想到那个鱼从网络向进程传递数据和从进程向网络传递数据的门户。因此在接收主机中的运输层实际上并没有直接将数据交付给进程,而是将数据交给了一个中间的套接字。
主机中的套接字有不止一个,因此每个套接字都有唯一的标识符,标识符的格式取决于它是UDP还是TCP套接字。
为了将到达的运输层报文段定向到适当的套接字,每个运输层报文段中具有几个字段,运输层通过检查这些字段,将报文定向到对应的套接字。
- 将运输层报文段中的数据正确交付到套接字的工作叫做多路分解
- 在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层,所有这些工作称为多路复用。
参考
- 本文作者: xczll
- 本文链接: https://xczllgit.github.io/2020/03/28/computerscience/2020-03-28-transferLayer/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!