计算机网络之运输层
计算机网络之运输层
任务:为两台主机中进程之间的通信提供通用的数据传输服务
功能:
- 提供进程和进程之间的逻辑通信。根据应用进程的不同需求,运输层提供两种不同的协议支持,即UDP与TCP。
- 传输层对收到的报文进行差错检测。在网络层,IP数据报的首部的检验和字段只检验IP数据报首部部分是否出现差错,所以在网络层会进行对数据部分进行差错检验。
- 复用和分用。
复用:是指发送方不同的应用进程都可以使用同一个传输层协议传送数据(首部不同)
分用:接收方的传输层在剥去报文的首部后能够把这些数据正确的交付目的应用进程。
1 运输层协议概述
1.1 通信
通信:向上面的应用层提供通信服务,同时使用网络层提供的服务。
通信的真正端点不是主机而是主机中的进程(端到端的通信是应用进程之间的通信),即两台主机之间的通信实际是分别在这两台主机上的应用进程之间互相通信。IP协议能把分组送到目的主机,但分组还停留在主机的网络层,而没有交付给主机的应用进程。网络层为主机之间提供逻辑通信,运输层为应用进程之间提逻辑通信。
1.2 运输层两个主要协议
1.2.1 用户数据报协议UDP
UDP中的传送数据单元叫UDP用户数据报
UDP是无连接的协议,意味着可以随时直接发送数据,而不需要建立连接,接收方收到UDP报文后也不需要给出任何确认。这种逻辑通信信道是一条不可靠信道。
1.2.2 传输控制协议TCP
TCP中的传送数据单元叫TCP报文段
TCP是面向连接的协议,传送数据之前必须建立连接,接收方收到TCP报文需要给出确认,数据传送完毕之后必须释放连接。这种逻辑通信信道就相当于一条全双工的可靠信道。因为提供可靠的传输服务,所以增加了许多开销,比如连接管理、流量控制、确认、计时器等。TCP不提供广播、多播服务。
1.3 运输层的端口
在单个计算机中的进程用进程标识符来标志的。在运输层使用协议端口号(简称端口)。运输层收到网络层IP协议交上来的报文后,能够根据其中的目的端口号把数据交付给应用层的目的应用进程。
此处端口是指软件端口,是应用层的各种协议进程与运输实体进行层间交互的一种地址。硬件端口是不同硬件设备进行交互的接口,比如路由器或交换机上的硬件端口。
端口号只有本地意义,它只是为了标志计算机应用层中各个进程在传输层交互时的层间接口。在互联网中,不同计算机的相同端口号是没有联系的。
端口用一个 16 位端口号进行标志,允许有65,535个不同的端口号。
1.3.1 传输层的端口分为两大类:
1. 服务器端使用的端口号:
其中又分熟知端口号(端口号01023)和**登记端口号**(端口号102449151)。熟知端口号又叫系统端口号,是IANA指派给了TCP/IP最重要的一些应用程序,让所有用户都熟知。登记端口号是为没有熟知端口号的应用程序使用的,当一个新的应用程序出现后,在IANA处登记使用的端口号,防止重复。
2. 客户端使用的端口号:
也叫短暂端口号,端口号为49152~65535。这类端口号是仅在客户端进程运行时动态选择,暂时使用进程结束端口号即不存在了,又可以被其他客户进程使用。
** 1.3.2 套接字**
在网络中采用套接字来识别端点,套接字唯一的标示了网络中的一台主机和它上面的一个进程。虽然UDP之间的通信也要用到端口号,但UDP的通信是无连接的,因此不需要使用套接字,TCP之间的通信必须建立在两个套接字之间建立连接。
套接字socket = (IP地址:端口号)
需要注意的是,在不同的地方,套接字socket可能表示不同的意思。
2 用户数据报协议UDP
UDP 只在 IP 的数据报服务之上增加了很少一点的功能:复用和分用的功能、差错检测的功能
2.1 UDP的主要特点
- UDP 是无连接的,发送数据之前不需要建立连接,,因此减少了开销和发送数据之前的时延。
- UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
- UDP 是面向报文的。
- UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很适合多媒体通信的要求。
- UDP 支持一对一、一对多、多对一和多对多的交互通信。
- UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。
关于面向报文:
UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP 一次交付一个完整的报文。接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
应用程序必须选择合适大小的报文:
若报文太长,UDP 把它交给 IP 层后,IP 层在传送时可能要进行分片,这会降低 IP 层的效率。
若报文太短,UDP 把它交给 IP 层后,会使 IP 数据报的首部的相对长度太大,这也降低了 IP 层的效率。
2.2 UDP的首部格式
用户数据报 UDP 有两个字段:数据字段和首部字段。
首部字段有 8 个字节,由 4 个字段组成,每个字段都是 2 个字节。
- 源端口:源端口号。在需要对方回信时选用,不需要时可全写0.
- 目的端口:目的端口号。在终点交付报文时必须用到。若不存在对应于该端口的应用进程,就丢弃报文,并由ICMP发送“端口不可达”的差错报文给发送方。
- 长度:UDP用户数据报的长度。其最小值是8字节(仅有首部)。
- 检验和:检测UDP数据报在传输中是否有错,有就丢弃。
UDP用户数据报中首部的检验和在计算时,需要在该UDP数据报之前增加12个字节的伪首部,计算方法是二进制反码求和。伪首部并不是UDP数据报真正的首部,只是在计算检验和时临时加上的,它不会被向下传送也不会向上递交。伪首部由五个字段构成分,如下:
3 传输控制协议TCP
TCP 是面向连接的运输层协议,在无连接的、不可靠的 IP 网络服务基础之上提供可靠交付的服务。为此,在 IP 的数据报服务基础之上,增加了保证可靠性的一系列措施。
3.1 TCP的主要特点
- TCP 是面向连接的运输层协议。
- 每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。
- TCP 提供可靠交付的服务。
- TCP 提供全双工通信。
- 面向字节流
(1)TCP 中的“流”(stream) 指的是流入或流出进程的字节序列。
(2)“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。
(3)TCP 不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
3.2 TCP的首部格式
3.3 TCP中的连接
4 可靠传输的工作原理
4.1 停止等待协议
4.2 连续ARQ协议
5 TCP可靠传输的实现
5.1 以字节为单位的滑动窗口
5.2 超时重传的时间的选择
5.3 选择确认SACK
6 TCP的流量控制
6.1 利用滑动窗口实现流量控制
6.2 TCP的传输效率
7 TCP的拥塞控制
7.1 拥塞控制的一般原理
7.2 TCP拥塞控制方法
7.3 主动队列管理AQM
8 TCP运输连接的管理
8.1 TCP连接的建立
8.2 TCP连接的释放
8.3 面试问答环节
2019.5.11 待更新.......