计算机网络:运输层(1)

一、运输层概述

1.进程间通信

运输层向它上面的应用层提供通信服务,它属于通信部份的最高层,也是用户功能的最底层。
只有网络边缘部分中进行通信的主机的协议栈中才有运输层,而路由器只有下面的三层。
网络层已经实现了数据报从主机到主机的交付。但实际上,通信的实体是主机间的进程。严格来说,两台主机间进行通信,其实是两台主机的应用进程间相互通信。
运输层需要解决进程间的通信问题。由于应用层的进程多种多样,为每一种应用进程设计一个运输层协议显然是不可行的。
因此,运输层需要复用分用的功能,即对于不同的应用进程,都可以使用相同的运输层协议完成交付。
总的来说,运输层需要为进程提供端到端的逻辑通信
运输层的逻辑通信
从图中也可以知道,运输层对高层用户屏蔽了下面网络核心的细节,对应用进程而言,好像就是两个端口间有一条信道。
此外,运输层还需要对报文进行差错检测

2.运输层的端口

应用层所有的进程都可以通过运输层再传送给网络层;而所有网络层上交的数据报也都要通过运输层分发给各个应用进程,这就是运输层的复用和分用。为了实现复用和分用,需要为每一个进程赋予一个明确的标志。
虽然在计算机中,进程都有各自的进程标识符。但由于主机间操作系统的差异,直接将进程标识符作为标志是不可行的。为了能够使不同操作系统的主机相互通信,必须使用操作系统无关的方法来标志进程。
TCP/IP协议簇使用协议端口号来解决这个问题,简称为端口。这里的端口是协议栈层间抽象的软件端口
在通信时,只需要把报文传送到主机的一个合适的端口,剩余的工作由运输层协议完成。
TCP/IP的运输层用16位端口号来标志一个端口。端口号只具有本地意义,只是标识本计算机的各个应用进程与运输层交互的层间接口。不同计算机的相同端口号之间没有关联。
因此,两个计算机想要互相通信,必须知道对方IP地址和端口号。在客户端-服务器(C-S)模式中,端口号分为两大类:

  1. 服务器使用的端口号:该大类又分两个小类
    熟知端口号(系统端口号):数值为0~1023,这些端口号指派给TCP/IP中最重要的那些应用程序。
    常用熟知端口号
    登记端口号:数值为1024~49151,为没有熟知端口号的应用程序使用,必须在IANA登记以避免重复。
  2. 客户端使用的端口号
    又称为短暂端口号,数值为49152~65535。这些端口号只在客户进程运行时才动态选择,提供给客户进程短暂使用。C-S模式中,当服务器端接收到客户进程报文时,就知道了客户端的端口号,因此客户端的短暂端口号能够完成通信任务。

3.两个主要协议

根据应用程序的不同要求,运输层有两种不同的运输协议,分别是面向连接的TCP无连接的UDP
它们对应的运输协议数据单元TPUD分别为TCP报文段UDP用户数据报
TCP/IP体系中的运输层协议

  1. TCP协议
    TCP协议提供面向连接的服务,传输数据前需要先建立连接,结束后也要释放连接。尽管使用下面的网络是不可靠的,使用TCP协议的运输层逻辑信道能够根据协议控制,提供可靠的交付。其逻辑信道相当于一条可靠的全双工信道
    也因此,TCP只提供端到端的连接,不支持广播和多播服务
    由于提供可靠的运输服务,TCP协议增加了许多额外开销。不仅协议数据单元的首部大很多,还要占用需要处理机资源。
  2. UDP协议
    UDP协议在传送数据前不需要建立连接,目的主机接收数据报后也不需要给出任何确认。因此,UDP协议不提供可靠交付。但在某些情况下,UDP确实最有效的工作方式。

二、用户数据报协议UDP

1.UDP的特点

用户数据报协议UDP只在IP协议的数据报服务上增加了复用和分用以及差错检测的功能。主要特点有:
UDP是无连接的:发送数据前不需要建立连接,减小了开销和发送数据的时延。
UDP尽最大努力交付:不保证可靠交付,主机不需要维持复杂的连接状态表。
UDP是面向报文的:UDP对应用层的报文,不合并也不拆分,添加首部保留边界就下放给网络层,也即UDP一次交付一个完整的报文。因此,过长的报文会导致网络层分片的消耗增大;过小的报文会导致通信的效率降低。UDP必须选择大小合适的报文。
UDP面向报文
UDP没有拥塞控制。网络的拥塞不会使源主机发送的速率降低,这对某些实时应用相当重要,但也可能导致严重的拥塞问题。
UDP支持一对一、一对多、多对一、多对多的交互通信
UDP的首部开销小。其首部只有8字节。

2.UDP报文的首部

UDP用户数据报分为首部字段和数据字段。首部字段只有八个字节,由四个字段组成,分别为:
源端口:源端口号,需要对方回信时选用,不需要可置0;
目的端口:目的端口号,是交付报文时必要的。
长度:UDP用户数据报的长度,单位为字节,最小为8。
检验和:检测UDP用户数据报是否出错,有错就丢弃。
UDP用户数据报
当运输层收到网络层上交的UDP数据报时,UDP根据首部中的目的端口,上交给各个应用进程。当端口号不正确时,网络层的ICMP就会发送端口不可达的差错报文给发送方。
UDP的分用
在UDP用户数据报的图中,可以看到UDP首部的前部分还有一个12字节的伪首部部分。这部分伪首部并不真正添加在UDP用户数据报中,只是在计算校验和时使用。
UDP用户数据报的校验和与IP数据报校验和方法类似,不同处在于UDP把首部和数据部分一起都检验。在发送端,将包括伪首部在内的整个UDP用户数据报划分为2字节一组(若数据部分的字节数不是偶数,需要补0),每组得到其16位二进制码(此时校验和字段为全0),并按二进制反码运算求和。求和得到的结果再取反,得到校验和字段的数据。接收端也同样对各组求和,若数据无差错,得到的结果应该为16位全1。
计算UDP校验和

三、传输控制协议TCP概述

1.TCP的特点

TCP协议是TCP/IP体系中非常复杂的一个协议。下面是TCP协议的最主要特点:

  1. TCP是面向连接的运输层协议:使用TCP协议前必须建立连接,传输完毕后也需要释放连接。
  2. TCP连接只能有两个端点:TCP连接只能是点对点的。
  3. TCP提供可靠交付的服务:TCP传送的数据无差错、不丢失、不重复、按序到达。
  4. TCP提供全双工通信:允许进程在任何时候都能发送数据,TCP连接两端都设有发送和接收缓存。发送时,进程只需要将数据传给TCP缓存;接收时,TCP将数据放入缓存,进程可以随时读取缓存中的数据。
  5. TCP是面向字节流的:TCP把应用进程下放的数据仅看成一串无结构的字节流,而不知道数据的含义。因此,TCP并不保证源进程发送的数据块和目的进程接收的数据块是大小对应的。识别字节流由应用进程完成。不过,虽然不保证大小对应,但进程接收的字节流和发送的字节流是完全一样的。

TCP面向字节流
TCP面向字节流的特性导致它和UDP报文的发送方式完全不同:TCP不关心进程一次给出多长的报文,只根据窗口值网络拥塞程度来决定报文的大小。

2.TCP的连接

TCP把连接作为最基本的抽象。TCP的特性都与面向连接这一基本特性相关。
每一条TCP连接都有两个端点。其端点并不是运输层的协议端口,而叫做套接字(socket)或称插口
套接字的定义是:端口号拼接到IP地址即构成套接字。因此套接字表示为IP地址后加上端口号,即:
套接字socket = (IP地址:端口号)
而每一条TCP连接唯一地被通信两端的两个端点所确定,即:
TCP连接:: = {socket1 , socket2} = {IP1:port1 , IP2:port2}
例如从IP地址为192.3.4.5的主机的端口80,与IP地址为127.0.5.8的端口21建立TCP连接,可以表示为:
TCP连接:: = {192.3.4.5:80 , 127.0.5.8:21}

总之,TCP连接是协议软件提供的一种抽象,而TCP连接的端点是也很抽象的套接字。有时为了方便,也称应用进程之间建立TCP连接。

注:名词socket在网络中有许多不同的含义,应注意加以区分。

原创文章 49 获赞 5 访问量 2994

猜你喜欢

转载自blog.csdn.net/weixin_44712386/article/details/105654673