1.1运输层的概述
- 在计算机网络体系结构中的物理层、数据链路层、以及网络层他们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。
- 但在实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。
- 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议
运输层直接为应用进程间的逻辑通信提供服务
- 运输层向高层用户屏蔽了下面网络和心的细节(如网络拓扑、所采用的路由协议等),它使应用进程看见的就好像使在两个运输层实体之间有一条端到端的逻辑通信信道。
- 根据应用需求的不同,英特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP。
2.1运输层端口号、复用与分用的概念
运行在计算机上的进程使用进程标识符PID来标志。
英特网上的计算机并不是使用统一的操作系统,不同的操作系统(windows,linux,mac os)又使用不同格式的进程标识符。
为了使运行不同操作系统的计算机应用进程之间能够进行网络通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识。
发送方的复用和接收方的分用
TCP/IP体系的应用层常用协议所使用的运输层熟知端口号
3.1UDP和TCP的对比
UDP和TCP是TCP/IP体系结构运输层中的两个重要协议
UDP和TCP的对比
用户数据报文协议UDP(User Datagram Protocol)
- 无连接的UDP
- UDP支持单播,多播以及广播
- UDP是面向应用报文的
- UDP向上层提供无连接不可靠传输服务(适用于电话、视频会议等实时应用)
- UDP用户数据报首部仅用8个字节
传输控制协议TCP(Transmission Control Protocol)
- 面向连接的TCP
- TCP仅支持单播
- TCP是面向字节流的
- TCP向上层提供的是面向连接的可靠传输服务(适用于要求可靠传输的应用,例如文件传输)
- TCP报文首部最小20字节,最大60字节
4.1TCP的流量控制
所谓流量控制(flow control)就是发送方发送得速率不要太快,要让接收方来得及接收。
利用滑动窗口机制可以很方便地在TCP连接上实现发送方的流量控制
5.1TCP的拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞。
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
四种拥塞控制基本原理:
慢开始和拥塞避免算法:是1988年提出的TCP拥塞控制算法(TCP Taoe版本)
1990年又添加了两个新的拥塞控制算法(改进TCP的性能),就是快重传和快恢复(TCP Reno版本)
四种算法的举例
6.1TCP超时重传时间的选择
不能直接使用某次测量得到得RTT样本来计算超时重传时间RTO。
利用每次测量得到得RTT样本,计算加权平均往返时间RTTS(又称为平滑得往返时间)
针对出现超时重传时无法测准往返时间RTT的问题,Karn提出了一个算法:在计算加权平均往返时间RTTs时,只要报文段重传了,就不采用其往返时间RTT样本。也就是出现重传时,不重新计算RTTs,进而超时重传时间RTO也不会重新计算。
因此,要对Karn算法进行修正。方法时:报文段每重传一次,就把重传时间RTO增大一些。典型的做法是将新的RTO的值取为旧RTO值的2倍。
7.1TCP可靠传输的实现
- TCP基于以字节为单位的滑动窗口来实现可靠传输
8.1TCP的运输连接管理----TCP的连接建立
- TCP是面向连接的协议,它基于运输连接来传送TCP报文段
- TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程
- TCP运输连接由以下三个阶段
- 建立TCP连接
- 数据传送
- 释放TCP连接
- TCP的运输连接管理就是使运输连接的建立和释放都能正常。
TCP的连接建立主要解决以下三个问题:
1、使用TCP双方能够确知对方的存在
2、使用TCP双方能够协商一些参数(如最大窗口、是否使用窗口扩大选择项和时间戳选项以及服务质量等)
3、使用TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
TCP使用"三报文握手"建立连接
三次握手可以减少资源的浪费:当第一次TCP请求连接超时时,TCP重新建立请求连接,然后TCP服务器确认连接,然后开始传输数据,然后关闭连接,但当此时收到第一次的TCP的请求,然后TCP服务器发送确认连接,一直等待TCP客户端的请求。从而三报文握手而不使用二次握手。
这是为了防止已失效的连接请求报文突然又传送到了TCP服务器,因而导致错误。
9.1TCP的运输连接管理---TCP的连接释放
TCP通过"四报文挥手"来释放连接
这里的2MSL有必要等待吗?
这里是有必要的,当最后一次挥手丢失的时候会导致一直发送TCP发送(超时重传),无法进入关闭状态。
10.1TCP报文段的首部格式
- 为了实现可靠传输,TCP采用了面向字节流的方式
- 但TCP在发送数据时,是从发送缓存取一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送。
- 一个TCP报文段由首部和数据载荷两部分构成;
- TCP的全部功能都能体现在它首部中各字段的作用。
TCP报文的格式:
序号、确认号、ACK
- 序号:占32比特,取值范围 [0,2^32 - 1 ],序号增加到最后一个后,下一个序号就又回到0。指出文本TCP报文段数据载荷的第一个字节的序号。
- 确认号:32比特,取值范围 [0,2^32 - 1 ],确认号增加到最后一个后,下一个确认号就回到0。指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对收到的所有数据的确认。
- 确认标志位ACK:取值为1时确认号字段才有效;取值为0时确认号字段无效。TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1。
同步标志位SYN:在TCP连接建立时用来同步序号。
终止标志位FIN:用来释放TCP连接。
复位标志位RST:用来复位TCP连接。
- 当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新连接。
- RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。
推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必要等到接收缓存都填满后再向上交付。
紧急标志位URG、紧急指针
- 紧急标志位URG:取值为1时紧急指针字段有效;取值位0时紧急指针字段无效。
- 紧急指针:占16比特,以字节位单位,用来指明紧急数据的长度。