【每日八股】复习计算机网络 Day4:TCP 协议的其他相关问题

文章目录

  • 昨日内容复习
    • 已经建立了 TCP 连接,客户端突然出现故障怎么办?
    • 什么时候用长连接?短连接?
    • TCP 的半连接队列与全连接队列?
    • 什么是 SYN 攻击?如何避免?
    • TIME_WAIT 的作用?过多如何解决?
    • TIME_WAIT 为什么要经过两个 MSL?
    • CLOSE_WAIT 状态过多如何解决?
  • 复习计算机网络 Day4:TCP 协议的其他相关问题
    • TCP 和 UDP 的区别?
    • TCP 传输时出现粘包问题应该如何解决?
    • TCP 的 keepalive 和 HTTP 的 keepalive 的区别?
    • IP 层可以对较长的报文进行分片,为什么 TCP 层还需要 MSS?

昨日内容复习

已经建立了 TCP 连接,客户端突然出现故障怎么办?

服务端不会一直等待。服务端会为每一条 TCP 连接设置一个保活计时器(时长通常是两个小时),每当客户端传来数据,服务端会重置计时器。如果保活计时器时间到,那么服务端每隔一定时间发送一个探测报文,连续发送十个探测报文仍然收不到客户端的回复,那么服务端终止与客户端的连接。

什么时候用长连接?短连接?

  • 长连接用于频繁通信的点对点通讯,并且长连接的个数不能太多。数据库的连接就是长连接的一种。
  • HTTP 服务一般使用短连接,可快速释放。

TCP 的半连接队列与全连接队列?

  • 半连接队列:又称 SYN 队列,服务端会保存发送 SYN 请求报文请求连接的客户端的信息,并向客户端发送 SYN-ACK 报文。
  • 全连接队列:又称 ACCEPT 队列。服务端回发的 SYN-ACK 报文得到 ACK 报文确认后,就会将 SYN 队列中的客户端移出队列,建立 TCP 连接并加入到全连接队列当中。

什么是 SYN 攻击?如何避免?

服务端收到大量的恶意 SYN 请求报文,会不停地回发 SYN-ACK 报文,得不到 ACK 确认报文,会触发超时重传,此时会导致服务端资源浪费。此外,服务端收到 SYN 报文后,可能会为该连接分配一个 TCB 进程控制块,大量的恶意 SYN 请求会导致服务端资源枯竭。

避免方法包括但不限于以下几种:

  • TCP 连接建立后再分配 TCB;
  • 减少 SYN-ACK 的重传次数;
  • 监视 SYN 队列和 ACCEPT 队列中的无效连接,及时清除;
  • 扩大 SYN 队列;

TIME_WAIT 的作用?过多如何解决?

  • 确保主动关闭方发送的 ACK 报文到达被动关闭方,从而确保全双工通道的可靠关闭;
  • 等待网络中因网络拥塞而还没有到达的报文在网络中自然消失,避免对新连接产生干扰;

过多的 TIME_WAIT 会占用网络与端口资源,导致新的连接无法建立。

解决办法包括但不限于:

  • 复用长连接;
  • 调整 MSL 时间;
  • 快速回收 TIME_WAIT。

TIME_WAIT 为什么要经过两个 MSL?

  • 第一个 MSL:确保 ACK 报文到达对端;
  • 第二个 MSL:确保对端重传的 FIN 到达本端;

2 MSL 还可确保旧报文在网络中完全消亡。

CLOSE_WAIT 状态过多如何解决?

CLOSE_WAIT 过多可能是应用程序层面产生的问题,应该对应用程序进行检查。

复习计算机网络 Day4:TCP 协议的其他相关问题

在这里插入图片描述

TCP 和 UDP 的区别?

  • TCP 是面向连接的,连接建立时需要三次握手,断开时需要四次挥手。UDP 不需要建立连接。
  • TCP 是可靠传输服务,可确保传输数据无差错。UDP 非可靠传输,尽最大努力交付。
  • TCP 是点对点连接,UDP 可以通过多对一、一对多、多对多等方式通讯。
  • UDP 对系统资源的要求比较少,通讯效率高,实时性好。TCP 适用于需要可靠连接,比如付费、加密数据等场景。
  • TCP 首部长度较长,有一定开销,在没有额外选项时 TCP 头部的长度占 20 字节。UDP 首部长度只有 8 字节,没有额外长度。
  • TCP 进行流式传输,没有数据边界。UDP 基于数据包传输,可能会丢包与乱序。
  • TCP 数据的大小如果大于 MSS,则会在传输层进行分片。对端收到数据分片后会在传输层进行组装。中间如果发生丢包,传输方会重传丢失的分片。UDP 数据的大小取决于 MTU 的大小,会在 IP 层分片,对端收到数据后,会在 IP 层组装。
  • 应用场景:TCP 可用于 FTP 文件传输;UDP 用于包总量较少的通信,比如 DNS、SNMP 等。视频、音频等多媒体通信以及广播通信也可用 UDP 实现。

TCP 传输时出现粘包问题应该如何解决?

在数据的头部指定当前数据包的数据长度,由应用层根据数据长度来分包拆包。粘包是需要在应用层解决的问题。

TCP 的 keepalive 和 HTTP 的 keepalive 的区别?

  • HTTP 的 keepalive 是由应用层(用户态)实现的,称为 HTTP 长连接。而 TCP 的 keepalive 是由传输层(内核态)实现的,称为 TCP 保活机制。
  • HTTP 的 keepalive 与 TCP 的 keepalive 作用不同。TCP 的 keepalive 用于探测对端是否仍然在线。而 HTTP 的 keepalive 用于避免重复建立/断开 TCP 连接,减少 TCP 连接建立与断开时的开销。

IP 层可以对较长的报文进行分片,为什么 TCP 层还需要 MSS?

  • MTU:一个网络包的最大长度,在以太网中一般 1500 字节;
  • MSS:去除 IP 和 TCP 报文头部后,一个网络包中可以容纳的 TCP 数据部分的最大长度。

IP 层虽然可以对报文进行分片,但是存在以下问题,TCP 中 MSS 的提出就是为了解决下述问题:

性能消耗

  • 重组开销:IP 层分片传输的报文需要在接收端进行重组,消耗 CPU /内存资源。
  • 重传开销:如果传输过程中任意 IP 报文分片丢失,则整个报文都需要重传。

可靠性风险

  • 无分片状态跟踪:IP 是无状态协议,无法感知分片是否全部到达。
  • 防火墙 / NAT 干扰:部分网络设备会丢弃分片报文,导致通信失败。

路径 MTU 发现(PMTUD)复杂性

  • 动态路径 MTU:网络路径中不同链路的 MTU 可能不同。
  • PMTUD 失败:若 ICMP 报文被屏蔽,PMTUD 可能会失败。

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

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

相关文章

React:<></>的存在是为了什么

1. <></> 是什么&#xff1f; <></> 是 React 的Fragment&#xff08;片段&#xff09;语法糖&#xff0c;等价于 <React.Fragment></React.Fragment>。 2. 它的作用 主要作用&#xff1a; 允许你在组件里返回多个元素&#xff0c;而不需…

cron定时任务

cron定时任务 一、Cron表达式的定义 基础结构 Cron表达式是由空格分隔的6或7个字段组成的字符串&#xff0c;格式为&#xff1a; 秒 分 时 日 月 星期 [年]其中&#xff0c;年通常可以被省略 字段说明&#xff1a; 秒&#xff08;0-59&#xff09; 秒字段表示每分钟的哪一…

分布式之易混淆概念

昨天写UE写的破防了&#xff0c;忘了写文章&#xff0c;今天补一下分布式的一些概念。&#x1f61a; 在软件架构领域&#xff0c;微服务、领域驱动设计&#xff08;DDD&#xff09;和分布式系统是三个高频且容易被混淆的概念。许多开发者误以为它们是“同一件事的不同说法”&a…

量子跃迁:Vue组件安全工程的基因重组与生态免疫(完全体终局篇)

开篇数字免疫系统的范式革命 在2025年某国际金融峰会期间&#xff0c;黑客组织利用量子计算技术对全球37个交易系统发起协同攻击。传统安全组件在2.7秒内集体失效&#xff0c;造成每秒超18亿美元的交易漏洞。这场数字"切尔诺贝利"事件促使我们重新定义前端安全——组…

Operating System 实验七 Linux文件系统实验

实验目标: 使用dd命令创建磁盘镜像文件ext2.img并格式化为ext2文件系统,然后通过mount命令挂载到Linux主机文件系统。查看ext2文件系统的超级块的信息,以及数据块的数量、数据块的大小、inode个数、空闲数据块的数量等信息 在文件系统中创建文件xxxxx.txt(其中xxxxx为你的学…

模型识别能力锤炼及清单

大脑将注意力分配给需要消耗脑力的活动&#xff0c;通过学习技能&#xff0c;大脑也能更轻松的工作。这个时候&#xff0c;大脑负责管理注意力控制和努力控制的区域活动会大幅减少。沉浸式学习是学习一门新的语言的最佳方式&#xff0c;也是深入洞察错综复杂商业环境的绝佳途径…

Android 混合开发实战:统一 View 与 Compose 的浅色/深色主题方案

整个应用&#xff08;包括 View 和 Compose 部分&#xff09;的浅色/深色模式保持一致。以下是完整的解决方案&#xff1a; 全局配置方案 1. 基础主题设置 在 res/values/themes.xml 和 res/values-night/themes.xml 中定义统一的主题&#xff1a; <!-- values/themes.x…

QT开发技术【QT实现桌面右下角消息】

一、效果 ![ 二、弹窗主体部分 noticewidget /* ** File name: NoticeWidget.h ** Author: ** Date: 2025-04-25 ** Brief: 通知栏控件 ** Copyright (C) 1392019713qq.com All rights reserved. */#include "../Include/NoticeWidget.h"…

在LiveGBS GB28181互联网安防监控平台中关于redis版本切换的方法说明

目录 1、Redis服务2、如何切换REDIS? 2.1、停止启动REDIS2.2、配置信令服务2.3、配置流媒体服务2.4、启动3、搭建GB28181视频直播平台 1、Redis服务 在LivGBS中Redis作为数据交换、数据订阅、数据发布的高速缓存服务。默认LiveCMS解压目录下会携带一个REDIS服务。如果已经有自…

vue3中的effectScope有什么作用,如何使用?如何自动清理

vue3中的effectScope有什么作用&#xff0c;如何使用?如何自动清理 vue3中的effectScope有什么作用&#xff0c;如何使用 官网介绍&#xff1a;作用特点简单示例&#xff1a;自动清理示例 官网介绍&#xff1a; 创建一个 effect 作用域&#xff0c;可以捕获其中所创建的响应…

搭建基于火灾风险预测与防范的消防安全科普小程序

基于微信小程序的消防安全科普互动平台的设计与实现&#xff0c;是关于微信小程序的&#xff0c;知识课程学习&#xff0c;包括学习后答题。 技术栈主要采用微信小程序云开发&#xff0c;有下面的模块&#xff1a; 1.课程学习模块 2.资讯模块 3.答题模块 4.我的模块 还需…

python 与Redis操作整理

以下是使用 Python 操作 Redis 的完整整理&#xff0c;涵盖基础操作、高级功能及最佳实践&#xff1a; 1. 安装与连接 (1) 安装库 pip install redis(2) 基础连接 import redis# 创建连接池&#xff08;推荐复用连接&#xff09; pool redis.ConnectionPool(hostlocalhost, …

什么时候使用Python 虚拟环境(venv)而不用conda

是的&#xff01;python3.9 -m venv rtdetr_env 是 Python 原生的虚拟环境&#xff08;venv&#xff09;&#xff0c;而 conda 是另一个流行的虚拟环境管理工具&#xff08;来自 Anaconda/Miniconda&#xff09;。下面我会详细对比两者的区别&#xff0c;并讲解 venv 的基本用法…

ubuntu20.04安装x11vnc远程桌面

x11vnc是一个VNC服务器, 安装后我们可以不依赖外部的显示设备, 通过网络远程登录ubuntu桌面。 安装x11vnc sudo apt-get install x11vnc 设置VNC登录密码 sudo x11vnc -storepasswd /etc/x11vnc.pwd 设置x11vnc在开机时自动启动 新建如下文件: sudo vi /lib/systemd/sys…

Maven的概念与初识Maven

目录 一、Maven的概念 1. 什么是Maven 2. 项目构建&#xff1a;从代码到部署的标准化流程 2.1 Maven构建生命周期 2.2 传统构建 vs Maven构建 3. 依赖管理&#xff1a;解决“JAR地狱”的利器 3.1 依赖声明 3.2 依赖传递与冲突解决 4. Maven仓库&#xff1a;依赖的存储…

Unity-Shader详解-其二

前向渲染和延迟渲染 前向渲染和延迟渲染总的来说是我们的两种主要的渲染方式。 我们在Unity的Project Settings中的Graphic界面能够找到渲染队列的设定&#xff1a; 我们也可以在Main Camera这里进行设置&#xff1a; 那这里我们首先介绍一下两种渲染&#xff08;Forward R…

C++ 中 std::tuple 使用详解

C 中 std::tuple 使用详解 基本概念 std::tuple 是 C11 引入的模板类&#xff0c;用于打包任意数量、任意类型的值在一起。可看作是类型安全的变长结构体。 #include <tuple>std::tuple<int, std::string, double> t(42, "hello", 3.14);创建 tuple 的…

WebRTC基于网页的视频会议,手写WebRTC流程(html)

WebRTC是web real-time communication网页及时通信的缩写&#xff0c;通过javascript就可以实现网页会话&#xff0c;基于浏览器开发出来多媒体应用&#xff0c; 以下是手写的WEBRTC调用本地摄像头的html代码&#xff0c;直接用浏览器打开&#xff0c;就可以使用 <!DOCTYPE…

MyBatis 官方子项目详细说明及表格总结

MyBatis 官方子项目详细说明及表格总结 1. 核心子项目说明 1.1 mybatis-3 GitHub 链接&#xff1a;https://github.com/mybatis/mybatis-3功能&#xff1a; MyBatis 核心框架的源码&#xff0c;提供 SQL 映射、动态 SQL、缓存、事务管理等核心功能。主要功能&#xff1a; 支持…

【虚幻C++笔记】碰撞检测

目录 碰撞检测参数详情示例用法 碰撞检测 显示名称中文名称CSphere Trace By Channel按通道进行球体追踪UKismetSystemLibrary::SphereTraceSingleSphere Trace By Profile按描述文件进行球体追踪UKismetSystemLibrary::SphereTraceSingleByProfileSphere Trace For Objects针…