20250112面试鸭特训营第20天

更多特训营笔记详见个人主页【面试鸭特训营】专栏

250112

1. TCP 和 UDP 有什么区别?

特性TCPUDP
连接方式面向连接(需要建立连接)无连接(无需建立连接)
可靠性可靠的,提供确认、重传机制不可靠,没有确认和重传机制
数据顺序保证数据按顺序到达不保证数据顺序或完整性
流量控制有流量控制(滑动窗口)没有流量控制
拥塞控制有拥塞控制(如慢启动、拥塞避免)没有拥塞控制
头部开销较大(最小20字节)较小(最小8字节)
速度较慢(需要建立连接,维护状态)较快(没有连接的建立和维护)
数据传输模式字节流传输模式数据包传输模式
错误校验提供错误检测和校验,保证数据正确提供简单的校验,不保证数据正确
重传机制自动重传丢失的数据包无重传机制,丢失的数据包无法恢复
应用场景需要可靠传输的场合
(如网页、文件传输)
实时性高、能容忍丢包的应用
(如视频流、语音通信)
协议列举HTTP 协议(3.0之前)
HTTPS 协议
FTP 协议
SMTP 协议
POP3 协议
HTTP 3.0 协议
DHCP 协议
DNS 协议

2. 说说 TCP 的三次握手和四次挥手?

客户端和服务端之间,通过三次握手建立连接,通过四次挥手断开连接

三次握手

在这里插入图片描述

  • 第 1 次:客户端 → 服务端,发送 SYN (同步序列编号)
    • A 表达了想和 B 建立连接的意愿
    • 说明客户端的发送能力是正常的
  • 第 2 次:服务端 → 客户端,发送 SYN-ACK (同步序列编号—确认)
    • B 表达了自己的意愿
    • 说明服务端的接收能力和发送能力都是正常的
  • 第 3 次:客户端 → 服务端,发送 ACK (确认)
    • A 告诉 B 他已经知道了 B 的意愿
    • 说明客户端的接收能力是正常的

为什么一定是三次

  • 如果只有一次握手
    • 客户端表达了意愿,但服务端没有表达意愿,无法直接建立联系
  • 如果只有两次握手
    • 客户端表达了意愿,服务端也表达了意愿,但不确定客户端有没有收到服务端的意愿,无法直接建立联系
  • 如有有四次握手
    • 只需要三次握手就能保证客户端和服务端都表达意愿且成功接收到对方的消息
    • 理论上三次及以上的握手都可以成功建立连接,但第四次握手就显得很冗余,浪费资源
    • 三次握手是保障双方信息对等,且能避免出现超时连接导致出现脏连接的最少握手次数

客户端和服务端之间,通过三次握手建立连接,通过四次挥手断开连接

四次挥手

在这里插入图片描述

  • 第 1 次:客户端 → 服务端,发送 FIN 包(FIN = 1,表示要关闭连接)
    • A 表达了想和 B 断开连接的意愿
  • 第 2 次:服务端 → 客户端,发送 ACK 包(ACK = 1,表示确认收到客户端的请求)
    • B 收到了 A 的意愿
  • 第 3 次:服务端 → 客户端,发送 FIN 包
    • B 将所有数据发送给 A
  • 第 4 次:客户端 → 服务端,发送 ACK 包(ACK = 1,表示确认收到服务端的请求)
    • A 收到了 B 的意愿

为什么一定是四次

  • 如果只有一次挥手
    • 客户端表达了意愿,但服务端没有表达意愿,无法直接建立联系
  • 如果只有两次挥手
    • 客户端表达了意愿,服务端收到了客户端的意愿,但服务端没有把数据反馈给客户端
  • 如果只有三次挥手
    • 客户端表达了意愿,服务端收到了客户端的意愿,服务端把数据反馈给客户端,但不确定客户端有没有收到数据信息,无法断开连接
  • 如有有五次挥手
    • 只需要四次挥手就能保证客户端和服务端都表达意愿且确定断开连接
    • 理论上四次及以上的挥手都可以成功建立连接,但第五次挥手就显得很冗余,浪费资源
    • 四次挥手是保障双方信息对等,且能避免出现数据丢失导致出现脏连接的最少挥手次数

3. TCP 是用来解决什么问题?

TCP 是什么

  • TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议,广泛应用于计算机网络中,尤其是互联网中。
  • 它是互联网协议族(TCP/IP协议族)中的核心协议之一。
  • TCP用于在网络中实现端到端的通信,确保数据可靠地传输。

TCP的主要特点

  • 面向连接

    • 在发送数据之前,TCP必须先在通信双方之间建立一个连接。
    • 这个连接是通过三次握手过程来实现的,确保双方都准备好进行数据传输。
  • 可靠性

    • TCP通过数据包的序号和确认机制来保证数据按顺序到达并且没有丢失。
    • 如果数据包丢失或出错,TCP会自动重传。
  • 流量控制

    • TCP使用流量控制机制来避免发送方发送过多的数据,超出接收方的处理能力。
    • 它通过滑动窗口机制来控制双方的数据流量,确保接收方能够处理所有接收到的数据。
  • 拥塞控制

    • TCP能够检测网络中的拥塞并通过调整数据发送速率来缓解网络负担。
    • 它采用多种算法(如慢启动、拥塞避免、快速重传和快速恢复)来控制数据流的发送速度。
  • 有序数据传输

    • TCP确保数据按发送顺序到达接收方。
    • 即使数据包在网络中以不同的路径传输,TCP也会重新排列接收到的数据包,使其按正确的顺序交付给应用程序。
  • 全双工通信

    • TCP支持全双工通信,即双方可以同时发送和接收数据。

TCP 解决的问题

TCP 通过提供可靠性传输、流量控制、拥塞控制和连接管理,解决了数据在不可靠 IP 网络上的传输问题。

  • 可靠性传输
    • TCP 确保数据包在网络传输过程中不丢失、不重复,并且按顺序到达。
    • 通过确认(ACK)、重传机制以及序列号,TCP 能够保证数据在不可靠的 IP 网络上可靠传输。
  • 流量控制
    • TCP 通过滑动窗口机制调节发送方的数据发送速率,防止接收方因为处理能力有限而被数据流淹没。
    • 滑动窗口用于动态调整可以发送的数据量。接收方通过发送窗口大小通告,指示发送方可以发送的最大数据量。
    • 这种机制不仅避免了接收方的溢出,还提高了数据传输效率。
  • 拥塞控制
    • TCP 通过拥塞避免算法 如慢启动、拥塞避免、快速重传和快速恢复 来防止网络过载,确保网络资源的公平使用和稳定性。
    • 慢启动:逐步增加发送窗口,直到检测到网络的拥塞点。
    • 拥塞避免:当达到网络容量后,逐渐增加窗口以避免拥塞。
    • 快速重传和快速恢复:在检测到包丢失时,立即进行重传并调整发送窗口,快速恢复到正常传输状态。
  • 连接管理
    • TCP 是面向连接的协议,采用三次握手(建立连接)和四次挥手(断开连接)机制来管理会话,确保通信的可靠性和状态的同步。
    • 三次握手:建立连接时,双方通过三次信息交换( SYN , SYN-ACK , ACK)来确保双方都准备好进行数据传输,并协商参数(如初始序列号)。
    • 四次挥手:断开连接时,通过四次消息交换来确保数据传输完成且资源可以安全释放,防止未传输的数据丢失。

TCP的工作过程

  • 建立连接(三次握手)

    在这里插入图片描述

    • 在通信双方之间建立连接时,TCP使用三次握手来确认双方都能正常通信。
      • 第一步:客户端发送一个SYN(同步)信号,表示请求建立连接。
      • 第二步:服务器接收到 SYN 信号后,回复一个 SYN + ACK(确认)信号,表示同意连接。
      • 第三步:客户端接收到 SYN + ACK 后,再发送一个 ACK(确认)信号,表示连接建立成功。
  • 数据传输(甜蜜生活ing)

    • 一旦连接建立,TCP开始传输数据。数据以数据段的形式被封装,其中包含序列号、确认号、校验和等信息。
    • 在传输过程中,发送方会给每个数据包分配一个序列号,接收方会对每个收到的数据包发送确认应答(ACK)。如果发送方在一定时间内没有收到确认,它会重传数据包。
  • 连接终止(四次挥手)

    在这里插入图片描述

    • 当数据传输完成时,连接将被终止。这个过程叫做“四次挥手”:
      • 第一步:客户端发送一个FIN(结束)信号,表示数据发送完毕,准备关闭连接。
      • 第二步:服务器收到FIN信号后,确认并回复一个ACK信号。
      • 第三步:服务器发送FIN信号,表示它也准备关闭连接。
      • 第四步:客户端收到服务器的FIN信号后,回复ACK信号,连接最终关闭。

TCP报文结构

  • TCP报文由多个字段组成,具体如下
字段名含义
源端口号发送端的端口
目标端口号接收端的端口
序列号用于数据重排序,保证数据的顺序
确认号表示接收到的数据的下一序列号
数据偏移数据在报文中的起始位置
标志位包括SYN、ACK、FIN等标志,指示连接的状态
窗口大小表示接收方的缓冲区大小,用于流量控制
校验和用于错误检测,保证数据的完整性

TCP 为什么可靠

TCP 之所以被称为可靠的协议,主要是因为它提供了以下功能

  • 数据完整性:使用校验和确保数据在传输中没有被破坏。

  • 数据顺序:保证数据按顺序到达接收方,且接收方能够重新排序乱序到达的数据。

  • 流量控制:通过滑动窗口机制避免接收方溢出。

  • 拥塞控制:通过动态调整发送速率避免网络拥塞。

  • 重传机制:确保丢失的数据会被重新传输。

  • 可靠的连接建立和关闭:通过三次握手和四次挥手确保连接的正确建立和断开。

  • 防止数据重复:通过序列号和确认机制防止重复数据的接收。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1545.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Rust】错误处理机制

目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误(Recoverable Errors) 2.2 不可恢复错误(Unrecoverable Errors) 三、Rust 的错误处理机制 3…

v-bind操作class

v-bind操作class 参考文献: Vue的快速上手 Vue指令上 Vue指令下 Vue指令的综合案例 指令的修饰符 文章目录 v-bind操作classv-bind对于样式控制的增强操作class案例(tab导航高亮)操作style操作style案例 结语 博客主页: He guolin-CSDN博客 关注我一起学习&#…

算法妙妙屋-------2..回溯的奇妙律动

回溯算法是一种用于系统性地搜索和解决问题的算法,它以深度优先搜索(DFS)为基础,用来探索所有可能的解决方案。通过递归地尝试候选解并在必要时回退(即“回溯”),它能够高效地解决许多涉及组合、…

【微信小程序】5|我的页面 | 我的咖啡店-综合实训

我的页面 引言 本文将详细解析如何实现一个包含登录注册、多个功能模块跳转以及特定功能展示的“我的”页面。我们将使用 Vant Weapp 组件库来简化开发过程,并确保代码的高级性和条理性。 1. 项目结构 首先,确保你的项目结构如下所示: - …

ssh2详细使用步骤,以及常用方法介绍

开源地址:https://github.com/mscdex/ssh2 ssh2 是一个功能强大的 Node.js 库,用于通过 SSH 协议与远程服务器交互。它支持命令执行、文件上传下载、端口转发等操作,常用于自动化脚本和远程服务器管理。 下面是 ssh2 的详细使用步骤和常用方…

计算机网络速成

前言:最近在做一些动态的crypto,但是配置总搞不好,正好也有学web的想法,就先学学web再回去做密码,速成视频推荐b站建模老哥 目录 计算机网络概述网络的范围分级电路交换网络(电路交换)报文交换网…

基于springboot+vue的 嗨玩-旅游网站

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

八股学习 Redis

八股学习 Redis 使用场景常见问题问题1、2示例场景缓存穿透解决方案一解决方案二 问题3示例场景缓存击穿解决方案 问题4示例场景缓存雪崩解决方案 问题5示例场景双写一致性强一致方案允许延时一致方案 问题6RDB方式AOF方式两种方式对比 问题7示例场景惰性删除定期删除 使用场景…

行业案例:高德服务单元化方案和架构实践

目录 为什么要做单元化 高德单元化的特点 高德单元化实践 服务单元化架构 就近接入实现方案 路由表设计 路由计算 服务端数据驱动的单元化场景 总结 系列阅读 为什么要做单元化 单机房资源瓶颈 随着业务体量和服务用户群体的增长,单机房或同城双机房无法支持服…

GO语言实现KMP算法

前言 本文结合朱战立教授编著的《数据结构—使用c语言(第五版)》(以下简称为《数据结构(第五版)朱站立》)中4.4.2章节内容编写,KMP的相关概念可参考此书4.4.2章节内容。原文中代码是C语言&…

Windows核心编程—匿名管道双向通信

注:父进程要创建两个匿名管道,并且STARTUPINFO 里面的两个字段很重要 A进程 void CMFCApplication1Dlg::OnBnClickedButton1() {SECURITY_ATTRIBUTES sa {};sa.nLength sizeof(SECURITY_ATTRIBUTES);sa.bInheritHandle TRUE;CreatePipe(&m_hRead…

基于springboot+vue的洪涝灾害应急信息管理系统设计与实现

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

centos修改/etc/resolv.conf 重启network后又恢复到原来的状态

博主使用的是centos7 问题描述:centos修改/etc/resolv.conf 执行 service network restart 后,/etc/resolv.conf 又恢复到原来的状态 解决方法:/etc/resolv.conf 保存 DNS 是暂时的,当重新启动 network 时,/etc/resol…

MySQL:索引

目录 1.MySQL索引是干什么的 2.铺垫知识 3.单个page的理解 4.页目录 单页情况 多页情况 1.MySQL索引是干什么的 MySQL的索引是提高查询效率,主要提高海量数据的检索速度。 2.铺垫知识 操作系统与磁盘之间IO的基本单位是4kb。 数据库是一个应用层软件&#…

【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解

分布式系统理论:CAP 与 BASE 详解 一、CAP 定理 背景与定义:1998 年由加州大学科学家埃里克布鲁尔提出,分布式系统存在一致性(Consistency)、可用性(Availability)、分区容错性(Part…

大数据技术Kafka详解 ⑤ | Kafka中的CAP机制

目录 1、分布式系统当中的CAP理论 1.1、CAP理论 1.2、Partitiontolerance 1.3、Consistency 1.4、Availability 2、Kafka中的CAP机制 C软件异常排查从入门到精通系列教程(核心精品专栏,订阅量已达600多个,欢迎订阅,持续更新…

linux自动分区后devmappercentos-home删除后合并到其它分区上

删除其他分区,合并到对应分区上增加磁盘空间 删除开机默认挂载 /dev/mapper/centos-home vim /etc/fstab 把 /dev/mapper/centos-home 这一行删除掉命令行取消挂载 /dev/mapper/centos-home umount /dev/mapper/centos-home删除掉逻辑卷 home lvsdf -hlvremove /…

东芝3525AC彩色复印机复印默认成黑白模式方法

同样适用2010AC等机型 东芝3525AC彩色激光数码复合机基本参数 产品类型:激光数码复合机 颜色类型:彩色 速度类型:中速 复印速度:彩色:35cpm,黑白:35cpm 涵盖功能:复印/打印/扫描…

T-SQL编程

目录 1、T-SQL的元素 1.1 标识符 1. 常规标识符 2. 分隔标识符 1.2 变量 1. 全局变量 2. 局部变量 1.3 运算符 1. 算数运算符 2. 赋值运算符 3. 位运算符 4. 比较运算符 5. 逻辑运算符 6. 字符串连接运算符 7. 一元运算符 8. 运算符的优先级和结合性 1.4 批处…

SpringBoot-Day1

1.Springboot入门 创建Maven工程 导入spring-boot-stater-web起步依赖 编写Controller 提供启动类 2.yml配置信息书写与获取 书写 # 发件人信息 email:user: 172349823457qq.comcode: sajdajlwhjfgfkllwhost: smtp.qq.comauth: true ​ # 学生爱好 hobbies:- 打篮球- 踢…