UDP 特点
面向非连接
不维护连接状态,支持同时向多个客户端传送相同的信息
数据包报头只有8个字节,额外开销小
吞吐量受限于数据生成速率,传输速率以及机器性能
尽最大努力交付(不保证可靠)
面向报文,不对报文信息进行合并和拆分
TCP和UDP的区别
(1)TCP面向连接,UDP面向非连接
(2)TCP可靠,UDP不可靠
(3)TCP有序(到达不一定有序,但最后会排序),UDP无序
(4) TCP速度慢,UDP速度快,UDP适合在线网络
(5)量级,TCP报文头是20字节,而UCP是8字节
TCP滑动窗口
RTT:发送数据包和收到对应ACK包所需时间
RTO:重传时间间隔
滑动窗口协议:
滑动窗口协议,是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。
TCP 使用滑动窗口做流量控制与乱序重排
发送方来看数据分为四类
1.得到服务器确认且已经发送的
2.还没得到服务器确认但已经发送的
3.未发送但服务器允许发送的
4.未发送且因为达到了 window 的大小不允许发送的数据
[2-3]就是发送方的滑动窗口
滑动窗口在被连续确认后才进行滑动
当 ACK 连续被确认,比如32-36连续确认4为后才开始把分类2的数据发送,同时扩大分类3向右的范围
接收方缓存内三种状态
1.已接收并且已经发送 ACK 回执的数据
2.未接收但可以接收状态 - 接收窗口 滑动方式一致
3.未接收且不能接收的状态 - 达到窗口阈值
ACK 直接由 TCP 回复,默认没有应用延迟,不存在已接收未回复 ACK 的状态
[2]就是接收窗口
1.无差错情况
2.出现差错
如果A发送的过程中出现差错,B在接收M1时检测出了差错,就丢弃M1,其他什么都不做(也不会通知A收到有差错的分组)。又或者A传送的过程中分组丢失了,以上这两种情况下,B不会发送任何信息。
既然说它是可靠传输协议,那自然有它可靠的方法:如果发生以上的情况,A只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,所以它会重传刚刚的发送过的分组,也就是所谓的超时重传。
超时重传的原理也很简单:发送方发送完一个分组后,就会设置一个超时计时器,如果超时计时器到期之前没有收到接收方发来的确认信息,则会重发刚发送过的分组;如果收到确认信息,则撤销该超时计时器。
3.确认丢失和确认延迟
如果A发送了M1分组,到达B,B发送了M1确认信息,但由于网络原因,该确认信息丢失。那么这个时候,A在超时重传时间内,没有收到B的确认信息,而且它并不知道是自己的分组有差错、丢失,还是B发生的确认丢失了。因此,A会在超时重传过后,重传M1分组。
接收方B会采取这两个行动:
①B会丢弃M1分组,不向上层交付。(B之前已经收到过M1分组了)
②向A发送确认(因为A重发了,肯定重传时间内没有收到确认信息)