TCP和UDP协议的区别以及原理最近重新认知了一下TCP和UDP的原理以及区别,做一个简单的总结 。
一、作用首先,tcp和udp都是工作在传输层,用于程序之间传输数据的 。数据一般包含:文件类型,视频类型,jpg图片等 。
![图文并茂,讲解TCP和UDP协议的原理以及区别](http://img.jiangsulong.com/220722/1QR55031-0.jpg)
文章插图
二、区别TCP是基于连接的,而UDP是基于非连接的 。
tcp传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件,浏览网页等等
udp的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高但是对少量丢包并没有太大要求的场景 。比如:域名查询,语音通话,视频直播等 。udp还有一个非常重要的应用场景就是隧道网络,比如:VXLAN
以人与人之间的通信为例:UDP协议就相当于是写信给对方,寄出去信件之后不能知道对方是否收到信件,信件内容是否完整,也不能得到及时反馈,而TCP协议就像是打电话通信,在这一系列流程都能得到及时反馈,并能确保对方及时接收到 。如下图:
![图文并茂,讲解TCP和UDP协议的原理以及区别](http://img.jiangsulong.com/220722/1QR5GH-1.jpg)
文章插图
三、TCP通信的过程:tcp是如何保证以上过程的?
分为三个步骤:三次握手,传输确认,四次挥手 。三次握手是建立连接的过程 。
四、三次握手:当客户端向服务端发起连接时,会先发一包连接请求数据,过去询问一下,能否与你建立连接?这包数据称之为SYN包,如果对端同意连接,则回复一包SYN+ACK包,客户端收到之后,发送一包ACK包,连接建立,因为这个过程中互相发送了三包数据,所以称之为三次握手 。
![图文并茂,讲解TCP和UDP协议的原理以及区别](http://img.jiangsulong.com/220722/1QR5D14-2.jpg)
文章插图
为什么要三次握手而不是两次握手?这是为了防止,因为已失效的请求报文,突然又传到服务器,引起错误, 这是什么意思?
假设采用两次握手建立连接,客户端向服务端发送一个syn包请求建立连接,因为某些未知的原因,并没有到达服务器,在中间某个网络节点产生了滞留,为了建立连接,客户端会重发syn包,这次的数据包正常送达,服务端发送syn+ack之后就建立起了连接 。
但是第一包数据阻塞的网络突然恢复,第一包syn包又送达到服务端,这时服务端会认为客户端又发起了一个新的连接,从而在两次握手之后进入等待数据状态,服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致,如果在三次握手的情况下,服务端收不到最后的ack包,自然不会认为连接建立成功 。
所以三次握手本质上来说就是为了解决网络信道不可靠的问题,为了在不可靠的信道上建立起可靠的连接,经过三次握手之后,客户端和服务端都进入了数据传输状态 。
五、数据传输数据传输:【图文并茂,讲解TCP和UDP协议的原理以及区别】一包数据可能会被拆成多包发送,如何处理丢包问题,这些数据包到达的先后顺序不同,如何处理乱序问题?
针对这些问题,tcp协议为每一个连接建立了发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1,发送数据时,从数据缓冲区取一部分数据组成发送报文,在tcp协议头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ack等于接受序列号加长度,也就是下包数据发送的起始序列号,这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到,发送端也可以发送一次的连续的多包数据,接受端只需要回复一次ack就可以了 。如图:
![图文并茂,讲解TCP和UDP协议的原理以及区别](http://img.jiangsulong.com/220722/1QR53502-3.jpg)
文章插图
六、四次挥手:
![图文并茂,讲解TCP和UDP协议的原理以及区别](http://img.jiangsulong.com/220722/1QR5K63-4.jpg)
文章插图
处于连接状态的客户端和服务端,都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭 。假设客户端主动发起连接关闭请求,他给服务端发起一包FIN包,标识要关闭连接,自己进入终止等待1装填,服务端收到FIN包,发送一包ACK包,标识自己进入了关闭等待状态,客户端进入终止等待2状态,这是第二次挥手,服务端此时还可以发送未发送的数据,而客户端还可以接受数据,待服务端发送完数据之后,发送一包FIN包,最后进入确认状态,这是第3次挥手,客户端收到之后恢复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手 。
推荐阅读
- 通俗易懂讲解PID pid是什么意思
- 讲解七年级无理数知识点 无理数是什么意思
- 手把手教你在netty中使用TCP协议请求DNS服务器
- Node基于TCP建立的服务器
- 生豆芽的方法:方法详细讲解 绿豆芽的生长过程
- 极简英语语法——宾语从句 英语宾语从句讲解
- 中国《二十四孝图》,图文并茂,孝感动天! 中国古代二十四孝图
- 傻傻分不清的TCP keepalive和HTTP keepalive
- tcp/ip协议包含哪几层?
- 滕王阁序最著名的讲解滕王阁序原文翻译及赏析