TCP与UDP链接

TCP和UDP都是传输层协议,但TCP是面向连接的,通过三次握手建立连接,确保可靠性,包括重传丢包数据和顺序传输。而UDP则是无连接的,不保证数据传输的可靠性,但具有更低的延迟和资源消耗。TCP在数据传输后通过四次挥手断开连接,UDP则直接发送数据无需建立连接。TCP适合需要稳定传输的应用,如HTTP、HTTPS等,而UDP适合实时性要求高的应用,如DNS、VoIP等。
摘要由CSDN通过智能技术生成

根据上篇我们知道,tcp与udp 都是作用于传输层的数据传输协议。既然作用相同,那么两种协议之间就必然会存在相同之处与原理上的区别。

首先我们来看tcp:

tcp是一种有链接的数据传输协议,也就是说在传输数据之前两台主机或者客户端与用户之间必须先建立连接才能进行数据传输。

TCP三次握手连接过程如图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlhqzpm6rlrqI,size_20,color_FFFFFF,t_70,g_se,x_16如图,主机A想要与主机B建立tcp建立,那么需要先向主机B发送SYN连接请求包完成第一次握手。

当主机 B收到主机A发送的SYN包后会向主机A回复SYN+ACK包,当主机A收到SYN+ACK包之后两台主机就已经初步建立了连接并完成了第二次握手。

初步建立连接之后主机A会向主机B发送ACK包,以最终完成两者之间的建立,并确定这是两者之间唯一的连接,完成第三次握手。

其实可以发现两台主机在第二次握手时就已经建立了连接,那这是为什么要进行第三次握手呢?

这其实是为了防止在不可靠网络中建立连接时出现错误。比如,主机A在需要建立连接时向主机B发送的SYN包因为一些网络原因被滞留在网络中。在超时之后主机A就需要再次发送SYN包。这次的网络通畅两台主机经过第二次握手之后成功建立起了连接。可如果这是,刚才被滞留在网络中的SYN包因为网络的恢复又发送到了主机B主机比再次向主机A发送SYN+ACK包。这时主机B就会形成两个连接,而主机A依然是一个连接就会出现数据传输的错误。

所以从本质上来说,三次握手就是为了在不可靠的网络上建立起可靠的连接

前面说tcp是可靠的连接,那么必然就会有可靠的数据传输方法来解决丢包与乱序问题。

tcp传输数据时会有一个发送缓冲区,在这个缓冲区中数据分割成序号从0开始随后逐个➕1的多个数据内容。发送时会从按顺序从中取出数据内容形成格式为:(序列号➕长度➕数据内容)的数据包。

接收端接收之后会恢复格式为:(ACK➕序列号➕长度)的数据包,同时发送端接收到以后便知道了下一个数据包的起始序列号。

在这样的传输模式下,即便出现数据包丢失的情况发送端也可以准确的重新发送。

而接收端在完全接受以后也可以根据序列号与长度重组数据。

在完成数据传输之后tcp连接就要通过四次挥手断开。

四次挥手过程如图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlhqzpm6rlrqI,size_20,color_FFFFFF,t_70,g_se,x_16

假设主机A想要关闭链接,那么就要先向主机B发送FIN数据包,当主机B收到之后如果同意断开链接,就会向主机A回复ACK包,当主机A收到以后就完成了第一次挥手 

主机B在回复ACK包以后同时也会向主机B发送FIN这时就完成了第二次挥手

当主机B收到来自A的ACK包后便完成了第三次挥手。

主机A在发送完ACK包后等待超时,超时之后便断开了链接。此时便完成了第四次挥手两台主机彻底断开链接。

这里我们注意到,主机A在发送完ACK包之后会有一个等待时间。这个等待时间是为了确定主机B收到了ACK包并且成功断开。如果主机A的ACK在网络中滞留,没有被主机B收到,那么主机B就会重新发送FIN包,但主机A在此前已经断开,主机B就将会永久的陷入待确认状态。

这和建立连接时的第三次握手相同,为了在不可靠的网络中实现可靠的断开。

与TCP协议相比,UDP数据传输是建立在非链接的基础之上的

udp 传输数据就是将数据简单的封装一下然后在通过网卡发送出去即可,数据包之间并没有状态上的链接。

正因为如此,与tcp相比udp的性能损耗非常少,内存资源占用很少。

当然udp也并不对传输过程中产生的丢包保证。

综上而言我们可以总结出:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDlhqzpm6rlrqI,size_16,color_FFFFFF,t_70,g_se,x_16

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值