?
作为一个软件测试,我们都知道一些常用的网络协议是必须被我们理解和掌握的。面试的时候,面试官也喜欢问一些协议相关的问题,包括TCP和UDP这两个协议,出现的频率很高,因为都很基础。因为两种协议都在传输层,所以它们经常被用于比较。
然后,要知道它们之间的区别,我们首先需要知道这两个协议的具体实现原理。
TCP协议 TCP,全称是传输控制协议,顾名思义,就是在一定程度上控制数据的传输。 众所周知,当一个网络消息传输到传输层时,它会封装传输层的一个数据头,所以作为传输层协议,TCP也会封装一个TCP协议头。这个报头中包含的信息实际上代表了这个协议能做什么。的TCP标头如下图所示:
?
?
让我们解释一下里面每个字段的含义: 源端口号/目的端口号:TCP协议的端口用来唯一区分上层应用协议,可以帮助找到计算机的应用程序,明确数据来自哪个应用进程,传输到哪个应用进程。 每个应用层协议都有一个专用端口,比如我们熟悉的一些协议。http协议的端口是TCP端口80,https协议的端口是TCP端口443,SSH协议的端口是TCP端口22,DNS协议是TCP端口53,FTP协议是TCP端口20/21等等。 序号:如果TCP数据太大,需要在网络中分段。这个序列号记录了每个数据包的序列号,这使得接收方可以正确地重组TCP数据。因此,每个TCP消息都会携带一个序列号。 确认号):TCP协议确认主机确实收到了我们客户端发送的数据包数据,数据传输可靠。当然,我们的客户希望收到主机的确认,这也是这个确认号的目的。当客户端收到该确认码时,它可以确认之前发送的数据包已被正确接收。该确认号本身的编号是预期从另一方接收的下一个消息段的数据的序列号。 代码控制标志:状态控制代码有六个标志字段,即U、A、P、R、S和f。这些标志位用于标记该消息的类型: 确认:确认位,当确认= 1时,表示该包为确认包,确认号有效;当ack = 0时,确认号无效。 RST: Reset位(Reset),当rst = 1时,表示TCP连接出现严重错误(如主机崩溃或其他原因),需要释放连接后重新建立传输连接。 SYN:synchronized,SYN=1,表示这是连接请求或连接接受消息。通常,带有SYN标记的数据包意味着“主动”连接到另一方。 FIN: Final,用于释放连接。当fin = 1时,表示该段发送方的数据已经发送,需要释放传输连接。 这些报头字段实际上是用来为TCP协议建立连接和断开链路的,所以我们来介绍一下为TCP协议建立链路的过程。
TCP的三次握手 如果要在两台主机之间发送消息,如果底层基于TCP协议,则必须首先建立TCP链路。tcp连接建立的过程,也就是大家熟悉的TCP三次握手的过程,如下图所示:
?
在尝试建立连接之前,客户端和服务器都处于关闭状态。 第一次握手:客户端将标志SYN设置为1,随机生成一个值作为序列号:seq=J,并将数据包发送给服务器。客户端进入SYN _ SENT状态,等待服务器确认; 第二次握手:服务器收到数据包后,知道是客户端请求建立连接的消息,因为标志位SYN=1,所以服务器会给出响应:将标志位SYN和ACK设置为1,确认号ack=J+1,随机生成一个值序号seq=K,将数据包发送给客户端确认并同意连接请求。此时,服务器进入SYN_RCVD状态; 三次握手:客户端收到确认消息后,检查确认号ack是否为J+1,ack标志位是否标记为1。如果正确,它将标志位ACK设置为1,确认号ack=K+1,并将数据包发送到服务器。服务器检查确认是否为K+1,确认位是否标记为1。如果正确,则连接成功建立。客户端和服务器进入建立状态,完成三次握手,客户端和服务器之间的数据传输就可以开始了。
TCP的四次握手 当客户端和服务器之间的数据传输完成后,双方可以释放连接。此时,客户端和服务器都处于“已建立”状态,然后客户端主动断开,服务器被动断开,每个方向都必须单独关闭,因此要断开链路,需要四次挥动TCP:
?
第一波:客户端发送完所有数据后,会发送一条标签为FIN=1,序列号为seq=n的消息,用于关闭客户端的数据传输,客户端进入FIN_WAIT_1状态。 第二波:服务器收到FIN pACKet后,向客户端发送ack,序列号+1,服务器进入CLOSE_WAIT状态。 第三波:服务器发送FIN=1,seq=m,关闭从服务器到客户端的数据传输,服务器进入LAST_ACK状态。 第四波:客户端收到FIN后,进入TIME_WAIT状态,向服务器发送序列号为m+1的ACK,服务器进入CLOSED状态,完成四波。
UDP协议 UDP协议,全称用户数据报协议,用户数据报协议。让我们来看看这个协议的报头信息:
?
从报头信息可以看出,udp比tcp少很多,只有一个源端口号/目的端口号,这里的功能和TCP一样。那么,至于TCP的序列号、确认号、状态码等等,就没有了。那么,UDP是如何建立连接的呢? 请注意,UDP没有连接,它是一种无连接的传输层协议。所以UDP协议的应用一般都要允许一定的丢包和错误,这也是他的一个特点:不注重可靠性,只注重速度! 那么哪些应用不需要可靠的机制,而只关注性能和速度呢? 例如,流媒体、即时多媒体游戏和IP电话(VoIP)将被UDP协议封装。因为不需要连接,所以具有资源消耗低,处理速度快的优点。如果音频、视频和偶尔在传输过程中丢失几个数据包,对接收结果不会有太大影响,所以会被UDP协议封装。 常见协议:域名系统(DNS)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)、路由信息协议(RIP)等。
TCP和UDP协议的比较 连接区别:TCP是面向连接的(例如,拨打电话前先建立连接),UDP是无连接的,即发送数据前不需要建立连接。 安全性上的差异:TCP提供可靠的服务,通过TCP连接传输的数据无差错、不丢失、不重复、有序到达;UDP尽可能地提供最好的服务,也就是说,不能保证可靠的服务。 传输效率差异:TCP传输效率相对较低,UDP效率较高。
|