【网络面试篇】TCP与UDP类

目录

一、综述

[1. TCP与UDP的概念](#1. TCP与UDP的概念)

[2. 特点](#2. 特点)

[3. 区别](#3. 区别)

[4. 对应的使用场景](#4. 对应的使用场景)

二、补充

[1. 基础概念](#1. 基础概念)

(1)面向连接

(2)可靠的

(3)字节流

[2. 相关问题](#2. 相关问题)

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

[(2)多个 TCP 服务进程可以同时绑定同一个端口吗?](#(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 连接的,并不会 因为 客户端的 端口号 相同,而导致 连接冲突的 问题。

相关推荐
4A广告文案7 小时前
名创优品在成都开了家“乐园”,顺便造了个新IP
网络·网络协议·tcp/ip
深圳雨林凯AI7 小时前
图案裂变的“风格归一化“设计思路:主体保得住,画风才拉得齐|雨林凯AI技术笔记
人工智能·笔记
Fnetlink18 小时前
Fnet 云网安 260904
网络·人工智能·安全·web安全·网络安全
天远数科8 小时前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化
冬木家居8 小时前
40㎡客厅变形记,小家住出大自由[特殊字符]
android·经验分享·笔记·智能家居·微信公众平台
摇滚侠8 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
志栋智能9 小时前
安全超自动化如何支持大规模安全运营?
网络·安全·自动化
星恒讯工业路由器9 小时前
农村宽带覆盖难?无线专网方案正在改写“最后一公里”规则
网络·物联网·网桥·无线网桥·农村宽带覆盖·无线专网·户外网络
tang777899 小时前
反爬虫场景下代理IP池的动态扩容与失效IP自动清理方案实现
linux·服务器·网络·爬虫代理·住宅代理ip
yuewell_ai10 小时前
机器人调度通讯怎么设计才不会被网络抖动瘫痪
网络·机器人·php