重要概念
- 运输层为相互通信的应用进程提供逻辑通信
- 端口和套接字的意义
- 无连接的UDP的特点
- 面向连接的TCP的特点
- 在不可靠的网络上实现可靠传输的工作原理
- 停止等待协议和ARQ协议
- TCP的滑动窗口、流量控制、拥塞控制、连接管理
运输层协议概述
进程之间的通信
- 运输层向上面的应用层提供通信服务
- 通信的实质是两台主机中的应用进程交换数据
- 运输层提供应用进程之间的逻辑通信
- 运输层具有复用和分用功能,使得主机上所有进程都能使用同一个运输层协议收发数据
- 网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信
- 运输层还要对收到的报文进行差错检测
- 根据应用需求,运输层有面向连接的TCP和无连接的UDP协议
- 当使用面向连接的TCP协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道
- 当使用面向无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道
运输层的两个主要协议
- 用户数据报协议UDP(user datagram protocol)
- 传输控制协议TCP(transmission control protocol)
- UDP在传送数据之前不需要先建立连接,远端主机收到UDP报文后不需要给任何确认,所以UDP不提供可靠交付,但实时性较好,通常用于传输音视频数据流
- TCP提供面向连接的服务,在传输数据之前必须先建立连接,数据传输结束后要释放连接,TCP不提供广播和多播服务,由于要提供可靠交付,因此增加了许多额外开销
运输层的端口
- 运输层协议使用的协议端口号,来给每一个应用进程赋予一个非常明确的标志,常简称为端口port
- 当运输层收到IP层交上来的运输层报文时,根据首部中的目的端口号把数据交付应用层对应的进程
- 端口号有16位,只具有本地意义,不同计算机中,相同的端口号是没有关联的
- 互联网上计算机通信采用客户-服务器模式,客户在发起通信请求时,必须先知道对方的IP地址和端口号,因此端口号分为两大类
服务器端使用的端口号
- 熟知端口号:又称为系统端口号,数值为0~1023,可以在www.iana.org查到。这些端口号被分配给一些重要程序。
- 登记端口号:数值为49152~65535。这类端口号仅在客户进程运行时才动态选择,因此又叫做短暂端口号
用户数据报协议UDP
UDP概述
用户数据报协议UDP只在IP数据报服务至上增加了很少一点功能,这就是复用和分用,以及差错检测功能,UDP的主要特点是:
- UDP是无连接的:发送数据之前不需要先建立连接,因此减少了开销和发送数据之前的时延
- UDP尽最大可能交付:不保证可靠交付,因此主机不需要维持复杂的连接状态表
- UDP是面向报文的:发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界,也就是说,UDP一次交付一个完整的报文
- UDP没有拥塞控制:因此网络出现拥塞不会使源主机发送速率降低
- UDP支持一对一、一对多、多对一、多对多的交互通信
- UDP的首部开销小:只有8字节,比TCP的20字节少
UDP的首部格式
UDP数据报有两个字段:首部字段和数据字段。首部字段8个字节,由4个字段组成,每个长度2字节,各字段含义如下:
- 源端口:源端口号,在需要对方回信时使用,不需要时可全0
- 目的端口:目的端口号,进行交付时,必须使用
- 长度:UDP数据报的长度,最小值为8(仅有首部)
- 校验和:检测UDP数据报在传输中是否有错,有错就丢弃
UDP用户数据报首部中校验和的计算方法比较特殊,在计算校验和时,要在UDP数据报之前增加12个字节的伪首部,所谓伪首部,因为它不是真正的首部,只是在计算时使用到,得到一个临时的UDP数据报,校验和就是按照这个临时的UDP数据报来计算的。伪首部既不向下传递,也不向上递交,仅仅知识为了计算校验和。
与IP数据报首部校验不同,UDP校验是把首部和数据部分一起校验
二进制反码运算:
- 0 + 0 = 0
- 0 + 1 = 1
- 1 + 0 = 1
- 1 + 1 = 10
其中,如果最高位1+1产生了进位,则结果的最低位要加1
校验和计算过程如下:
发送端:
- 填上伪首部
- 以全0填充校验和字段
- 数据部分不满4B的要用0填充
- 伪首部、首部、数据部分,采用二进制反码求和
- 将求和结果取反码,填入校验和字段
- 去掉伪首部后发送
接收端:
- 填上伪首部
- 伪首部、首部、数据部分,采用二进制反码求和
- 结果全为1则无差错,否则丢弃或者上报错误
传输控制协议TCP概述
TCP最主要的特点
- TCP是面向连接的运输层协议:应用程序在使用TCP协议之前,必须先建立TCP连接。数据传输完毕后,必须释放已经建立的连接
- TCP连接是点对点的:每一条TCP连接只能有两个端点
- TCP提供可靠交付的服务:通过TCP连接传送的数据,无差错、不丢失、不重复、按序到达
- TCP提供全双工通信:允许通信双方的应用程序在任何时候都能发送数据,TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通道的数据
- 面向字节流:TCP中的流指的是流入到进程或从进程流出的字节序列。面向字节流指的是,虽然应用程序和TCP的交互是一次一个数据块,但是TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。TCP不保证接收方应用程序所收到的数据块和发送方发出的数据块具有对应大小的关系
TCP的连接
TCP把连接作为最基本的抽象,每一条TCP连接有两个端点,这个端点叫做套接字
IP地址拼接端口号,就构成了套接字,例如
- 192.2.3.4:80
每一条TCP连接唯一地被通信两端的两个端点所确定
可靠传输的工作原理
理想的传输条件有两个特点:
- 传输信道不产生差错
- 不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据
TCP发送的报文段是交给IP层传送的,但是IP层只能提供最大努力服务,因此要使用一些可靠传输协议,当出现差错时,让发送方重传,当接收来不及处理,及时告诉发送方降低发送数据的速度
停止等待协议
停止等待就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组
无差错情况
出现差错
发送方在超过一段时间没有收到确认,就认为刚才发送的分组丢失了,因而要进行超时重传
有三点需要注意:
- 发送方发送完成后,必须暂时保留已发送分组的副本,以便进行重传,只有收到确认后才能清除
- 分组和确认分组都必须进行编号,要一一对应
- 超时计时器设置的重传时间应当比数据在分组传输的平均往返时间要长一点
确认丢失和确认迟到
如果发送的确认丢失了,则发送方会重传,接收方将重复收到该分组,接收方丢弃重复的分组,并向发送方发送确认
如果发送方延迟收到确认,这时已经重传了,接收方会丢弃重复的分组,发送方将收到重复的确认,也会丢弃
信道利用率
停止等待协议的优点是简单,但缺点是信道利用率太低
- Td :A发送分组所需的时间
- Ta:B发送确认分组所需的时间
- RTT:往返时间
上图中,信道利用率U的计算公式为:
U = T d T d + R T T + T a U = \frac{T_d}{T_d+RTT+T_a} U=