vlambda博客
学习文章列表

UDP协议:UDP和TCP相比快在哪里?


可靠性


如果一个网络协议是可靠的,那么它能够保证数据被无损地传送到目的地。当应用的设计者选择一个具有可靠性的协议时,通常意味着这个应用不能容忍数据在传输过程中被损坏。


TCP协议,是一个支持可靠性的协议。UDP协议,是一个不支持可靠性的协议。


校验和(Checksum)


校验和,是一种非常常见的可靠性检查手段。


尽管UDP不支持可靠性,但是像校验和(Checksum)这一类最基本的数据校验,它还是支持的。不支持可靠性,并不意味着完全放弃可靠性。TCP和UDP都支持最基本的校验和算法。


UDP协议:UDP和TCP相比快在哪里?


当要传输数据的时候,数据会被分片,把每个分片看作是一个字节数组。然后再分片中,预留几个字节去存储校验和。


校验和随着数据分片一起传输到目的地,目的地会用同样的算法再次计算校验和。


对于TCP和UDP,都实现了校验和算法,但二者的区别是,TCP如果发现校验核对不上,也就是数据损坏,会主动丢失这个封包并且重发。


而UDP什么都不会处理,UDP把处理的权力交给使用它的程序员。


请求/应答/连接模型


另一种保证可靠性的方法是请求响应和连接的模型。TCP实现了请求、响应和连接的模型,UDP没有实现这个模型。



在TCP协议当中,任何一方向另一方发送消息,另一方都需给与一个应答。如果发送方在一定的时间内没有获得应答,发送方就会认为自己的信息没有达到目的地,中途发生了损坏或者丢失等,因此发送方会选择重发这条消息。


1、TCP的三次握手


在TCP协议当中。假设Alice和Bob是两个通信进程。当Alice想要和Bob建立连接的时候,Alice需要发送一个请求建立连接的消息给Bob。


这种请求建立连接的消息在TCP协议中称为同步(SYN)。而Bob收到SYN,必须马上给Alice一个响应。这个响应在TCP协议当中称为响应(ACK)。


当Alice给Bob SYN,Bob给Alice ACK,这个时候,对Alice而言,连接就成功了。但是TCP是一个双工协议。所谓双工协议,代表数据可以双向传送。


虽然对Alice而言,连接建立成功了。但是对Bob而言,连接还没有建立。


如果这个时候,Bob马上给Alice发送消息,信息可能先于Bob的ACK到达Alice,但这个时候Alice还不知道连接建立成功。


所以解决的办法就是Bob再给Alice发一次SYN,Alice再给Bob一个ACK。


2、TCP的四次握手


四次握手(TCP断开连接)的原理类似。中断连接的请求称为Finish(用FIN表示);


- 第1步是Alice发送FIN

- 第2步是Bob给ACK

- 第3步是Bob发送FIN

- 第4步是Alice给ACK


3、连接


连接是一个虚拟概念,连接的目的是让连接双方达成默契,倾尽资源,给对方最快的响应。连接也是一个很好的编程模型。当连接不稳定的时候,可以中断连接后再重新连接。这种模式极大地增加了两个应用之间的数据传输的可靠性。