首页 > 编程知识 正文

udp协议和tcp协议的区别,TCP/UDP协议

时间:2023-05-06 08:30:10 阅读:192657 作者:3590

UDP协议和TCP协议都是传输层的协议,TCP协议提供可靠的通信传输,而UDP则是常常被用于让广播和细节控制的交给应用的通信传输

UDP协议:不保证安全,但是性能比较好

UDP的传输过程类似于寄信,仅仅在乎的是信件有没有发送,不在乎是否接收
特点:

无连接:仅仅知道接收一方的IP地址和和端口号就可以进行发送不可靠:没有确认的机制,没有重传的机制面向数据报:不能够灵活的控制读写数据的次数和数量,应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并,倘若我们需要传输的数据超过64K,我们就需要在应用层手动的分包,多次发送,并且在接收端手动的拼装;有接收缓冲区,没有发送缓冲区:这个接收缓冲区不能保证接收到的UDP的数据报的顺序和发送UDP数据报的顺序是一样的,当缓冲区满的时候,再接收到的数据就会被直接丢弃 TCP协议:安全和性能的一个平衡

TCP全称为 “传输控制协议(Transmission Control Protocol”)

4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP头部最大长度是15 * 4 = 606位标志位:
URG: 紧急指针是否有效
ACK: 确认号是否有效
PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段

特点:

有连接:双方建立好连接,才可以进行通信可靠:面向字节流:具有接收和发送缓冲区

1、确认应答机制

基于序列号和确认序列号实现,TCP将每个字节的数据进行编号,每一个ACK都带有一个对应的确认序号,告诉发送的一方,下次发送从哪个地方开始发送

2、超时重传机制

倘若发送端发送的数据,因为网络等问题,无法到达接收端;如果发送端在一个特定的时间啊i内没能接收到接收端发送的确认应答,这时发送端会重新发送刚才的数据。

但是也有一种情况,接收端发送的ACK丢掉,这时发送端误以为接收端没能收到,这时会继续发送数据,接收端会收到很多重复的数据,这时我们就可以利用前面说的序列号进行去重

系统基于TCP协议实现,动态的计算报文的最大生存时间(MSL),超时时间设置为(2MSL)
超过超时时间,表示丢包(发送的数据报,接收的确认数据报),此时需要重新发送数据报(系统中发送缓冲区中保存有数据可以重发)
3、连接管理机制

建立连接(三次握手)
关闭连接(四次挥手)


CLOSE-WAIT状态:此时客户端已经发出释放连接的请求,已经没有数据传输过来,但是服务端还有数据没有发送完,这时就会有这个状态
客户端需要等待2MSL(TIME_WAIT状态)
因为第四次的响应报文ACK可能会丢失,会导致服务端无法关闭连接,需要服务端重新发送FIN请求,所以客户端必须等待最大的超过时间(2MSL),2MSL是服务端重新发送FIN报文和客户端发出ACK确认报文所能保持有效的一个最大时长、

为什么要三次握手和四次挥手
在建立连接时,服务端接收到SYN请求之后,服务端并不需要做什么准备,所以就可以一次性返回SYN+ACK报文
在关闭连接的时候,服务端收到客户端的FIN报文,并不会立即关闭,只是回复ACK,告诉给客户端我收到了你的关闭请求,服务端可能有数据还没有数据还没有传输完,只能等数据传输完之后,才会发送FIN请求,这两个地方要分开发送。

4、滑动窗口:处于发送端,提高性能
这种机制被称为“高速重发控制”(“快重传”)
滑动窗口是为了改善性能,在确认应答中,每每发送一个数据报,都要进行确认应答,这样性能会比较差,所以就一次发送多个数据报。
窗口的大小就是不需要等待应答就可以继续发送数据报的最大值,也就是说将滑动窗口里的数据报看成一个组,倘若里面有四个段,每当收到一个应答,滑动窗口就向后移一个,依次类推。
操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答; 只有确认应答过的数据, 才能从缓冲区删掉;

数据报丢失

应答数据报丢失:这种情况可以根据后面的ACK进行确认发送的数据报丢失

当1001-1000报文段丢失之后, 发送端会一直收到 1001 这样的ACK, 此时如果发送端主机连续三次收到了同样一个 “1001” 这样的应答, 就会将对应的数据 1001 - 2000 重新发送;这个时候接收端收到了 1001 之后, 再次返回的ACK就是7001了(因为2001 - 7000)接收端其实之前就已经收到了, 被放到了接收端操作系统内核的接收缓冲区

5、流量控制
接收端通过TCP协议头中的“窗口大小”字段,高速发送端,发送数据的大小
这样做的目的就是为了防止接收缓冲区被打满,再次接收数据就直接丢弃,,使用窗口大小可以告诉发送端发送数据的大小
6、拥塞控制
网络上存在很多的计算机,可能当前的网络状态比较拥堵,在不清楚目前网络的情况下,贸然发送大量的数据,无疑是雪上加霜
对于这个问题,TCP引入了慢启动的机制,先发送少量的数据,摸清楚当前的网络状态,再决定按照多大的速度传输数据
拥塞窗口的初始值为1,以慢启动指数增长的方式,达到一定的阈值就转变为线性增长的方式
7、延迟应答机制
当接收到多个数据报的时候,不针对每条数据报进行响应,而是延迟一定的时间,这样缓冲区的数据可以很快被处理掉,这样返回的窗口的大小的字段可以设置更大,传输效率会变高
8、粘包问题
避免粘包问题就是要明确包的边界
UDP不会出现粘包问题,站在应用层的站在应用层的角度, 使用UDP的时候, 要么收到完整的UDP报文, 要么不收. 不会出现"半个"的情况.

TCP/UDP对比

TCP是可靠连接, TCP和UDP之间的优点和缺点, 不能简单, 绝对的进行比较,根据不同的需求进行判断哪种协议是最优的
TCP用于可靠传输的情况, 应用于文件传输, 重要状态更新等场景;
UDP用于对高速传输和实时性要求较高的通信领域, 例如, 早期的QQ, 视频传输等. 另外UDP可以用于广播;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。