传输层概述


传输层

有两种协议,TCP(可靠)和UDP(不可靠),运输层在应用程序的端点之间传输应用层报文,端到端层面,传输层负责将应用层的数据分段,提供可靠或者不可靠 的传输,还处理了端到端的差错控制和流量控制问题。
               1.传输层负责将上层的数据分段和提供端到端的可靠或者不可靠的数据传输以及端到端的差错控制和流量控制等问题。
                2.包含的主要协议:TCP协议( Transmission Control Protocol),UDP协议( User Datagram Protocol
                3.传输的数据分组称为报文段(segment)


传输控制协议TCP

传输控制协议(Transmission Control Protocol,TCP)提供一种 面向连接的、可靠 的数据传输服务,保证了端到端数据传输的可靠性。
向应用进程提供面向连接的服务,两个需要通过TCP进行数据传输的应用进程之间首先必须建立一个TCP连接,并且在数据传输完成后要释放连接。一般将请求连接的应用进程称为客户机进程,而响应连接请求的应用进程称为服务器进程,即TCP连接的建立采用的是一种客户机/服务器工作模型。
提供全双工数据传输服务,只要建立了TCP连接,就能在两个应用进程间进行双向的数据传输服务,但是这种传输只是端到端的传输,不支持广播和多播。
提供面向字节流的服务,即TCP的数据传输是面向字节流的,两个建立了TCP连接的应用进程之间交换的是字节流。发送进程以字节流形式发送数据,接收进程也把数据作为字节流来接收。端到端之间不保留数据记录的边界,也就是说在传输的层面上不存在数据记录的概念。

TCP报文结构
校验和:用来校验整个TCP报文段的所有数据的正确性,包括TCP首部和数据。

校验和的计算方法:
两种极端情况:发送方每发送一个字节都要等待接收方确认,通信效率低;发送方不关心接收方是否确认,不断发送数据,从而可能造成接收方缓冲区溢出,丢失数据。 
通过流量控制来定义发送方在收到接收方的确认报文之前可以发送的数据量。滑动窗口是TCP实现流量控制的关键技术。
当发送应用进程产生数据很慢,或者接收应用进程接收处理数据很慢时,或者两种情况都存在时,在滑动窗口的操作中有可能出现发送方每次只发送包含一个字节(或较小字节数)的报文段,同时接收方每次也仅对接收到的包含一个字节(或较小字节数)的报文段进行确认。 
这样势必大大降低网络带宽的使用效率,此时通常也称为出现了傻瓜窗口综合症。为此,在TCP中主要引入了3种策略予以改进。
解决办法: 
Nagle算法:主要针对发送方产生数据比较慢,而造成发送报文段包含数据量比较小的情况,其主要思想是强迫发送方等待,让它收集发送数据,以便发送大块数据,即通过降低发送次数来加大每次发送的数据量。 
Clark算法:主要针对接收方接收处理数据较慢,而造成频繁发送确认报文的情况。即只要接收方的接收缓冲区已满,则每次接收到TCP报文后返回窗口值为0的确认报文,以停止发送方的数据发送,直到接收缓冲区的空闲区域已经能容纳最大长度的报文段或有一半以上的接收缓冲空间已经空闲,再发送一个窗口值不为0的确认窗口,以重新更新发送方的滑动窗口大小,使发送方可以继续发送报文段。 
延迟确认算法:当接收方收到报文段后,并不马上回复确认报文,而是等接收缓冲区已经有一定数量的空闲空间后,再回送确认报文段。

TCP拥塞控制
中间路由器或物理链路的超载势必也会引起数据传输的严重延时,即网络拥塞。如何处理? 
在TCP中引入了慢启动和拥塞避免两种策略机制来实现对拥塞窗口大小的控制,进而来避免和消除网络拥塞。 
发送方引入拥塞窗口,利用该窗口来控制发送方发送数据的速率 
拥塞窗口由发送方指定,实际发送窗口的大小从拥塞窗口和流量窗口中选择较小的窗口。
慢启动算法 
在建立连接时,发送方将拥塞窗口大小初始化为一个最大报文段的大小MSS,然后每收到一个接收方的对新报文段确认报文,拥塞窗口的大小就增加一个MSS,即对每一个发送方所发送的新报文段的确认都将使拥塞窗口的大小增加一个MSS。
拥塞避免算法 
为了避免拥塞窗口过快增长,尽量避免拥塞现象的出现。当拥塞窗口大小达到一个门限值时,便采取拥塞避免算法来改变拥塞窗口的大小,其方法是每收到一个确认报文,拥塞窗口大小增加一个MSS,即使该确认报文是针对多个报文段的,拥塞窗口也只增加一个MSS。
重传定时器 
由于上述两种策略都将使拥塞窗口变得很大,进而造成网络拥塞的发生。为此,TCP/IP中引入了重传定时器。当由于网络拥塞使重传定时器超时的时候,发送方则进入拥塞解决阶段。 
发送方在进行TCP报文段重传的同时,将拥塞窗口的门限值调整为拥塞窗口的一半,并将拥塞窗口恢复成一个MSS,然后进入新一轮的调整。

TCP差错控制
对于丢失或受损的报文段,发送方将依靠超时确认机制驱动报文段重发来解决。 
出现重复报文段时,接收方只是简单地丢弃重复报文段。 
出现报文段失序的情况后,TCP采用了 延迟确认的方式予以解决,即当接收方收到失序报文段后不会马上确认,而是先将其存放在缓冲区中,当被确认报文段之前的所有报文段都已经收到了才回送确认报文。 
当接收方的确认报文出现丢失等差错后,TCP引入了 累计确认机制 ,即当一个确认报文段丢失后,系统可以不予理睬,后面所接收到的确认报文段可以确认,一直到该报文段中的确认号指明的字节为止的所有字节都已经收到。

用户数据报协议UDP

用户数据报协议(User Datagram Protocol,UDP)是传输层的两个主要协议之一,相对TCP来说,UDP是一种非常简单的协议,在网络层的基础上实现了应用进程之间端到端的通信。 
UDP提供的是一种无连接的、不可靠的数据传输方式,在数据传输过程中没有流量控制和确认机制,数据报可能会丢失、延迟、乱序到达信宿。 
UDP只是提供了利用校验和检查数据完整性的简单差错控制,属于一种尽力而为的数据传输方式。
首部一共8字节
源端口号:即运行在信源机的应用进程所使用的端口号。 
目的端口号:即运行在信宿机的应用进程所使用的端口号。 
数据报总长度:定义了用户数据报的总长度,即UDP数据报的首部和数据的长度和。 
校验和:用于检验整个用户数据报的差错。(相加取反,溢出加到末尾)
UDP用户数据报传输队列 
UDP用户数据报传输队列与UDP端口相关联,因此每个使用UDP协议的应用进程都包含一个输入队列和一个输出队列。  
当UDP为某个应用进程临时分配一个UDP端口号时也同时在内存中创建了一个输出队列和输入队列。  
当用户进程发送数据报时,将该数据报写入输出队列,UDP逐个将数据报取出,加上UDP首部后封装为UDP数据报交付给网络层;  
而到达信宿的数据报将放在与该数据报的目的端口号对应的输入队列中。  
输入输出队列都可能溢出,如果输出队列溢出,操作系统将要求应用进程降低数据报发送的速度,而如果输入队列溢出,应用进程就丢弃该数据报,并请求向发送进程发送“端口不可达”报文。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值