欢迎光临
我们一直在努力

TCP和UDP的区别

注:个人笔记,仅供参考
TCP(80)和UDP都是传输层协议,主要区别在于传输方式和可靠性

TCP是面向字节流的协议,不保留应用层消息边界面;通过三次握手建立连接,四次挥手断开连接,还通过序列号、确认应答、超时重传等机制保证数据可靠、有序到达,同时还具有流量控制和拥塞控制机制,这些机制也会带来一定开销

UDP是面向数据报的协议,每次发送有独立的边界;是面向无连接的协议,发送数据前不需要建立连接,也不保证数据一定到达、也不保证按顺序到达。协议开销比较小,传输延迟比较低。

TCP通常用于文件传输、HTTP通信等对数据完整性比较高的场景;

UDP常用于音视频、在线游戏等对实时性要求比较高的场景

另外:

UDP可以再应用层面自定义可靠的确认、重传、控制顺序;
TCP也不能够保证数据最终一定能到达,例如中断连接,传输就会失败

传统的HTTP/1.1、HTTP/2通常是运行在TCP之上,HTTP需要靠有可靠、有序的数据传输。因此很适合。

HTTP/3使用QUIC。是基于UDP实现的可靠传输。

TCP三次握手过程:

客户端发送SYN,携带初始序列号seq = x,表示请求建立连接。

服务端接收到后回复SYN + ACK,携带seq = y、ack = x +1,表示收到请求,同时发起自己的序列号同步

客户端回应ACK,携带ack = y+1,确认收到服务端SYN,连接建立。

为什么是三次:

如果是两次握手,那服务器不确定客户端是否收到自己的回复,如果网络中有一个延迟很少的旧连接,服务器可能会误认为是新连接请求而创建连接,造成资源浪费。

四次挥手的过程:

客户端主动关闭,服务器被动关闭

客户端发送关闭请求FIN;

服务器收到并发送ACK确认,等数据发完暂时不关闭;

服务器数据接收完发送关闭请求FIN,表示自己也要关闭发送;

客户端发送ACK确认收到服务器关闭请求,随后进入TIME_WAIT,等待一段时间关闭连接;

为什么是四次:
因为TCP通信时全双工通信,需要双方都分别关闭 ;主动关闭方发送FIN,被动关闭方先回复ACK,等待数据发送完成后再发送FIN,主动关闭方最后再回复ACK。

为什么客户端最后要TIME_WAIT:(一般是两个报文生存空间)

  • 是为了保证最后一个ACK有机会到达服务器,如果最后一个ACK丢失,服务端会重复发FIN,客户端在这期间可以再次发送ACK。
  • 让就链接中的延迟报文在网络中消退。减少旧连接报文干扰后续相同连接标识的风险。
  • 也有可能会问CLOSE_WAIT是什么

    本机收到对方的FIN并返回ACK,本机进入CLOSE_WAIT状态。这说明对端已经关闭了它的发送方向,但是本机还没有完成关闭操作。关闭待完成。

    如果服务器存在大量的CLOSE_WAIT那就可能是对端收到关闭通知,但是没及时关闭对应套接字

    赞(0)
    未经允许不得转载:171主机测评 » TCP和UDP的区别
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址