slacr_

Just to record my life and thoughts.
笔记/编程/杂乱/极简

[计算机网络]运输层

May 1, 2023Network3300 words in 22 min

概述

进程之间的通信

从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时,都要使用协议栈中的运输层,而网络核心部分中的路由器在转发分组时只用到下三层的功能。

通信的两端应当是两个主机中的应用进程。也就是说,端到端的通信是应用进程之间的通信。

运输层有一个很重要的功能——复用(multiplexing)和分用(demultiplexing)。这里的“复用”是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据(当然需要加上适当的首部),而“分用”是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。

运输层提供应用进程间的逻辑通信。“逻辑通信”的意思是:从应用层来看,只要把应用层报文交给下面的运输层,运输层就可以把这报文传送到对方的运输层(哪怕双方相距很远,例如几千公里),好像这种通信就是沿水平方向直接传送数据。

网络层和运输层有明显的区别。网络层为主机之间的通信提供服务,而运输层则在网络层的基础上,为应用进程之间的通信提供服务

根据应用程序的不同需求,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP

运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别。当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道。

运输层的两个主要协议

TCP/IP运输层的两个主要协议都是互联网的正式标准,即:

  • 用户数据报协议UDP(User Datagram Protocol)[RFC 768,STD6]
  • 传输控制协议TCP(Transmission Control Protocol)[RFC 793,STD7]

按照OSI的术语,两个对等运输实体在通信时传送的数据单位叫作运输协议数据单TPDU(Transport Protocol Data Unit)。但在TCP/P体系中,则根据所使用的协议是TCP或UDP,分别称之为TCP报文段(segment)UDP用户数据报

运输层的端口

以把应用层和运输层的界面上这些“门”,设为通信的抽象终点。这些抽象终点的正式名称就是协议端口(protocol port),一般就简称为端口(port)。每一个端口用一个称为端口号(port number)的正整数来标志。主机的操作系统提供了接口机制,使得进程能够通过这种机制找到所要找的端口。
这种在协议栈层间的抽象的协议端口是软件端口,和路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的地点
TCP/IP的运输层用一个16位端口号来标志一个端口

因此运输层的端口号分为下面的两大类:

服务器端使用的端口号

又分为两类,最重要的一类叫作熟知端口号(well known port number)或全球通用端口号,数值为0~1023。这些熟知端口号最初公布在文档中[RFC 1700,STD2],但后来因为互联网发展太快,这种标准文档无法随时更新,因此在RFC3232中就把RFC 1700列为陈旧的,而当前最新的熟知端口号可在网址www.iana.org上查到。IANA把这些熟知端口号指派给了TCP/IP最重要的一些应用程序,让所有的用户都知道。
另一类叫作登记端口号,数值为1024~49151。这类端口号是为没有熟知端口号的应用程序使用的。要使用这类端口号必须在IANA按照规定的手续登记,以防止重复。

客户端使用的端口号

数值为49152~65535。由于这类端口号仅在客户进程运行时才动态选择,因此又叫作短暂端口号。这类端口号就是临时端口号,留给客户进程选择临时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的端口号,因而可以把数据发送给客户进程。通信结束后,刚才已使用过的客户端口号就被系统收回,以便给其他客户进程使用。

用户数据报协议UDP

用户数据报协议UDP只在IP的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及差错检测的功能。

UDP主要特点

  • UDP是无连接的
  • UDP使用尽最大努力交付
  • UDP是面向报文的
  • UDP没有拥塞控制
  • UDP支持一对一、一对多、多对一和多对多的交互通信。
  • UDP的首部开销小,只有8个字节

UDP的首部格式


==228==

传输控制协议TCP概述

TCP最主要的特点

  • TCP是面向连接的运输层协议。
  • 每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)。
  • TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。
  • TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
  • 面向字节流。TCP中的“流”(stream)指的是流入到进程或从进程流出的字节序列。

    ==230==

TCP的连接

TCP把连接作为最基本的抽象
每一条TCP连接有两个端点。那么,TCP连接的端点是什么呢?不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫作套接字(socket)或插口。根据RFC 793的定义:端口号拼接到(concatenated with)IP地址即构成了套接字。因此,套接字的表示方法是在点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开

每一条TCP连接唯一地被通信两端的两个端点(即套接字对socket pair)所确定。

本来socket的意思就是插座(或插口)。选用socket这个名词是相当准确的。其实一条TCP连接就像一条电缆线,其两端都各带有一个插头。把每一端的插头插入位于主机的应用层和运输层之间的插座(socket)后,两个主机之间的进程就可以通过这条电缆线进行可靠通信了。

随着互联网的不断发展以及网络技术的进步,同一个名词socket却可表示多种不同的意思。
==232==

可靠传输的工作原理

IP层只能提供尽最大努力服务,也就是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP必须采用适当的措施才能使得两个运输层之间的通信变得可靠。

停止等待协议


使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信
像上述的这种可靠传输协议常称为自动重传请求ARQ(Automatic Repeat reQuest)

为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输
流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据在不间断地传送。显然,这种传输方式可以获得很高的信道利用率。

当使用流水线传输时,就要使用连续ARO协议和滑动窗口协议

连续ARQ协议

连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
接收方一般都是采用累积确认的方式。这就是说,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认

TCP报文段的首部格式

TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。

==237==

TCP可靠传输的实现

以字节为单位的滑动窗口





TCP的流量控制

所谓流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收

发送方的发送窗口不能超过接收方给出的接收窗口“的数值。请注意,TCP的窗口单位是字节,不是报文段。

TCP的拥塞控制

在计算机网络中的链路容量(即带宽)、交换节点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫作拥塞(congestion)

拥塞控制与流量控制的关系密切,它们之间也存在着一些差别。所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素
相反,流量控制往往是指点对点通信量的控制,是个端到端的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便接收端来得及接收。

TCP的拥塞控制方法

TCP进行拥塞控制的算法有四种,即慢开始(slow-start)、拥塞避免(congestion avoidancc)、快重传(fast retransmit)和快恢复(fast recovery)(见草案标准RFC 5681)。
==252==

TCP的运输连接管理

运输连接就有三个阶段,即:连接建立、数据传送和连接释放。
TCP连接的建立采用客户服务器方式。主动发起连接建立的应用进程叫作客户(client),而被动等待连接建立的应用进程叫作服务器(server)。

参考

  1. 计算机网络(第八版)
  • Author:

    slacr_

  • Copyright:

  • Published:

    May 1, 2023

  • Updated:

    May 1, 2023

Buy me a cup of coffee ☕.

1000000