【网络面试篇】TCP与UDP类

news/2024/11/3 1:18:17/

目录

一、综述

1. TCP与UDP的概念

2. 特点

3. 区别

4. 对应的使用场景

二、补充

1. 基础概念

(1)面向连接

(2)可靠的

(3)字节流

2. 相关问题

(1)TCP 和 UDP 可以同时绑定相同的端口吗?

(2)多个 TCP 服务进程可以同时绑定同一个端口吗?

(3)客户端的端口可以重复使用吗?


一、综述

1. TCP与UDP的概念

  • TCP(传输控制协议)是一种面向连接的、可靠的、基于 字节流 的传输层通信协议。
  • UDP(用户数据报协议)为应用程序 提供了一种 无需建立连接 就可以发送封装的 IP 数据包的方法。

2. 特点

  • TCP:面向连接,传输可靠,传输形式为 字节流,传输 效率慢,所需 资源多。
  • UDP:无连接、传输不可靠、传输形式为 数据报文段,传输 效率快,所需 资源少。

3. 区别

  • 是否面向连接:TCP 是 面向连接的 传输,UDP 是 无连接的 传输。
  • 是否是可靠传输:TCP 是可靠的 传输服务,在传递数据之前,会有 三次握手来 建立连接;在数据传递时,有确认、窗口、重传、拥塞控制机制。UDP 是不可靠传输,数据传递 不需要给出 任何确认,且不保证数据 不丢失及 到达顺序。
  • 是否有状态:TCP 传输是 有状态的,它会去 记录自己发送消息的 状态 比如消息 是否发送了、是否被接收了 等等,而 UDP 是无状态的。
  • 传输形式:TCP 是 面向字节流的,UDP 是 面向报文的。
  • 传输效率:由于 TCP 传输的时候 多了连接、确认重传等 机制,所以 TCP 的传输效率 要比 UDP 低。
  • 首部开销:TCP 首部开销(20~60字节)比 UDP 首部开销( 8 字节)要大。
  • 是否提供广播或多播服务:TCP 只支持 点对点 通信,UDP 支持 一对一、一对多、多对一、多对多。

4. 对应的使用场景

  • TCP 常用于要求 通信数据 可靠场景(如 网页浏览、文件传输、邮件传输、远程登录、数据库操作等)。
  • UDP 常用于要求 通信速度高场景(如 域名转换、视频直播、实时游戏等)。

二、补充

1. 基础概念

(1)面向连接

        一定是「一对一」才能连接,不能像 UDP 协议可以 一个主机 同时向多个主机 发送消息,也就是 一对多是 无法做到的;

(2)可靠的

        无论的 网络链路中 出现了怎样的 链路变化,TCP 都可以 保证一个报文 一定能够 到达 接收端;

(3)字节流

        用户消息 通过 TCP 协议传输 时,消息可能会 被 操作系统「分组」成 多个的 TCP 报文,如果 接收方的 程序如果 不知道「消息的边界」,是无法 读出一个 有效的 用户消息的。并且 TCP 报文是「有序的」,当「前一个」TCP 报文 没有收到的 时候,即使 它先 收到了 后面的 TCP 报文,那么也 不能扔给 应用层 去处理,同时对「重复」的 TCP 报文 会自动丢弃。

2. 相关问题

(1)TCP 和 UDP 可以同时绑定相同的端口吗?

        可以。

        TCP 和 UDP 传输协议,在内核中是由 两个完全独立的 软件模块 实现的。当 主机 收到 数据包后,可以在 IP 包头的「协议号」字段 知道 该数据包 是 TCP/UDP,所以 可以 根据 这个信息 确定送给 哪个模块(TCP/UDP)处理,送给 TCP/UDP 模块的 报文根 据「端口号」确定 送给 哪个应用程序 处理。

        因此,TCP/UDP 各自的端口号也相互独立,互不影响。

(2)多个 TCP 服务进程可以同时绑定同一个端口吗?

        如果两个 TCP 服务进程 同时绑定的 IP 地址 和 端口都相同,那么执行 bind()时候 就会出错,错误是 “Address already in use"。

        如果两个 TCP 服务进程 绑定的 端口 都相同,而 IP 地址不同,那么执行 bind()不会出错。

(3)客户端的端口可以重复使用吗?

        在客户端执行 connect 函数的时候,只要 客户端连接的 服务器 不是同一个,内核 允许 端口重复使用。TCP 连接是由 四元组(源 IP 地址,源端口,目的 IP 地址,目的端口)唯一 确认的,那么 只要四元组中 其中一个 元素发生了 变化,那么就 表示不同的 TCP 连接的。

        所以,如果 客户端 已使用端口 64992 与 服务端 A 建立了连接,那么 客户端 要 与 服务端 B 建立连接,还是可以 使用端口 64992 的,因为 内核是 通过 四元组 信息来 定位一个 TCP 连接的,并不会 因为 客户端的 端口号 相同,而导致 连接冲突的 问题。


http://www.ppmy.cn/news/1544019.html

相关文章

ISO 26262与ISO 21434:汽车安全领域的双重保障与交汇探索

ISO 26262和ISO 21434都是关于汽车安全的国际标准,它们在汽车安全领域各自有不同的侧重点,但它们也存在交集。 ISO 26262是一个针对汽车行业的功能安全标准,它主要关注汽车电子和电气系统的安全性。这个标准从概念阶段开始,贯穿了…

微信小程序时间弹窗——年月日时分

需求 1、默认当前时间2、选择时间弹窗限制最大值、最小值3、每次弹起更新最大值为当前时间&#xff0c;默认值为上次选中时间4、 minDate: new Date(2023, 10, 1).getTime(),也可以传入时间字符串new Date(2023-10-1 12:22).getTime() html <view class"flex bb ptb…

src和href的区别

src和href都是HTML中用于指定资源地址的属性&#xff0c;但它们在用途、引用方式、对文档的影响以及适用范围等方面存在显著的区别。以下是对这两者的详细比较&#xff1a; 一、用途不同 src&#xff1a;主要用于嵌入到文档中的资源。它告诉浏览器去加载指定的资源&#xff0…

深入探索:深度学习在时间序列预测中的强大应用与实现

深入探索&#xff1a;深度学习在时间序列预测中的强大应用与实现 时间序列分析是数据科学和机器学习中的一个重要研究领域&#xff0c;广泛应用于金融市场、天气预报、能源管理、交通预测、健康监控等多个领域。时间序列数据具有顺序相关性&#xff0c;通常展示出时间上较强的…

kafka里的consumer 是推还是拉?

大家好&#xff0c;我是锋哥。今天分享关于【kafka里的consumer 是推还是拉&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka里的consumer 是推还是拉&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;消费者&…

雷池社区版compose配置文件解析-mgt

在现代网络安全中&#xff0c;选择合适的 Web 应用防火墙至关重要。雷池&#xff08;SafeLine&#xff09;社区版免费切好用。为网站提供全面的保护&#xff0c;帮助网站抵御各种网络攻击。 compose.yml 文件是 Docker Compose 的核心文件&#xff0c;用于定义和管理多个 Dock…

微软认证是什么?有哪些科目?

微软认证是微软公司设立的推广微软技术&#xff0c;培养系统网络管理和应用开发人才的完整技术金字塔证书体系&#xff0c;在全世界90多个国家认可有效&#xff0c;并且可以作为薪资职位变迁的有效证明&#xff0c;公司资质实力证明和移民加分等多项益处!微软认证从1992年设立&…

【PostgreSQL】pgsql | 字符串转日期

一、概述 常用命令备注&#xff1b;区别于MySQL 二、命令 1、字符串转日期 1&#xff09;pgsql to_date(#{params.endTime}, YYYY-MM-DD) YYYY-MM-DD HH24:MI:SS ~~ 2&#xff09;mysql字符串转日期 date_format(create_time,%Y%m%d) %Y-%m-%d %H:%i:%s 也可以用str_to_date…