计算机基础1:TCP和UDP的区别是什么?

文章目录


TCP 是互联网的核心协议之一,也是面试常被提及的一个基本概念,所以我将它的相关问题整理在下面。


我最近特别喜欢用发问的方式来解决问题,通过不断的发问和分解问题,能让一个复杂的问题变得简单,能让我的思路变得清晰明了。

针对这个面试题所提出的问题:

  1. 面试官为什么要问这个问题?这个题目大概在考察什么?
  2. 这个问题的答案是什么?
  3. 相关的题目还有什么?

问题1

考察应聘者对于计算机网络的网络体系结构的了解。在考察 TCP/IP 五层模型中的传输层的 TCP 和 UDP 传输协议。

既然提到 TCP/IP 五层模型,我发现用「送家具」来表示TCP/IP五层模型,是一个不错的场景,在这里总结一下吧。

先假设一个场景,有一位王先生刚刚在郊区买了新房,家里还是空空的,去到市区里购置了很多件家具(床、沙发、凳子),然后就回到家中等候即可。下面就是购买后的运输过程:

(图片说明:图中的家具指代网络中的数据包,数据报从左向右发送)

  • 物理层:公路
  • 数据链路层:装货的工人(体力劳动)
  • 网络层:配送人员(司机)
  • 传输层:拆卸/装配人员
  • 应用层:买卖家具的人。

比较常见的互联网体系模型有 OSI 参考模型和 TCP/IP 四层模型(没有物理层),每一层结构都有许多协议,如下图所示:

在互联网中的信息传递,就类似现实中的物品传输,不过这两种传输的细腻度不同。现实生活中,如果物品很小,就不需要进行拆卸,这样就会简化很多流程。在互联网中,数据只能以 0 和 1 来表示,所以每个数据包都相当于现实生活中的大物品,需要拆分和处理之后才能进行运输。


问题2

要熟悉 TCP 和 UDP 的区别,需要先了解下面的内容:

  1. TCP 协议和 UDP 协议的概念是什么?
  2. TCP 协议和 UDP 协议的基本内容有哪些?
  3. 他们的用途有何不同?这些用途是由于哪些基本内容导致的?
  4. 相关的网络攻击有哪些?怎么进行防御?

问2.1:TCP协议和UDP协议的概念是什么?

TCP 是传输控制协议(Transmission Control Protocol)的缩写。传输控制协议的定位是:面向连接的、可靠的、面向字节流的传输层通信协议。
(面向字节流的含义:最小发送单元由 TCP 确定,数据报只是一段无意义的字节流。如果数据报过大,会被切分成较小的单元进行发送)

UDP 是用户数据报协议(User Datagram Protocol)的缩写。用户数据报协议的定位是:简单的面向数据报的通信协议。
(面向数据报的含义:最小发送单元为数据报,应用程序交给 UDP 多大的数据报,UDP 就转发多大的数据报,不会理会数据报的大小)

问2.2:TCP协议和UDP协议的基本内容有哪些?

从程序实现的角度来观察TCP和UDP的不同点。

(图片说明:左侧是 TCP 服务端和客户端的数据传输过程,右侧是 UDP 服务端和客户端的数据传输过程)

从图中就能看出来他们最大的区别,TCP 面向连接,UDP 面向无连接。

  • 面向连接:类似两个人打电话。如果对方没有说话,让对方说话确认,以免尴尬。
  • 面向无连接:类似快递服务。用户把信函放在邮件中期待邮政处理流程来传递邮政包裹

TCP 的面向连接和面向字节流从而又产生了其他的特性。TCP的连接都需要经过确认,具有一定的可靠性。面向字节流意味着机器需要做更多的运算,降低了传输过程的效率,不太适用于大量的数据传输(视频传输)。

TCP针对自身的缺点(传输效率低),做了两种优化。

  • 流量控制:优化处理数据包的过程(发送前)。
  • 阻塞控制:尽量避免数据包在线路中拥塞(发送中)。

经过上面的分析可以制作出下面的对照表:

问2.3:他们的用途有何不同?这些用途是由于哪些基本内容导致的?

TCP 和 UDP 属于网络模型中的一个层次。应用层在传输不同类型的数据的时候,在传输层可以采用不同类型的传输层协议。其中 TCP/IP 的结构被广泛使用,但是 TCP 并不适用于所有应用。某些应用传输的数据允许有一定的失真率(视频、音频),如果依旧采用 TCP 会造成网络传输缓慢。

任何不是很需要可靠性或者是想将功能减到最少的应用可以避免使用 TCP。在很多情况下,当只需要多路复用应用服务时,用户数据报协议(UDP)可以代替 TCP 为应用提供服务。

总结:TCP 和 UDP 的使用需要根据具体的使用场景来分析,再确定选用哪一种类型的协议。它们的用途取决于它们传输效率。

传输过程来观察 TCP 和 UDP 的不同点。

问2.4:相关的网络攻击有哪些?怎么进行防御?

握手中的攻击手段:

  1. Land 攻击:Dos 攻击中的一种。通过构造特殊的 TCP 包,来让服务器于自己建立连接,从而耗尽资源。
  2. SYN洪水(SYN Flooding):DDoS 攻击中的一种,耗尽服务器资源类的 DDoS 攻击,针对 TCP。攻击者向服务器发送大量的 SYN 报文请求,当服务器回应 SYN+ACK 报文时,不再继续回应 ACK 报文,导致服务器上建立大量的半连接,直至老化。这样,服务器的资源会被这些半连接耗尽,导致正常的请求无法回应。
  3. UDP洪水(UDP Flood):DDoS 攻击中的一种,耗尽带宽类的 DDoS 攻击(UDP 的特性)。防火墙防御UDP Flood攻击主要有两种方式:限流和指纹学习,两种方式各有利弊。限流方式属于暴力型,可以很快将UDP流量限制在一个合理的范围内,但是不分青红皂白,超过就丢,可能会丢弃一些正常报文;而指纹学习属于理智型,不会随意丢弃报文,但是发生攻击后需要有个指纹学习的过程。
  4. RST 攻击(Rest the connection):针对 TCP 的攻击。A 和服务器 B 之间建立了 TCP 连接,此时 C 伪造了一个 TCP 包发给 B,使 B 异常的断开了与 A 之间的 TCP 连接,就是 RST 攻击。在 2021 StarCTF 中,oh-my-socket 就需要利用 RST 攻击实现,传送门。防御方式很简单,使用防火墙将进来的包带 RST 位的包丢弃就可以了。

TCP 攻击大部分都是参考强叔的教程,写得很通俗易懂,感兴趣的可以去看看,传送门

问题3

1. TCP三次握手原理是什么?为什么是三次握手而不是两次握手?

来源:Gcow 面试题、https://whale3070.github.io/interview/2020/05/19/11-x/

这里需要先了解 TCP 连接的建立过程。简而言之,三次握手四次挥手。

连接建立:三次握手。首先明确三次握手的目的,三次握手的目的在于让通信双方都确定准备完成(发送功能正常,接受功能正常)。

  • 第一次握手:客户端发送含 SYN 信号的包,指明客户端想要连接服务器的端口。
    • 客户端角度:客户端发送功能正常。
    • 服务器角度:客户端发送功能正常,服务器接收功能正常。
  • 第二次握手:服务器发回确认包(ACK)应答。
    • 客户端角度:客户端发送功能正常、接收功能正常。服务器发送功能正常,服务器接收功能正常。
    • 服务器角度:客户端发送功能正常。服务器发送功能正常,服务器接收功能正常。
  • 第三次握手:客户端再次发送确认包(ACK)。
    • 客户端角度:客户端发送功能正常、接收功能正常。服务器发送功能正常,服务器接收功能正常。
    • 服务器角度:客户端发送功能正常、接收功能正常。服务器发送功能正常,服务器接收功能正常。

如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。也就是服务器无法判断客户端是否能正常收到消息。

2. 举例一些常见的协议以及对应的端口

来源:https://whale3070.github.io/experience/2019/10/11/05-x/

  • 22 端口:SSH 远程连接
  • 23 端口:Telnet 远程连接
  • 53 端口:DNS 域名系统
  • 67 端口:DHCP 服务
  • 1433 端口:MSSQL 数据库
  • 1521 端口:Oracle 数据库
  • 3306 端口:MySQL 数据库
  • 5900 端口:VNC 远程控制工具

3. TCP/IP协议有哪 4 层?

来源:https://whale3070.github.io/experience/2019/10/11/05-x/

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层

猜你喜欢

转载自blog.csdn.net/qq_43085611/article/details/114234019
今日推荐