计算机网络学习笔记:第三章

计算机网络学习笔记:第三章

学习书籍:《计算机网络:自顶向下方法》 第三章:运输层

其他章节请参阅:
《计算机网络:自顶向下方法》 第一章:计算机网络和因特网
《计算机网络:自顶向下方法》 第二章:应用层
《计算机网络:自顶向下方法》 第三章:运输层



前言

运输层位于应用层和网络层之间,是分层的网络体系的重要部分;该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。在这里我们将讨论两个大的问题:将网络层在不同端系统之间的通信服务扩充到运行在两个端系统上不同的应用层进程之间的通信服务(如何实现进城之间通信的可靠传输)和控制传输层实体的传输速度以避免网络拥塞或者从网络拥塞中恢复过来,这里需要考虑的有拥塞的后果和原因以及常见的拥塞控制手段;特别的,我们将了解TCP协议中的拥塞控制

3.1、概述和运输层服务

传输层协议为运行在不同端系统上的应用进程之间提供逻辑通信功能;应用层进程使用传输层提供的逻辑通信功能而无需考虑实现通信的物理基础设施的细节

传输层协议是在端系统中实现的而不是在路由器中实现的。传输层接收来自应用层的报文并通过添加传输层首部以生成传输层报文段。在生成过程中可能会对来自应用层的报文加以分割;然后在发送端系统中,运输层会将这些报文段交给网络层;网络层将其封装成网络层分组,也被称为数据报,然后向目的地发送。路由器不会检查封装在数据报中的传输层报文段的字段;在接收端,网络层从数据报中抽取传输层报文段,并将其交给运输层,运输层接收到报文段后,使该报文段中的数据被接收应用进程所使用。

网络应用可以使用多种传输层协议,因特网有两种传输层协议,即TCP和UDP,不同的传输层协议提供不同的运输层服务;

3.1.1 运输层和网络层的关系

在协议栈中,运输层刚好位于网络层之上;网络层提供主机之间的逻辑通信而传输层为运行在不同主机上的应用进程提供逻辑通信;运输层协议只工作在端系统中。在端系统中,传输层协议将来自应用进程的报文移动到网络边缘即网络层,反过来也从网络层接收这些报文段;传输层对报文段如何在网络核心传输并不做干涉;事实上中间路由器既不处理也不识别传输层加载应用层报文上的任何信息

运输层协议能提供的服务常常受制于底层网络层协议的服务类型,如果网络层协议无法为主机之间的通信提供时延带宽保证的话,运输层协议也就无法为进程之间发送的应用程序报文提供时延或者带宽保证;

然而即使底层网络协议不能在网络层提供响应的服务,运输层协议也能提供某些服务。例如,即使底层网络协议是不可靠的,运输协议也能为应用程序提供可可靠的数据传输服务(即使底层网络协议不可靠,使分组丢失和篡改,运输协议也能为应用程序提供可靠的的数据传输服务)。

3.1.2 因特网运输层概述

因特网为应用层提供了截然不同的两种传输层协议:UDP(用户数据报协议)它提供一种不可靠无连接的服务;另一种是TCP,它提供可靠的面向连接的服务;运输层分组也被称为报文段

简单了解一下因特网的网络层,网络层协议有一个名字即IP,即网际协议。IP为主机间提供逻辑通信,IP的服务模型为尽力而为交付服务(best-effort delivery service)这意味着IP尽最大的努力在主机间交付报文段,但是不做任何保证。它不保证报文段的交付不保证报文段按序交付不保证报文段中数据的完整性;即IP提供一种不可靠的服务;每台主机都需要有一个网络层地址,即IP地址。

UDP和TCP最基本的责任就是将IP提供的主机间交付服务扩展到不同端系统上两个进程之间的服务,这也被称为传输层的多路分解多路复用;UDP和TCP通过在传输层首部添加差错检查字段来提供完整性检查进程到进程之间的数据交付差错检查是最低限度的两种传输层服务,也是UDP可以提供的仅有的两种服务。UDP和IP一样,也是不可靠服务;

TCP提供额外的服务,首先它是一种可靠数据服务,这意味着TCP协议保证数据的按序、完整地从发送端应用进程发送到接收端应用进程;TCP通过流量控制、序号、确认和定时器,将IP的不可靠数据传输转换为可靠数据传输;其次,TCP提供拥塞控制,拥塞控制与其说是一种提供给应用程序的服务,不如说是一种提供给整个网络的服务,因为整个网络都将因为拥塞控制而受益;不太严格地说,拥塞控制力求为每一个经过一条拥塞网络的连接提供平等的共享网络链路带宽,从而避免一条TCP连接用过多的流量来淹没通信主机之间的链路和设备;TCP的拥塞控制是通过调节发送进网络的的流量速率来做得到;UDP不提供拥塞控制,使用UDP传输的应用程序可以根据需要以任意的速率发送数据。

3.2、多路复用与多路分解

前文提到,传输层将网络层提供的面向主机的逻辑通信扩充为面向不同应用进程的逻辑通信,并且这一过程称为多路复用和多路分解;多路复用和多路分解是每个计算机网络都需要的;

在目的主机,运输层从紧邻其下的网络层接收报文段;运输层负责将这些报文段中的数据交付给在主机上运行的应用程序进程; 2.7节提到,一个进程有一个或者多个套接字,相当于从网络向进程传递数据和从进程向网络传递数据的门户;传输层和应用程序进程之间通过套接字关联,接收主机的运输层实际上并没有直接将数据交付给进程,而是将将数据交付给中间的一个套接字;在任一时刻,接收主机上可能不止一个套接字每个套接字都有唯一标识符

传输层从同一台主机上的不同Socket接收数据的过程称为多路复用传输层向同一台主机上的不同Socket传输数据的过程称为多路分解;为了实现多路复用和多路分解,我们需要标志套接字,并将相关信息添加到报文段中。

传输层多路复用要求:1)套接字有唯一标识符;2)每个报文段都有源端口号字段和目的端口号字段来指示该报文段所要交付到的套接字;
端口号大小在0-65535之间,其中0-1023属于周知端口号,它们为特定的Socket而拥有。
运输层如何实现分解服务:主机上每个套接字能分配一个端口号;报文达到主机时,运输层检查报文段的目的端口号,并将其定向到相应套接字,然后报文段中数据通过套接字进入其所连接的进程;UDP大致是这样做的,TCP更复杂;

无连接的多路复用与多路分解

需要注意的是,在创建Socket的时候,是由传输层为之分配端口号;一个UDP套接字是由一个目的IP地址目的端口号(即二元组)来标志的;如果两个UDP报文段有不同的源IP地址或者源端口号,但是有相同的目的IP和目的端口号的话,它们将通过同一个Socket到达同一个应用程序;

源端口号的用途:例如A到B的报文段中,源端口号作为“返回地址”的一部分,即当B要回发一个报文段给A,B到A的报文段中的目的端口号便从A到B的报文段中的源端口号取值(完整返回地址还包括A的IP地址);

面向连接的多路复用和多路分解

TCP协议中的Socket是通过一个四元组来标记的:(源IP地址,源端口号,目的IP地址,目的端口号);两个具有不同源IP地址或者源端口号,但有相同的目的IP地址和目的端口号的TCP报文段将通过两个不同的Socket进入同一应用进程;这也表示,一个应用进程可以关联多个Socket,而一个Socket将只关联一个应用进程;常常,这样的对应关系是通过线程来实现的:一个进程有多个线程,而每个线程关联了一个Socket;这样做可以提高服务器性能;

实际上,传输层就是根据这些信息来实现多路分解的;而这些信息是在多路复用的时候被放置在报文段中的;

猜你喜欢

转载自blog.csdn.net/Dr3stark/article/details/109768268