当前位置: 首页 > news >正文

TCP面试

一、TCP协议基础

  1. 什么是TCP协议?

    • TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,为互联网中的数据通信提供了稳定的传输机制。
  2. TCP协议的特点有哪些?

    • 面向连接:TCP在数据传输之前需要建立连接,通信结束后会断开连接。
    • 可靠传输:TCP确保数据包正确无误地从源点传送到目的地,若数据包在传输过程中丢失或出错,会被重新发送。
    • 全双工通信:TCP允许数据在两个方向上同时传输,提高了通信效率。
    • 流量控制:TCP通过滑动窗口机制进行流量控制,避免快速发送方压倒慢速接收方。
    • 拥塞控制:TCP实施拥塞控制策略来避免网络拥塞,如慢启动、拥塞避免、快速重传和快速恢复等。
    • 有序传输:TCP保证数据按发送时的顺序到达接收端。
  3. TCP和UDP的主要区别是什么?

    • TCP是面向连接的、可靠的协议,而UDP是无连接的、不可靠的协议。TCP提供数据的顺序传输和错误校验,UDP则更加注重速度和效率。

二、TCP连接管理

  1. 解释TCP的三次握手过程。

    三次握手是建立TCP连接的过程,包括SYN(同步序列编号)、SYN-ACK(同步和确认)、ACK(确认)三个步骤。具体过程如下:

第一次握手:客户端发起连接请求

        客户端动作:发送一个SYN报文(同步序列编号),包含:

                1.随机生成的初始序列号(seq=x)。

                2.标志位SYN=1(表示请求连接)。

        状态变化:客户端进入SYN_SENT状态。

          图片示例: 

客户端                                服务器
|                                    |
|------ SYN (seq=x) ---------------->|
|                                    |

第二次握手:服务器确认并响应

        服务器动作:收到SYN后,回复SYN-ACK报文,包含:

                1.确认号ack=x+1(表示已收到客户端的seq=x)。

                2.服务器随机生成的初始序列号seq=y。

                3.标志位SYN=1和ACK=1。

        状态变化:服务器进入SYN_RCVD状态。

        图片示例: 

 客户端                                                服务器
|                                                           - |
|------ SYN (seq=x) ------------------------> |
|<---- SYN-ACK (seq=y, ack=x+1) ---- -|
|---------------------------------------------------|

第三次握手:客户端确认连接建立

        客户端动作:收到SYN-ACK后,发送ACK报文,包含:

                1.确认号ack=y+1(表示已收到服务器的seq=y)。

                2.标志位ACK=1(此时SYN=0,因为无需再同步)。

        状态变化:客户端和服务器均进入ESTABLISHED状态,连接建立成功。

         图片示例: 

客户端                                服务器
|                                    |
|------ SYN (seq=x) ---------------->|
|<---- SYN-ACK (seq=y, ack=x+1) ----|
|------ ACK (ack=y+1) ------------->|
|                                    |​

完整交互时序图

客户端                                服务器
|                                    |
|------ SYN (seq=x) ---------------->|  # 第一次握手
|<---- SYN-ACK (seq=y, ack=x+1) ----|  # 第二次握手
|------ ACK (ack=y+1) ------------->|  # 第三次握手
|                                    |
|------ 数据传输 ------------------->|  # 连接建立,开始通信

 关键点说明

        1、序列号的作用:确保数据按序到达,解决网络中报文乱序问题。

        2、三次握手的必要性

                1.防止历史重复连接导致混乱。

                2.同步双方的初始序列号(ISN)。

                3.确保双方收发能力正常(通过三次交互验证)。

  1. TCP为什么需要三次握手?

    • 三次握手的主要原因是防止旧的重复连接引起连接混乱问题,以及同步初始化序列号。在网络状况复杂或较差的情况下,发送方可能会连续发送多次建立连接的请求。如果TCP握手的次数只有两次,接收方只能选择接受请求或者拒绝接受请求,但它并不清楚这次的请求是正常的请求,还是由于网络环境问题而导致的过期请求。如果是过期请求,就会造成错误的连接。三次握手可以实现TCP初始化序列号的确认工作,确保消息的顺序。
  2. 解释TCP的四次挥手过程。

    • 四次挥手是TCP关闭连接的过程,包括FIN(结束)、ACK(确认)、FIN(结束)、ACK(确认)四个步骤。具体过程如下:
      1. 客户端发送FIN包到服务器,表示不再发送数据,并进入FIN_WAIT_1状态。
      2. 服务器收到FIN包后,发送ACK包作为确认,并进入CLOSE_WAIT状态。
      3. 服务器发送完所有数据后,发送FIN包到客户端,表示不再发送数据,并进入LAST_ACK状态。
      4. 客户端收到FIN包后,发送ACK包作为确认,并进入TIME_WAIT状态。等待2MSL(最大段生存期)后,客户端进入CLOSED状态,服务器收到ACK包后也进入CLOSED状态,连接关闭成功。
  3. 为什么挥手需要四次?

    • TCP的四次挥手是为了确保数据流的正确和可靠地关闭。这需要双方都明确地确认关闭请求,并确保所有的数据包都已接收或处理。通过四次挥手,每一方都可以确认对方已经完成了数据传输和接收的准备工作。

三、TCP可靠性保障

  1. TCP如何保证数据的可靠性?

    • TCP通过序列号、确认应答、重传机制、流量控制和拥塞控制等机制来保证数据的可靠传输。
  2. TCP的超时重传机制是如何工作的?

    • 当TCP发送数据后,如果在规定时间内没有收到对方的确认应答,则会认为数据丢失并重新发送该数据包。
  3. TCP的流量控制是如何实现的?

    • TCP通过滑动窗口机制实现流量控制。接收方通过TCP报文段中的窗口字段来控制发送方窗口大小,从而影响发送方的发送速率。

四、TCP性能优化

  1. TCP的拥塞控制是如何工作的?

    • TCP的拥塞控制主要包括慢启动、拥塞避免、快速重传和快速恢复算法。目的是防止网络拥塞导致丢包。
  2. 什么是Nagle算法?

    • Nagle算法是一种减少网络中小规模数据包数量的算法,它尝试将多个小的数据包合并成一个大的数据包进行发送。
http://www.dtcms.com/a/306539.html

相关文章:

  • Mint聊天室 · 猫猫狐狐的QA夜会· Vol.01
  • 智慧界桩:湿地与地质公园的生态链守护者
  • 【数据结构初阶】--二叉树(五)
  • 模板初阶
  • C++ 中 NULL 与 nullptr 有什么区别?
  • Redis 中 key 的过期策略 和 定时器的两种实现方式
  • 基于逻辑回归、随机森林、梯度提升树、XGBoost的广告点击预测模型的研究实现
  • 超宽带测距+测角+无线通信一体化跟随模组:机械狗、无人车、无人机等跟随
  • Dify-15: 开发指南
  • DIY循迹模块多路改造指南
  • 【WRF-Chem第三期】输入数据概览
  • 随笔之TDengine基准测试示例
  • LeetCode 25:K 个一组翻转链表
  • MCU中的CAN总线是什么?
  • WebRTC核心组件技术解析:架构、作用与协同机制
  • 一文掌握最新版本Monocle3单细胞轨迹(拟时序)分析
  • 如何将JPG、PNG、GIF图像转换成PDF、SVG、EPS矢量图像
  • Rust基础[part9]_返回值和错误处理、模块化
  • [特殊字符] 征服CPU的艺术:Rust多进程编程实战指南
  • Cortex-M处理器的优势?
  • STM32CubeIDE新建项目过程记录备忘(二)
  • FFmpeg:因码流采集与封装不同步导致录制出来的MP4文件会出现黑屏、绿屏的问题
  • Zynq SoC 中断控制系统设计与实现:基于 GPIO 的中断驱动开发
  • LocalDateTime vs Instant vs ZonedDateTime:到底该用哪个?
  • .net6的webapi项目统一封装返回值
  • 剧本杀系统 App 开发:科技赋能,重塑剧本杀游戏体验
  • 光伏气象监测系统:当阳光遇见科技
  • Javascript 基础总结
  • 做题笔记:某大讯飞真题28道
  • 浅拷贝和深拷贝