为什么UDP使用二元组而TCP使用四元组

背景介绍

最近在B站看到这个视频,【Java面试】谈谈你对网络四元组的理解,如何高分回答?
其中提到了“网络四元组”的概念。其实这里使用网络四元组是不太准确的,因为TCP才需要四元组来标识一个套接字,而UDP只需要二元组即可。那么为什么UDP只需要二元组,而TCP需要四元组呢?

UDP二元组

首先,UDP使用二元组(目标IP和目标端口号)即可确定一个套接字,这其中的理由是非常直观的,因为我们至少在IP地址的基础上还需要一个端口号才能实现运输层功能,而更多的内容对于UDP套接字来说也无必要。这也符合UDP的设计理念,即在网络层上附加尽可能少的功能。

为什么TCP不能用二元组

那么,为什么TCP需要使用四元组(目标IP,目标端口号,源IP,源端口号)呢?其中的区别就是TCP是面向连接的。
所谓面向连接,是指数据在发送之前要在两台主机之间先建立好连接,在整个过程中要维护连接,最后要释放连接。
如果TCP协议也使用二元组来标识套接字,那么就无法实现面向连接的特点。假设A和B两台主机同时请求一台服务器上的80端口,如果只使用目标IP和目标端口号,那么在服务器端只会创建一个套接字。显然TCP协议就无法维护A和B各自的序号、确认号、拥塞窗口等连接参数,这就违背了面向连接的设计。
另外,面向连接使得TCP可以进行全双工通信,服务端只要将想发送的数据放入套接字即可向客户端发送信息。如果仅使用二元组来标识连接套接字,那么服务端就无法主动向客户端发送信息。

TCP如何使用四元组

TCP协议在数据开始传输之前,要先经过三次握手。在三次握手中协商连接使用的一些参数。三次握手成功之后,服务端才会创建连接套接字,用来和客户端进行通信。
还是以上面的例子来说:假设A的IP是192.168.0.2,B的IP是192.168.1.2,服务器的IP是180.97.34.94,上面在80端口运行着一个web服务。
假设A从自身随机选择了一个空闲端口50000发起建立TCP连接的请求,该请求会首先到达在服务器80端口的欢迎套接字,这时开始三次握手的过程,如果成功,服务器端会打开一个新的连接套接字,后续的数据传递将通过连接套接字进行。
假设B在50001端口向服务器发起建立连接的请求时,也会先经过欢迎套接字进行三次握手,如果握手成功,服务器会再创建一个新的连接套接字,因为其源IP地址必然与A的不同(因为端口号也是B随机选择的,所以可能和A相同)。
同理,如果A想再和服务器建立一条TCP连接(假设A此时选择了51000端口),在服务器端也会再打开一个新的连接套接字。
这样,TCP就通过使用四元组来实现面向连接的特点了。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值