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

【每日八股】复习计算机网络 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 可能会失败。

相关文章:

  • 【Java学习笔记】random的使用
  • 并行RANSAC平面拟合(C++)
  • [特殊字符]‍[特殊字符]Linux驱动开发入门 | 并发与互斥机制详解
  • ActiveMQ 核心概念与消息模型详解(二)
  • centos7 设置EMQX开机自启动(创建init.d脚本来设置emqx的自启动服务)
  • 文档构建:Sphinx全面使用指南 — 实战篇
  • leetcode 二分查找应用
  • 未曾设想的道路1
  • idea无法下载源代码
  • 使用Python模拟子弹与子弹的碰撞
  • 蓝桥杯 19. 最大比例
  • 阳光乳业2024年营收、利润双降:囿于一隅,市场单一化困局何解?
  • 抱佛脚之学SSM五
  • Rust 学习笔记:安装 Rust
  • Qt实现语言切换的完整方案
  • 一,开发环境安装
  • Java 实现单链表翻转(附详细注释)
  • redis 使用 Docker 部署 简单的Redis 集群(包括哨兵机制)
  • Qt基础007(Tcp网络编程)
  • 32单片机——GPIO的工作模式
  • 俄外长拉夫罗夫将出席金砖国家外长会
  • 民生访谈|马拉松中签率低何解?预付费监管落实得如何?市体育局回应
  • 时隔七年,上合组织国家电影节再度在中国举办
  • 新《火灾统计管理规定》即将施行,火灾死亡统计时限延长
  • 韩国检方以受贿嫌疑起诉前总统文在寅
  • 岳阳一管道疑似有黑水直排东洞庭湖,生态环境局:已赶往现场核查