【4.14】今天讲两道TCP面试题

news2024/9/26 1:26:18

文章目录

    • TCP Keepalive 和HTTP Keep-Alive是一个东西吗?
    • TCP协议有什么缺陷

TCP Keepalive 和HTTP Keep-Alive是一个东西吗?

对于这个问题,我们要先知道这两个KeepAlive分别代表什么?

  • TCP的Keepalive是由TCP层(内核层)实现的,称为TCP保活机制;如果两端TCP连接一直没有数据交互,就会触发该机制,内核里的TCP协议栈会发送探测报文。

    • 如果对端程序正常工作,TCP保活时间会被重置。
    • 如果对端主机宕机,TCP会报告TCP连接已经死亡。
  • HTTP的Keep-Alive是由应用层(用户层)实现的,称为HTTP长连接;

    先来了解什么是短链接

    • HTTP采用的是请求—应答模式,并且是基于TCP传输协议实现的。客户端与服务端进行HTTP通信前,要建立HTTP连接,然后客户端发送HTTP请求,服务端收到后就返回响应,至此,请求—响应的模式就完成了,然后就会释放TCP连接。这个过程就是HTTP短连接

    使用HTTP的Keep-Alive就可以实现在完成HTTP请求后不断开TCP连接,让后序的HTTP请求继续使用该TCP连接。这就避免了连接的重复建立和释放的开销。

    如果要开启Keep-Alive,就要在请求头中添加:Connection: Keep-Alive

    但服务器收到请求后,它也在响应头中添加:Connection:Keep-Alive

    从HTTP1.1开始,就默认开启了Keep-alive,如果要关闭Keep-Alive,需要在HTTP请求包头中添加:Conntection:close

    HTTP长连接为HTTP流水线提供了可能,所谓的 HTTP 流水线,是客户端可以先一次性发送多个请求,而在发送过程中不需先等待服务器的回应,可以减少整体的响应时间。但服务器是按照顺序响应的。

    一般的,防止长连接占用资源,webweb 服务软件一般都会提供 keepalive_timeout 参数,用来指定 HTTP 长连接的超时时间。比如设置了 HTTP 长连接的超时时间是 60 秒,web 服务软件就会启动一个定时器,如果客户端在完后一个 HTTP 请求后,在 60 秒内都没有再发起新的请求,定时器的时间一到,就会触发回调函数来释放该连接。

TCP协议有什么缺陷

主要有以下几个方面,UDP协议的可靠传输使用的QUIC协议就解决了TCP的痛点,并且现在已经应用到HTTP/3了。

  • 升级 TCP 的工作很困难;

    TCP 协议是在内核中实现的,应用程序只能使用不能修改,如果要想升级 TCP 协议,那么只能升级内核。但是升级内核很麻烦。

  • TCP 建立连接的延迟;

    基于TCP实现的应用协议,都要首先建立三次握手才能进行数据传输。比如HTTPS协议,在经过TCP三次握手之后,还需要经过TLS四次握手,才能进行HTTP数据的传输,这就增加了数据传输的延迟。

    TCP Fast Open 减少了第二次TCP建立连接时的时延。但是提出的较晚,很难被普及。

在这里插入图片描述

  • TCP还可能不安全;

    因为TLS是在应用层实现的握手,TCP是在内核实现的握手,这两个握手过程无法结合在一起,总是得先完成TCP握手,才能进行TLS握手,所以TLS无法对TCP头部进行加密,这意味着TCP的序列号都是明文传输的,存在安全问题

    一个典型的例子就是攻击者伪造一个的 RST 报文强制关闭一条 TCP 连接,而攻击成功的关键则是 TCP 字段里的序列号位于接收方的滑动窗口内,该报文就是合法的。

    为此 TCP 也不得不进行三次握手来同步各自的序列号,而且初始化序列号时是采用随机的方式(不完全随机,而是随着时间流逝而线性增长,到了 2^32 尽头再回滚)来提升攻击者猜测序列号的难度,以增加安全性。

    但是这种方式只能避免攻击者预测出合法的 RST 报文,而无法避免攻击者截获客户端的报文,然后中途伪造出合法 RST 报文的攻击的方式。

  • TCP 存在队头阻塞问题;

    因为TCP是字节流的协议,TCP层必须要保证收到的字节数据是完整并且有序的,当序列号较低的TCP段在网络中丢失,即使序列号较高的TCP段已经被接受了,但是应用层也**无法从内核读取这段数据。**这就是TCP队头阻塞的问题。

    HTTP/2多个请求是跑在一个TCP连接中的,当TCP连接丢包,整个TCP就要等待重传,那么就会阻塞该TCP连接中的所有请求,所以HTTP/2队头阻塞问题就是因为TCP协议导致的。

  • 网络迁移需要重新建立 TCP 连接;

    基于 TCP 传输协议的 HTTP 协议,由于是通过四元组(源 IP、源端口、目的 IP、目的端口)确定一条 TCP 连接。

    那么当移动设备的网络从 4G 切换到 WIFI 时,意味着 IP 地址变化了,那么就必须要断开连接,然后重新建立 TCP 连接

    而建立连接的过程包含 TCP 三次握手和 TLS 四次握手的时延,以及 TCP 慢启动的减速过程,给用户的感觉就是网络突然卡顿了一下,因此连接的迁移成本是很高的。

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

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

相关文章

移远通信率先通过ISO/SAE 21434汽车网络安全管理体系认证

近日,移远通信车载前装BU获得了由国际独立第三方检测、检验和认证机构TV NORD颁发的ISO/SAE 21434汽车网络安全管理体系认证证书。 ISO/SAE 21434标准认证的通过,表明移远通信车载前装BU的网络安全风险管理满足了产品从概念设计、开发、生产、运营到售后…

我的面试八股(数据库)

数据库范式? 数据库范式有三种 1NF 第一范式,属性(对应表中的字段)不能再分割,就是这个字段只能是一个值,不能再分为多个其它字段了,1NF是所有关系型数据库的最基本要求。 2NF 第二范式&am…

Spring Security 02 搭建环境

搭建环境 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifa…

第31天-贪心-第八章 ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

文章目录1. 买卖股票的最佳时机2. 跳跃游戏3. 跳跃游戏 ||1. 买卖股票的最佳时机 - LeetCode链接 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 …

docker安装jenkins安装流程(一)

1.下载安装jdk 官网&#xff1a;https://jdk.java.net/ https://www.oracle.com/java/technologies/downloads/ 上传到linux服务器 cd /usr mkdir jdk tar -zxvf 所要解压的文件名 编辑profile文件&#xff1a;vim /etc/profile 把光标移到最后一行&#xff0c;键盘按 i&…

技术分享 | 如何优雅的删除 Zabbix 的 history 相关历史大表

作者&#xff1a;徐文梁 爱可生DBA成员&#xff0c;一个执着于技术的数据库工程师&#xff0c;主要负责数据库日常运维工作。擅长MySQL,redis&#xff0c;其他常见数据库也有涉猎&#xff0c;喜欢垂钓&#xff0c;看书&#xff0c;看风景&#xff0c;结交新朋友。 本文来源&…

Vue动图数据表格,根据字段是否为空,控制表格列的隐藏和显示

所在前面的话&#xff0c;我是个前端小白&#xff0c;大佬请绕行&#xff0c;可能大佬觉得很简单&#xff0c;但是我真的花了好几个小时去解决&#xff0c;所以记录一下&#xff0c;下次也可以作为参考。 我主要是以第二种方式进行修改的 开门见山 简述问题&#xff1a;大家…

《这就是软件工程师》- 每位软件工程师值的看的一本书,尤其是刚刚步入IT行业的年轻人

文章目录第一部分&#xff5c;行业地图1、现实&#xff1a;为什么会有996&#xff1f;1&#xff09;行业处于特定的发展阶段2&#xff09;公司组织管理问题2、进阶&#xff1a;软件工程师的四大台阶1&#xff09;新手阶段【执行力】2&#xff09;进阶阶段【设计能力】3&#xf…

电子行业数字化工厂的发展现状如何

随着科技的不断发展&#xff0c;电子行业的生产制造方式也在不断地进步。数字化工厂建设是电子行业中的一个重要发展方向&#xff0c;它可以提高生产效率&#xff0c;降低生产成本&#xff0c;提高产品质量&#xff0c;减少人力资源的使用。本文将从数字化工厂的概念、发展历程…

Zookeeper总结

目录 1、概念 2、什么是Zookeeper 3、如何下载 4、部署运行 4.1、解压文件 4.2、修改配置文件 4.3、创建持久化目录 4.4、配置jdk 4.5、启动zookeeper服务 4.6、查看zookeeper运行状态 5、系统模型 5.1、数据模型&#xff08;文件系统&#xff09; 5.2、znode节点类型 持久…

Google FLASH-QUAD Transformer模型的设计雷点

这个模型用来做无序弱监督分类&#xff0c;效果好&#xff0c;特别是收敛速度比标准多头Attention层快多了&#xff0c;完全没得比。 问题1 但这模型我用来做自回归生成&#xff0c;非常垃圾。 同时尝试了 GPT 和 T5 这两种模型结构的设计&#xff0c;明明Loss正常下降&#…

环境变量相关知识

目录 目录 谢谢你的阅读&#xff0c;这是对我最大的鼓舞 先说结论&#xff1a; 开始论述&#xff1a; 让我们举个例子 相关指令 创建本地变量 创建环境变量 方法一&#xff1a; 方法二&#xff1a; 删除环境变量 子进程中也有环境变量 第一种&#xff1a; 第二种 …

【PlumGPT】与PlumGPT开启智能对话之旅

文章目录 一、前言二、PlumGPT介绍篇三、PlumGPT登录篇四、PlumGPT体验篇1、与PlumGPT聊天2、让PlumGPT翻译3、让PlumGPT创作4、请PlumGPT写推荐信5、让PlumGPT展示图片6、让PlumGPT充当百科小助手 五、PlumGPT总结篇 PlumGPT入口体验链接&#xff1a;https://plumgpt.com 一、…

【Kubernetes】 故障转移和自愈能力机制详解

文章目录一. 引言1. 介绍Kubernetes2. 故障转移和自愈能力的重要性二. Kubernetes 概览1. Kubernetes 架构2. Kubernetes 组件和功能三. 故障转移1. 如何定义故障转移2. Kubernetes 中的故障转移机制2.1 健康检查2.2 Pod 和 ReplicaSet2.3 控制器和故障转移3. Pods和ReplicaSet…

LS1028+TSN+Vxworks实时系统解决方案

TSN&#xff08;时间敏感网络&#xff09;正在各类市场兴起。它可以为过去不曾存在的全新应用提供实时通信。 例如&#xff0c;将控制功能从驱动中解耦出来并移至边缘计算。下一代自动控制器可以并行处理视频流和控制流等各种工作负载&#xff0c;在一台机器上运行全部深度学习…

【高危】Google Chrome V8 类型混淆漏洞(CVE-2023-2033)

漏洞描述 Google Chrome V8是Google开源的JavaScript和WebAssembly引擎&#xff0c;被用在Chrome和Node.js等浏览器和平台中。 该项目受影响版本存在类型混淆漏洞&#xff0c;攻击者可通过诱导用户打开恶意链接来触发此漏洞&#xff0c;可能导致浏览器崩溃或执行任意代码。由…

跟姥爷深度学习2 TensorFlow的基本用法

一、前言 前面我们浅用TensorFlow做了个天气预测&#xff0c;虽然效果不咋样&#xff0c;但算是将整个流程跑通了。这一篇我们在之前基础上对TensorFlow的一些参数进行简单介绍&#xff0c;在接口文件的基础上了解各参数的简单含义和用法。 二、再次构建模型 我们先将之前的…

基于组合双向拍卖的共享储能机制研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

规模化敏捷框架之LeSS

Scrum 是目前比较流行的敏捷框架&#xff0c;Scrum 敏捷开发团队由产品负责人&#xff08;Product Owner&#xff09;、敏捷教练&#xff08;Scrum Master&#xff09;、软件开发人员和其他合作人员组成。团队在这个指导框架下协同工作、开发、创造和交付有价值的产品来解决复杂…

易基因:METTL3介导的m6A甲基化谱调控肌肉干细胞成肌细胞状态转换|发育分化

2020年9月29日&#xff0c;《Cell Death Discovery》&#xff08;IF: 7.109&#xff09;杂志发表了题为“A defined N6-methyladenosine (m6A) profile conferred by METTL3 regulates muscle stem cell/myoblast state transitions”的研究论文&#xff0c;研究通过MeRIP-seq&…