一、tcp和udp区别
UDP | TCP | |
---|---|---|
是否连接 | 无连接 | 面向连接 |
是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信 | 只能是一对一通信 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 首部开销小,仅8字节 | 首部最小20字节,最大60字节 |
适用场景 | 适用于实时应用(IP电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输 |
二、tcp安全可靠的实现基础
1、停止等待协议:是tcp传输可靠的重要途经,意思就是再发送一个分组之后,必须等待对方确认之后才能发送下一个分组,优点是简单,缺点是信道利用率太低,一次只能发送一个消息,信道大部分事件都是空闲的。
2、超时重传三种情况:
(1)、分组丢失:发送方已经发送分组,接收方没有收到;
(2)、确认丢失:接收方收到分组,发送确认分组,但确认分组丢失;
(3)、确认延时:确认分组没有丢失,由于传输太慢,发送方在规定时间内没有收到接收方发的确认分组;
3.下面两个协议就是解决信道效率太低和增大吞吐量,以及流量控制:
1)连续ARQ协议:它是指发送方维护着一个窗口,这个窗口中不止有一个分组,而是有好几个分组。窗口的大小是由接收方返回的win值决定的。所以窗口大小 是动态变化的。只要在窗口中的分组都可以被发送,这就使得TCP一次不是只发送一个分组了。从而大大提高了信道利用率。并且它采用累积确认的方式,对于按序到达的最后一个分组进行确认。
2)滑动窗口协议:因为窗口不断往前走。该协议允许发送方在停止并等待确认前发送多个数据分组。不需要每发送一个就分组就停下来等待确认。所以可以加速数据的传输,还可以控制流量。
3)累积确认:如果发送方发送了5个分组,接收端只收到了1 2 4 5 ,没有收到3,那么我的确认信息会是说明我期望下一个收到的组是第三个,此时发送方会将3 4 5都重发一遍。
比如上面的例子,应该是右边发送数据给左边。左边进行确认。窗口往右移动。
接收方通告的窗口称为提出的窗口(offered window):上面的4 – 9
说明接收方已经收到了3字节的数据,且通告窗口大小为6.
当接收方确认数据后,这个滑动窗口不断的向右移动。下面用三个术语来描述窗口左右边沿的运动:
1) 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
2) 当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据,并释放了TCP的接收缓存时。(就是接收方读取了缓冲区里面的数据的时候)
3) 当右边沿向左移动,称为窗口收缩。
如果左边沿到达右边沿,则称其为一个零窗口。此时发送方不能发送任何数据。