vc udp 广播接收和发送_计算机网络面试必考点:TCP 和 UDP

272927fbfff420b7260b919d3d327c89.png

在计算机网络中,TCP 和 UDP 是传输层中两个重要协议,而它们之间的区分也是面试中经常问到的问题。今天我们就来聊一聊这两个协议之间的区别。

UDP 和 TCP 在 TCP/IP 体系中的位置

什么是 TCP/IP 体系?

我们知道网络是分层的,想想看,假如你在参与网络搭建的过程中,想要把每一户人家的电脑,到公司的网络体系,直至与全时间互通互联,这是一个庞大且复杂的工作。说它复杂,是因为搭建过程中,不仅要考虑路由器、网线这些硬件的连接,还要考虑信号传输过程中的方方面面......

所以,为了使得如此庞大的系统易于实现和维护,也为了不同厂商生产的网络产品之间能够实现通信,ISO(International Organization for Standards,国际标准化组织。) 制定了一个国际标准 OSI(Open Systems Interconnection,开放式通信系统互联参考模型。)对通信系统进行了标准化。

OSI 标准将网络协议分成了 6 层,叫做 OSI 参考模型,具体是长这样婶儿的:

facd10d63b08bf58a6992b359ce838db.png

那么 TCP/IP 体系则是使用了另一种分层的方法,它将 OSI 参考模型概括成了 4 层,即应用层、传输层、网际层和网络接口层。它们的关系是这样的:

f7633ef6ca9f994a8047e3ea5137bd01.png

TCP/IP 体系中的 UDP/TCP

这个 4 层的体系包含以下内容,我们分别了解一下。

7311dab2bbb4f82c7c0d384f3f9150c6.png

TCP/IP 中的数据链路层,并没有规定什么具体的内容,这样做的目的在于互联各种网络接口,而不局限于各种网络接口。

这些网络接口只要使用 IP 协议,就可以接入到使用 TCP/IP 协议的网络中,由于 IP 协议成为网际协议,因此网络也称为网际层

TCP/IP 体系中的应用层,有大量的应用协议,利用这些协议可以编写出各种网络应用程序。例如基于超文本传输协议 HTTP,可以编写浏览器等应用程序,在主机中运行此应用程序后,我们称其为应用进程,该应用进程可以通过网络,与 web 服务器中的另一台服务器进程进行交互,最终实现最常见的使用浏览器浏览 web 服务器的应用。我的另一篇文章(当你打开一个网页时,背后究竟发生了什么)则对此进行了详细讨论。

由此可见,两台主机进行通信,其实就是两台主机中的应用进程进行通信。而 IP 协议只停留在网际层,所以 TCP/IP 体系在传输层,为应用进程之间提供端到端的逻辑通信。

TCP/IP 的传输层使用端口号来区分不同的应用进程,并提供了一些传输输层协议,其中 TCP 和 UDP 是最常用的两个。

以上就是 UDP 和 TCP 在 TCP/IP 体系中的位置。

UDP 和 TCP 的对比

UDP 是 User Datagram Protocal(用户数据报协议)的缩写,TCP 是 Transmission Control Protocol(传输控制协议)的缩写。我们先来看一下两者之间的对比,然后分别讲解。

9f0d30e2e07090adf62c2c5658c1a1c6.png

有无连接

假设现在有两台主机,它们是使用 UDP 协议进行通信,那么它们在发送数据之前,可以随机发送数据,而不需要进行连接,因此我们称 UDP 是无连接的(这里的连接是指逻辑连接关系)。

而如果两台主机是通过 TCP 协议进行通信的话,那么它们首先要通过“三次握手”进行连接,连接之后才可以发送数据,最后还需要使用“四次挥手”释放连接。“三次握手”和四次挥手的详细过程,文末的另一篇文章中进行了介绍。

2b1c8808d8101f0f6e95aa4313871b76.png

通信方式

简单来说,UDP 支持单播、多播和广播的方式,而 TCP 仅支持单播。这里涉及到了网络中的单播、多播和广播的知识,看下面这张图你就明白了。

d26ee0d3b118fef224f0b03d7eb50d42.png

多播和广播的区别在于,多播只将用户数据报传输到网络中的 部分 主机,广播则将用户数据报传输到网络中的 全部 主机。

为了更好地理解,我们再举一个详细一点的例子。

比如网络中有 4 台使用 UDP 通信的主机,连接到一台以太网交换机上,那么其中一台主机可以给网络上的一台主机发送用户数据报(单播),也可以给网络中的某些主机发送用户数据报(多播),也可以给网络中的所有主机发送用户数据报(广播)。

8387c2e519cc57969ee2d0f8555246b2.png

而如果 4 台基于 TCP 通信的主机连接到一个交换机上,各主机间要进行通信,需要首先建立 TCP 连接。比如图中上方两台主机要进行通信,它们需要首先通过“三报文握手”建立连接,建立连接之后我们可以认为两台主机之间建立了一条可靠的信道,之后这两台主机之间就可以相互传输报文段了。

对应用层报文的处理

如图所示,发送方应用进程将应用层报文交付给应用层 UDP,UDP 直接给应用层报文添加一个首部,使之成为应用层用户数据报,然后进行发送。

接收方 UDP 接收到该报文以后,只需将首部去掉,然后将报文交付给接收方的应用进程就行了。我们看到,UDP 不会对报文进行拆分,因此它是面向报文的。

963b49ba757a612db637b91977f8f5d2.png

而 TCP 则会将发送方的数据块仅仅看作一连串无结构的字节流,将它们编号并存储在缓存中,然后根据自己的发送策略,提取一定量的字节,加上首部构建成 TCP 报文段进行发送。最后接收方的 TCP 一方面将 TCP 报文中提取出数据并存储在缓存,另一方面将接收缓存中的一些字节交付给接收方的应用进程。

这里有三点需要注意,首先, TCP 并不知道字节流的含义,因此接收方需要具备理解字节流含义的能力;另外,发送方发送的数据块和接收方接收的数据块的数量可能不等,比如发送方发送了 4 个数据块给 TCP,可能接收方的 TCP 将这 4 个数据块最终打包成了 2 个数据块交付给接收方;最后,图中 TCP 只画了一个方向,10 多个字节,实际上,TCP 可以同时进行双向传输,并且一次传输 1000 多个字节是很常见的。

因此,TCP 是面向字节流的。

是否提供可靠传输服务

在传输层,如果是 UDP,则提供无连接不可靠服务,而 TCP 提供面向连接的可靠服务。那么什么是可靠的传输服务呢?

对于 UDP,发送方会一门心思给接收方不断地发送数据报,如果发送过程中出现了误码、丢包的情况,接收方不会做任何处理,只管接收就行了。

0459bd8ca42349c68ddd7259772025f2.png

这样的传输方式也有一定的优点,那就是保证了实时性,所以网络直播、视频会议等使用 UDP 的传输方式。

而 TCP 收到报文准确无误后,会向发送方发送一个确认的报文,这样一来,如果收到了误码或者遇到丢包的情况,由于发送端没有收到确认消息,会进行超时重发,直到收到接收端的确认报文。

e5fac34226d7df5a22d562cc1667722d.gif

这时我们说这样的传输是可靠的,当我们下载文件、浏览网页时,我们希望数据没有出现丢失,因此它们使用 TCP 协议进行数据传输。

首部开销

由于 TCP 需要实现可靠传输、流量控制和拥塞控制等服务,它的首部自然会比较复杂。TCP 的首部包括 20 字节的固定首部,以及最多 40 字节的拓展首部,如图所示:

6a7dd1014ef83942a57f8deaf3df9007.png

相比之下,UDP 的首部则简单得多,只有 4 个字段,每个字段 2 个字节,共 8 个字节。

总结

我们分别从有无连接、通信方式、对报文的处理、是否提供可靠传输和首部开销等方面对 TCP 和 UDP 各自特点进行了区分,希望能为你的面试提供一臂之力。需要注意的是,本文中涉及到 TCP 的流量控制和拥塞控制,我们会在接下来的文章中进行详细介绍。


相关阅读

腐烂的橘子:当我们打开网页时,背后究竟发生了什么​zhuanlan.zhihu.com
b1d12c077cf7e9027d876a932f264e9e.png
腐烂的橘子:计算机网络中的“三次握手”​zhuanlan.zhihu.com
298074550a03d1c295ab46d1db64b0ce.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值