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.mzph.cn/news/892512.shtml

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

相关文章

linux--防火墙 iptables 双网卡 NAT 桥接

linux--防火墙 iptables 双网卡 NAT 桥接 1 介绍1.1 概述1.2 iptables 的结构 2 四表五链2.1 iptables 的四表filter 表:过滤规则表,默认表。nat 表:地址转换表。mangle 表:修改数据包内容。raw 表:原始数据包表。 2.2…

oracle闪回表

文章目录 闪回表案例1:(未清理回收站时的闪回表--成功)案例2(清理回收站时的闪回表--失败)案例3:彻底删除表(不经过回收站--失败)案例4:闪回表之后重新命名新表总结1、删…

202506读书笔记|《飞花令·江》——余霞散成绮,澄江静如练,江梅一夜落红雪,便有夭桃无数开

202506读书笔记|《飞花令江》——余霞散成绮,澄江静如练,江梅一夜落红雪,便有夭桃无数开 摘录 《飞花令江》素心落雪编著,飞花令得名于唐代诗人韩翃《寒食》中的名句“春城无处不飞花”,类似于行酒令,是文人…

《系统爆破:MD5易破,后台登录可爆破?》

声明:笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 爆破Sales系统 一、爆破MD5 场景:已知MD5的加密字符串,如何得知明…

Copula算法原理和R语言股市收益率相依性可视化分析

阅读全文:http://tecdat.cn/?p6193 copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。在本视频中,我们通过可视化的方式直观地介绍了Copula函数,并通过R软件应用于金融时间序列数据来理解它(点击文…

DSP+Simulink——点亮LED灯(TMSDSP28379D)超详细

实现功能:DSP28379D-LED灯闪烁 :matlab为2019a :环境建立见之前文章 Matlab2019a安装C2000 Processors超详细过程 matlab官网链接: Getting Started with Embedded Coder Support Package for Texas Instruments C2000 Processors Overview of Creat…

APP上架之Android 证书 MD5 指纹

Android 证书 MD5 指纹 1. 什么是 Android 证书 MD5 指纹? Android 证书 MD5 指纹是对证书数据进行 MD5 哈希运算后得到的 128 位字符串。在 Android 开发中,每个证书在理论上都有一个唯一的 MD5 指纹,用于识别和验证证书的有效性。证书指纹…

【Rust自学】11.6. 控制测试运行:并行和串行(连续执行)测试

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.6.1. 控制测试的运行方式 cargo test和cargo run一样,cargo test也会编译代码并生成一个二进制文件用于测试,…

计算机网络学习笔记

第1课 绪论、传输介质 【知识点回顾】 两种导线可以减小电磁干扰: 双绞线(分为非屏蔽双绞线、屏蔽双绞线)(RJ-45用)同轴电缆(短距离使用)网络通信的基本单位:位(bit&…

STM32之CAN通讯(十一)

STM32F407 系列文章 - CAN通讯(十一) 目录 前言 一、CAN 二、CAN驱动电路 三、CAN软件设计 1.CAN状态初始化 2.头文件相关定义 3.接收中断服务函数 4.用户层使用 1.用户层相关定义 2.发送数据 3.接收数据 1.查询方式处理 2.中断方式处理 3…

Java聊天小程序

拟设计一个基于 Java 技术的局域网在线聊天系统,实现客户端与服务器之间的实时通信。系统分为客户端和服务器端两类,客户端用于发送和接收消息,服务器端负责接收客户端请求并处理消息。客户端通过图形界面提供用户友好的操作界面,服务器端监听多个客户端的连接并管理消息通…

C#Halcon找线封装

利用CreateMetrologyModel封装找线工具时,在后期实际应用调试时容易把检测极性搞混乱,造成检测偏差,基于此,此Demo增加画线后检测极性的指引,首先看一下效果 加载测试图片 画线 确定后指引效果 找线效果 修改显示 UI代…

【linux系统之redis6】redis的基础命令使用及springboot连接redis

redis的基础命令很多,大部分我们都可以在官网上找到,真的用的时候可以去官网找,不用全部记住这些命令 redis通用的基础命令的使用 代码测试 string类型常见的命令 key值的结构,可以区分不同的需求不同的业务名字 hash类型 创建…

ISP各模块功能介绍

--------声明,本文为转载整理------- ISP各个模块功能介绍: 各模块前后效果对比: 黑电平补偿(BLC) 在理想情况下,没有光照射的像素点其响应值应为0。但是,由于杂质、受热等其它原因的影响&…

前缀和练习

【模版】前缀和 【模板】前缀和_牛客题霸_牛客网 思路 要想快速找出某一连续区间的和&#xff0c;我们就要使用前缀和算法。 其实本质是再创建一个dp数组&#xff0c;每进一次循环加上原数组的值&#xff08;dp代表arr的前n项和&#xff09;&#xff1a; vector<int>…

3. 【Vue实战--孢子记账--Web 版开发】--登录大模块

从这篇文章开始我们就进入到了孢子记账的前端开发&#xff0c;在本专栏中我默认大家的电脑上都已经配置好了开发环境。下面我们一起开始编写孢子记账的Web版吧。 一、功能 登录大模块功能包括注册、登录和找回密码功能&#xff0c;在本篇文章中我只会展示注册界面的实现&…

【2024年华为OD机试】 (A卷,100分)- 端口合并(Java JS PythonC/C++)

一、问题描述 题目描述 有 M 个端口组 (1 < M < 10)&#xff0c; 每个端口组是长度为 N 的整数数组 (1 < N < 100)&#xff0c; 如果端口组间存在 2 个及以上不同端口相同&#xff0c;则认为这 2 个端口组互相关联&#xff0c;可以合并。 输入描述 第一行输入端…

73.矩阵置零 python

矩阵置零 题目题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a; 题解思路分析Python 实现代码代码解释提交结果 题目 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例…

基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)

本篇技术博文摘要 &#x1f31f; 基于华为enspOSPF状态机、OSPF工作过程、.OSPF基本配置等保姆级别具体详解步骤&#xff1b;精典图示举例说明、注意点及常见报错问题所对应的解决方法 引言 &#x1f4d8; 在这个快速发展的技术时代&#xff0c;与时俱进是每个IT人的必修课。我…

SOLID原则学习,接口隔离原则

文章目录 1. 定义2. 为什么要遵循接口隔离原则&#xff1f;3. 违反接口隔离原则的例子4. 遵循接口隔离原则的改进5. 总结 1. 定义 接口隔离原则&#xff08;Interface Segregation Principle, ISP&#xff09; 接口隔离原则是面向对象设计中的五大原则&#xff08;SOLID&#…