当前位置: 首页 > 后端技术 > Node.js

TCP和UDP的比较

时间:2023-04-03 17:15:46 Node.js

介绍网络协议是每个前端工程师必须掌握的知识。TCP/IP中有两个具有代表性的传输层协议,即TCP和UDP。本文将介绍两者以及它们之间的区别。想阅读更多优质文章,请戳GitHub博客1.TCP/IP网络模型如果计算机和网络设备要相互通信,双方必须基于相同的方法。例如,如何检测通信目标、哪一方先发起通信、使用哪种语言进行通信、如何结束通信等规则,都需要事先确定。不同硬件、操作系统之间的通信,这一切都需要一个规则。我们称此规则为协议。TCP/IP是各种与Internet相关的协议族的总称,如:TCP、UDP、IP、FTP、HTTP、ICMP、SMTP等都是TCP/IP族内的协议。TCP/IP模型是Internet的基础,是一系列网络协议的总称。这些协议可以分为四层,即链路层、网络层、传输层和应用层。链路层:负责封装和解封装IP数据包,发送和接收ARP/RARP数据包等。网络层:负责路由和发送数据包到目标网络或主机。传输层:负责对消息进行分组和重组,并将消息封装成TCP或UDP协议格式。应用层:负责为用户提供应用,如HTTP、FTP、Telnet、DNS、SMTP等。在网络架构中,网络通信的建立必须在两者通信的对等层进行派对,并且不能交错。在整个数据传输过程中,数据在发送端经过每一层时,都必须附加相应层的协议头和协议尾(只有数据链路层需要封装协议尾),即数据必须通过协议进行封装。识别相应层使用的通信协议。接下来,TCP/IP中有两个具有代表性的传输层协议——TCP和UDP。2、UDPUDP协议的全称是UserDatagramProtocol。它用于处理数据包,其方式与网络中的TCP协议相同。它是一种无连接协议。在OSI模型中,第四层,传输层,是IP协议的上层。UDP的缺点是不提供数据包的分组、组装和排序,也就是说,消息发送后,无法知道是否安全、完整地到达。它具有以下特点:1、对于无连接,首先,UDP不需要像TCP那样在发送数据之前进行三次握手建立连接。如果要发送数据,可以开始发送。并且它只是数据报文的搬运工,不会对数据报文进行任何的拆分和拼接操作。具体来说:在发送端,应用层将数据传递给传输层的UDP协议。UDP只会在数据中加上一个UDP头来标识UDP协议,然后传递给网络层。在接收端,网络层将数据传递给传输层。UDP只是去掉IP头,传递给应用层,不做任何拼接操作。2、具有单播、组播、广播功能。UDP不仅支持一对一的传输,还支持Many、多对多、多对一的传输方式,也就是说UDP提供了单播、组播、广播的功能。3、UDP是UDP为报文的发送者向应用程序发送的报文。添加包头后,传递给IP层。UDP既不合并也不拆分应用层传送的数据包,而是保留这些数据包的边界。因此,应用程序必须选择合适大小的消息。4、不可靠首先,不可靠体现在没有联系上。通讯无需建立连接,随心所欲发送。这种情况绝对不靠谱。并且它接收到什么数据就发送什么,它不会备份数据,发送数据时也不会关心对方是否正确接收到数据。再者,网络环境有好有坏,但由于UDP没有拥塞控制,所以总是以恒定的速度发送数据。即使网络状况不佳,也不会调整发送速率。这种实现方式的缺点是在网络不好的情况下可能会导致丢包,但是优点也很明显。在一些对实时性要求高的场景(比如电话会议),需要使用UDP而不是TCP。从上面的动态图我们可以知道,UDP只会把你要发送的数据包丢给对方,并不关心数据是否安全完整的到达。5、头部开销小,传输数据包时效率很高。UDP头包含以下数据:两个16位的端口号,分别是源端口(可选字段)和目的端口,整个数据包的长度,整个数据包的校验和(IPv4可选字段),该字段用于查找头信息和数据中的错误。所以UDP的头部开销很小,只有八个字节,比起至少二十个字节的TCP要少得多,在传输数据包的时候效率很高3.TCP当一台计算机要与另一台计算机通信时,两台计算机之间的通信需要通畅可靠,以保证数据的正确发送和接收。例如,当您要查看网页或查看电子邮件时,您希望完整、有序地查看网页,而不丢失任何内容。当你下载一个文件的时候,你希望得到的是完整的文件,而不仅仅是文件的一部分,因为如果数据丢失或者乱序,那不是你想要的结果,所以就用到了TCP。TCP协议的全称是TransmissionControlProtocol,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。TCP是一种面向连接的可靠流式传输协议。流是一种不间断的数据结构,你可以把它想象成流下排水管的水。1、TCP连接过程如下图所示。可以看到建立TCP连接的过程是(三次握手过程):第一次握手客户端向服务器发送一个连接请求报文段。该消息段包含它自己的数据通信初始序列号。请求发送后,客户端进入SYN-SENT状态。第二次握手服务器收到连接请求报文后,如果同意连接,则发送响应,其中也会包含自己的数据通信初始序列号,发送后进入SYN-RECEIVED状态。第三次握手后,当客户端收到连接协议的响应时,也会向服务器发送确认信息。客户端发送这个报文后进入ESTABLISHED状态,服务端收到响应后也进入ESTABLISHED状态,连接建立成功。这里你可能会有疑问:为什么TCP建立连接需要三次而不是两次握手?这是因为这是为了防止服务器接收到无效的连接请求段,从而导致错误。2、TCP断开TCP是全双工的,断开时两端都需要发送FIN和ACK。第一次握手,如果客户端A认为数据传输完成,需要向服务器B发送连接释放请求,第二次握手B收到连接释放请求后,会告诉应用层释放TCP连接.然后会发送ACK包,进入CLOSE_WAIT状态,表示A到B的连接已经释放,不再接收A发送的数据。但是因为TCP连接是双向的,B仍然可以向A发送数据。在第三次握手B中,如果此时还有未发送完的数据,则继续发送,发送完成后,发送连接释放请求给A,然后B就会进入LAST-ACK状态。第四次握手A收到释放请求后,向B发送确认响应,此时A进入TIME-WAIT状态。该状态会持续2MSL(MaximumSegmentLifetime,指一个报文段在网络中存活的时间,超时后将被丢弃)。如果B在这段时间内没有重传请求,则进入CLOSED状态。B收到确认响应后,也进入CLOSED状态。3、TCP协议的特点是面向连接的,也就是说发送数据前必须在两端建立连接。建立连接的方法是“三次握手”,可以建立可靠的连接。建立连接为可靠的数据传输奠定了基础。它只支持单播传输。每个TCP传输连接只能有两个端点,只能进行点对点的数据传输。不支持多播和广播传输方法。面向字节流的TCP不像UDP那样独立传输单个数据包,而是以字节流的形式传输,不保留消息边界。可靠传输对于可靠传输,丢包和误码的判断取决于TCP的段号和确认号。为了保证报文传输的可靠性,TCP给每个数据包一个序号,序号也保证了传输到接收实体的数据包的顺序接收。然后接收实体对成功接收的字节发回相应的确认(ACK);如果发送实体在合理的往返延迟(RTT)内没有收到确认,则相应的数据(假定丢失)将被重传。提供拥塞控制当网络拥塞时,TCP可以降低注入网络的数据速率和数量,缓解拥塞。TCP提供全双工通信。TCP允许通信双方的应用程序随时发送数据,因为TCP连接两端都有缓存来临时存储双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间,一次发送更多的数据段(最大数据段大小取决于MSS)四、TCP和UDP的比较1、比较UDPTCP是connectionlessorconnection-oriented无论是可靠传输还是不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制连接对象个数支持一对一,一对多,多-一对一和多对多的交互通信只能是一对一通信传输方式是面向消息,面向字节流的。头部开销很小,只有8个字节。标头最小为20个字节,最大为60个字节。适用场景适用于实时应用(IP电话、视频会议、直播等),适用于要求可靠的传输应用,如文件传输2.总结TCP向上层提供面向连接的可靠服务,UDP向上层提供无连接和不可靠的服务。UDP虽然不如TCP传输准确,但在很多对实时性要求高的地方也能有所作为。数据精度要求高,速度可以比较慢。可以用TCP给大家推荐一个有用的BUG监控。工具Fundebug,欢迎免费试用!欢迎关注公众号:前端工匠,让我们一起见证你的成长!如果你觉得有所收获,欢迎打赏我,鼓励我输出更多优质的开源内容。参考文章和书籍计算机网络简明教程和模拟实验TCP和UDP的区别前端面试方法一文看懂TCP/IP,TCP、UDP、IP、Socket的关系深入理解TCP和UDP的特点和区别计算机网络中的协议