【从零开始学习计算机科学与技术】计算机网络(六)传输层
- 传输层
- 传输层功能
- 传输层复用机制
- UDP
- TCP传输控制协议
- 确认号码(ACK)
- RTO
- TCP报文格式
- TCP链接的建立
- TCP链接的释放
- TCP的拥塞控制
- 慢开始算法
- 拥塞避免算法
- 快重传
- 快恢复
- TCP与UDP的缺点
- RTP协议
- 套接字
传输层
用户无法控制网络中的内容。
因此,最终用户仅在最终主机上建立另一层,以提供比基础网络服务更可靠的传输服务。 使用这个新的网络连接,它可以向对等方发送查询,询问哪些数据到达了哪些数据没有到达,然后从中断的地方开始取回。
传输层提供了进程到进程的通信方式,而且传输层允许多个并发应用程序使用传输服务。为应用程序编写者提供通用接口,而不管其底层网络层如何。
本质上,应用程序编写者可以使用传输层原语一次编写代码,然后在不同的网络(但具有相同的传输层)上使用它。
在传输层,服务访问点标识上层服务(应用程序)。在数据链路层,数据链路级协议通过MAC地址识别网络中的哪两台计算机正在通信。在网络层,网络级协议通过IP地址互联网中的哪两台计算机正在通信。因此,在传输层,传输级协议需要通过一个地址识别正在通信的上层协议。这个地址被称为端口(port)。
端口号有16 位,端口范围:0-65535。一般的,端口号效于1023用于公共应用(保留,全局分配,用于标准服务器)。IANA分配端口号1024-49151,用于用户端口,注册端口。端口号大于49152的作为动态端口,私人端口。
IP标头包含IP地址,而UDP / TCP标头包含端口号。每个套接字是包含一个IP地址和一个16位的端口( port )端口是通信进程的全球唯一标识,即套接字地址唯一定义一个进程。
端口地址的表示主要有:
三元组:协议、本地地址、本地端口号。
五元组:协议、本地地址、本地端口号、远端地址、远端端口号。
目前,端到端交付可以通过以下两种方式之一完成:
-
面向连接的传输。面向连接的传输分为三个阶段:建立连接,数据传输,连接终止。
-
面向无连接的传输。
传输层功能
分片和重组。传输层在每个段上添加一个序列号。该数字表示重新组装的顺序。每个段都带有一个字段,指示该字段是传输的最后段还是中间段。
聚合和分离。当属于单个会话的数据单元的大小太小,以至于多个单元可以组合成一个数据报时。每个单元的序列号允许在目的地正确分隔。
错误控制机制。基于错误检测和重传。使用软件中实现的算法(例如校验和)执行错误检测。
损失控制。序列号允许接收方的传输层协议识别任何丢失的段并请求重新发送。
流量控制。传输层的流量控制机制与链路层相似,但是传输层的流控制是端到端执行的,而不是跨单个链路执行的。传输层通过滑动窗口实现流量控制,其使数据传输更加有效,并控制数据流。关于在传输层滑动窗口的一些不同:发送方不必发送整个窗口的数据。确认时可以根据确认的数据段的序列号扩展窗口的大小。接收方可以增加或减小窗口的大小。接收方可以随时发送确认。
传输层复用机制
向上复用。传输层可以沿着同一路径发送绑定到同一目的地的多个传输。当基础网络具有高吞吐量时,此功能很有用。
向下多路复用。当基础网络的容量较低或较慢时(例如X.25的三位序列代码),此功能非常有用。
UDP
UDP 是一个无连接的(connectionless)的传输层协议,其提供端点标识,端到端的数据传输,不提供差错控制、流量控制和可靠传输。但简洁高效。
UDP数据报总长度的最小长度为8个字节,而数据部分的长度可以为0到65507字节,UDP数据报包括三个部分。伪首部。用于错误检查的必要IP信息。UDP头。数据。UDP使用校验和来进行错误检验,与IP协议的校验和不同(IP校验和只需要校验IP首部),UDP的校验和需要验证整个完整的数据报以及伪首部。
TCP传输控制协议
TCP (Transmission Control Protocol) 是专门为了在不可靠的互联网络上提供可靠的端到端字节流而设计的。
TCP必须动态地适应不同的拓扑、带宽、延迟、分组大小和其它的参数,并且当有错误的时候,能够足够健壮。
TCP是面向连接的传输协议,并且没有“消息边界”,其将多个字节分组到称为段的数据包中。所有的 TCP 连接是全双工的(同时双向传输)和端到端的(每条连接只有两个端点)。
TCP 不支持组播和广播,其只有一个发送者和一个接收者。
TCP连接是字节流而不是消息流。
TCP的发送方和接收方通过缓冲区以进行同步,并且采用滑动窗口以及动态策略进行流量控制。
TCP存在差错控制和重传机制。
要想获得TCP服务,发送方和接收方必须创建一种称为套接字( sockets )的端点( end points)。
TCP连接中传输的所有数据存在编号,编号在每个方向上都是独立的,而且编号不必从0开始,它随机开始,随机数介于0到 2 3 2 − 1 2^32-1 232−1之间。编号可用于流和错误控制。
TCP使用以下两个字段来跟踪段:序列号(seq)、确认号码(ACKÿ