C++常见面试题 | Day9

7、TCP和UDP的区别?

TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输;

TCP、UDP都是传输层协议。

基本区别:

TCP是连接传输,UDP是无连接传输;TCP要求系统资源较多,UDP较少;UDP程序结构较简单;TCP(字节流模式)与UDP(数据报模式);TCP保证数据正确性,UDP可能丢包;TCP保证数据的顺序,UDP不保证。

UDP应用场景:实时应用

面向数据报方式;网络数据大多为短消息;拥有大量CLient;对数据安全性无特殊要求;网络负担非常严重,但对响应速度要求高;

UDP是不是全双工

所谓全双工,半双工,单工是指面向连接时才有的说法,如果不是面向连接,没有一个确定的连接的话,怎么会出半双工这种只准一个来或者一个去的说法呢?

UDP支持一对一,一对多,多对一和多对多的交互通信。如果一定要涉及到全双工的话大概理解为不仅提供全双工,甚至提供全多工服务,只是UDP不是可靠的服务而已。

TCP与UDP的区别总结

TCP面向连接,如打电话要先拨号建立连接,UDP是无连接的,即发送数据之前不需要建立连接;

TCP提供可靠服务。也就是说TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付;

TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低;

每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;

TCP首部开销20字节;UDP的首部开销小,只8个字节;

TCP的逻辑通信信道是全双工的可靠通信,UDP则是不可靠信道。

8、如何使用UDP实现可靠传输?

目前有如下开源程序利用UDP实现了可靠的数据传输,分别为RUDP、RTP、UDT:

1.RUDP(Reliable User Datagram Protocol)

RUDP提供一组数据服务质量增强机制,如拥塞控制的改进、重发机制及淡化服务器算法等,从而在包丢失和网络拥塞的情况下,RTP客户机(实时位置)面前呈现的就是一个高质量的RTP流。在不干扰协议的实时特性的同时,可靠UDP的拥塞控制允许TCP方式下的流量控制行为。

2.RTP(Real Time Protocol)

RTP为数据提供了具有实时特征的端到端的传送服务,如果在组播或单播网络服务下的交互式视频音频或模拟数据;

3.UDT(UDP-based Data Transfer Protocol)

基于UDP数据传输协议是一种互联网数据传输协议,UDT的主要目的是支持高速广域网上的海量数据传输,而互联网上的标准数据传输协议TCP在高带宽长距离网络上性能很差。

9、close_wait状态的作用?

close_wait是服务端在收到客户端关闭请求(FIN报文段)并且将ACK发送出后所处的状态,这种状态表示收到了对端关闭的请求,但本端还没有完成工作,还未关闭;

出现大量close_wait的现象,主要原因是某种情况下对方关闭了socket连接,但是我方忙于读或写,没有关闭连接。

10、滑动窗口的作用?

1.提供TCP可靠性:对发送的数进行确认;

2.流量控制:窗口大小随链路变化。

posted @ 2021-07-13 10:57  Season_Chu  阅读(65)  评论(0)    收藏  举报