一、运输层协议概述
1. 进程间的通信
- 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。
- 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用剩下三层功能。
2. 网络层和运输层的区别
3. 运输层作用(基于端口的复用和分用功能)
- 在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。
- 这表明运输层有一个很重要的功能——复用和分用
- 根据应用程序的不同需求,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP
二、两种不同的运输协议
1. 概述
- 当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。
- 当运输层采用无连接的UDP协议时,这种逻辑通信信道是一条不可靠信道。
2. 协议名称
TCP/IP的运输层有两个主要的协议:
- 用户数据报协议UDP(User Datagram Protocol)
- 传输控制协议TCP(Transmission Control Protocol)
3. TCP与UDP
- 两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元TPDU(Transport Protocol Data Unit)
- TCP传送的数据单位协议是TCP报文段
- UDP传送的数据单位协议是UDP报文或用户数据报
4. UDP的特点
- 提供无连接服务
- 在传送数据之前不需要先建立连接
- 传送的数据单位协议是UDP报文或用户数据报
- 对方的运输层在收到UDP报文后,不需要给出任何确认。
- 虽然UDP不提供可靠交付,但在某些情况下UDP是一种最有效的工作方式。
5. TCP的特点
- 提供面向连接的服务
- 传送的数据单位协议是TCP报文段。
- TCP不提供广播或多播服务
- 由于TCP要提供可靠的、面向连接的运输服务,因此不可避免的增加了许多开销。这使得协议数据单元的首部增大很多,还要占用许多处理机资源。
6. 运输层的端口
- 端口用一个16位端口号进行标志
- 端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的个进程。
- 由此可见,两个计算机中的进程要相互通信,不仅必须知道对方的IP地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。
7. 两大类端口
- 服务器使用的端口号
- 熟知端口:数值一般为0~1023(分配给一些常用的协议)
- 登记端口号:数值为1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在IANA登记,以防止重复。
- 客户端使用的端口号
- 又称为短暂端口号,数值为49152~65535,留给客户进程选择暂时使用。
- 当服务器进程收到客户端进程的报文时,就知道中客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程使用。
三、用户数据报协议UDP
UDP只在IP数据报服务上增加了很少一点的功能:
1. 复用和分用
2. 差错检测的功能
虽然UDP用户数据报只能提供不可靠的交付,但UDP在某些方面有其特殊的优点。
1. UDP的主要特点
- UDP是无连接的,发送数据之前不需要建立连接。因此减少了开销和发送数据之前的时延。
- UDP尽最大努力交付,不保证可靠交付。因此主机不需要维持复杂的连接状态表。
- UDP是面向报文的。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP一次交付一个完整的报文。
- UDP没有拥塞控制。因此网络出现的拥塞不会使源主机的发送速率降低。这对某些应用是很重要的。很适合多媒体通信的要求。
- UDP支持一对一,一对多,多对一和多对多的交互通信。
- UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
2. 面向报文的UDP
发送方:
发送方UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
应用层交给UDP多长的报文,UDP就发多长的报文,即一次发送一个报文。
接收方:
接收方UDP对IP层交上来的UDP用户数据报,在去除首部后就原封不动的交付上层的应用进程,一次交付一个完整的报文。
总结:
应用进程必须选择合适大小的报文:
1. 若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,降低IP层的效率。
2. 若报文太短,UDP把它交给IP层后,会使IP数据报的首部相对长度太长,也降低了IP层的效率。
3. UDP的首部格式
用户数据报UDP只有两个字段:数据字段和首部字段。
首部字段只有8字节
- 在计算检验和时,临时把 “伪首部” 和UDP用户数据报连接在一起。伪首部内有源IP地址和目的IP地址,因为只有IP地址可以唯一标记一个主机。伪首部仅仅是为了计算检验和。
四、传输控制协议TCP概述
1. TCP最主要特点
- TCP是面向连接的运输层协议
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
- TCP提供可靠交付的服务
- TCP提供全双工通信
- 面向字节流
1、 TCP中的流(stream)指流入或流出进程的字节序列。
2、 面向字节流的含义是:虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据看成仅仅是一连串无结构的字节流。 - TCP面向流的概念
1、TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。
2、 但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
- 注意
1、TCP是一条虚连接而不是一条真正的物理连接。
2、 TCP对应用进程一次把多长的报文发送到TCP的缓存中是不关心的。
3、TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程决定的)。
4、TCP可把太长的数据块划分短一些再传送。
5、TCP也可等待积累有足够多的字节后在构成报文段发送除去。
2. TCP的连接
- TCP把连接作为最基本的抽象
- 每一条TCP连接有两个端点
- TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫做套接字或插口。
- 端口号拼接到IP地址即构成了套接字
3. 可靠传输的工作原理
1. 停止等待协议
停止等待协议就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
全双工通信的双方既是发送方也是接收方。
1)无差错情况
2)有差错情况
- 在接受方B会出现两种情况:
- B在接受M1时检测出了差错,就丢弃M1,其他什么也不做(不通知A收到有差错的分组).
- M1在传输过程中丢失了,这时B什么也不知道,也什么都不做。
- 以上两种情况,B都不会发送任何消息。
- 如何解决B正确收到M1呢?
- 解决方法:超时重传
1. A为每一个已发送的分组都设置一个超时计时器。
2. A只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组M2.
3) 确认丢失和确认迟到
- 对于接收方:收到重复的M时,依旧发送确认,但是丢弃掉重复的M。
- 对于发送方:收到重复的确认时,什么也不做。
4) 注意
- 在发送完一个分组后,必须暂时保留已发送的分组的副本,以备重发。
- 分组和确认分组都必须进行编号
- 超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些。
2. 连续ARQ协议
- 位于发送窗口内的分组都可以连续发送出去,而不需要等待对方的确认。这样信道的利用率就提高了。
- 连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置
-
累计确认:
- 接受方一般采用累计确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已经正确收到了。
- 优点: 容易实现,即使丢失也不重传
- 缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。
-
Go-back-N(回退N)
- 如果发送方发送了前5个分组,而中间的第三个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。
- 这就是回退N,表示需要再退回来重传已发送过的N个分组。
- 可见当通信线路质量不好时,连续ARQ协议会带来负面的影响。
1. TCP可靠通信的具体实现
- TCP连接的每一端都必须设有两个窗口:一个发送窗口,一个接收窗口。
- TCP的可靠传输机制用字节的序号进行控制。TCP所有的确认都是基于序号而不是报文段。
- TCP两端的四个窗口经常处于动态变化之中。TCP连接的往返时间RTT也不是固定不变的。需要使用特定的算法估算较为合理的重传时间。
2. TCP报文的首部格式
- TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。
- 一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它首部中各字段的作用。
- TCP报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项(n是整数)。因此TCP首部的最小长度是20字节。
3. TCP可靠传输的实现
1. 以字节为单位的滑动窗口
- 总结
1、 A的发送窗口并不总是和B的接受窗口一样大(因为有一定的时间滞后)
2、TCP标准没有规定对不按序达到的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到之后,再按序交付上层的应用进程。
3、 TCP要求接收方必须有累计确认的功能,这样可以减少传输开销。