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

赶紧收藏!2024 年最常见 100道 Java 基础面试题(四十一)

上一篇地址:赶紧收藏!2024 年最常见 100道 Java 基础面试题(四十)-CSDN博客

八十一、tcp为什么要三次握手,两次不行吗?为什么?

TCP(传输控制协议)使用三次握手(Three-way Handshake)来建立一个可靠的连接。这个过程确保了两端的发送和接收通道都是可用的。以下是三次握手的步骤和原因:

三次握手步骤:

  1. SYN(同步序列编号):客户端发送一个带有SYN标志的TCP段到服务器以初始化一个连接。这个SYN段包含客户端的初始序列号(seq=x)。

  2. SYN-ACK(同步-确认):服务器收到这个SYN段后,如果同意建立连接,则会发送一个SYN-ACK段作为响应。这个段包含服务器的初始序列号(seq=y)和对客户端序列号的确认(ack=x+1)。

  3. ACK(确认):客户端收到服务器的SYN-ACK段后,会发送一个确认段(ACK段),包含对服务器序列号的确认(ack=y+1)。

为什么需要三次握手,而不是两次?

  1. 初始化序列号:三次握手允许客户端和服务器各自选择一个初始序列号(ISN),而不是仅仅依赖于服务器的初始序列号。这增加了连接的安全性,因为使用随机的ISN可以防止第三方预测连接的序列号,从而防止某些类型的攻击。

  2. 防止过时的连接请求:考虑一个场景,客户端发送了一个连接请求,但因为网络延迟或其他原因,请求在网络中滞留了很长时间。如果只有一个或两个握手步骤,这个过时的连接请求可能在客户端已经放弃连接后到达服务器,导致服务器错误地初始化一个不存在的连接。

  3. 确保双方都准备好发送数据:三次握手确保双方都准备好接收和发送数据。客户端通过SYN向服务器表明它准备好发送数据,服务器通过SYN-ACK表明它准备好接收数据,客户端的ACK表明它准备好接收数据。

  4. 防止资源浪费:如果只有两次握手,服务器可能在收到客户端的SYN后立即为连接分配资源,但如果客户端没有收到服务器的SYN-ACK(可能是因为网络问题),客户端将不会发送ACK,服务器上的资源就会被浪费。

总结:

三次握手是建立TCP连接的一种可靠机制,它确保了连接的双方都准备好进行通信,并且提供了一个双方都认可的序列号。这不仅提高了连接的可靠性,还增加了安全性,并防止了资源的浪费。两次握手可能无法提供足够的信息来确保双方都准备好进行通信,并且无法防止过时的连接请求。

八十二、说一下tcp粘包是怎么产生的?

TCP粘包是指在使用TCP协议进行数据通信时,发送方发送的多个数据包在接收方接收时粘在一起,形成一个较大的数据包,导致数据无法正确解析。这种现象通常是由于TCP协议的特性和网络环境的复杂性导致的。以下是TCP粘包产生的主要原因:

  1. TCP是面向流的协议: TCP协议本身是面向流的,它不保留数据包边界。TCP负责将数据从发送方传输到接收方,但它不会自动将数据分割成独立的包。因此,在接收方,连续的数据流可能看起来像是单个数据包。

  2. 缓冲区大小: 发送方和接收方的TCP缓冲区大小可能会影响粘包。如果发送的数据超过了接收方缓冲区的容量,剩余的数据可能会被保存在另一个缓冲区中,导致粘包。

  3. 网络环境: 网络延迟、拥塞或其他网络条件的变化可能导致数据包延迟或丢失,从而影响数据包的顺序和完整性。

  4. 发送和接收速率不匹配: 如果发送方发送数据的速率远大于接收方处理数据的速率,接收方可能来不及处理所有接收到的数据,导致多个数据包在接收缓冲区中累积,形成粘包。

  5. 应用层协议: 应用层协议的设计也可能导致粘包。如果应用层协议没有明确定义数据包的边界或大小,接收方可能无法正确地将连续的数据流分割成独立的数据包。

如何解决TCP粘包问题:

  1. 使用应用层协议: 设计应用层协议时,应明确数据包的边界或大小。例如,可以在每个数据包的开始处添加长度字段,以指示每个数据包的大小。

  2. 使用固定长度的数据包: 如果可能,使用固定长度的数据包可以简化数据包的分割和处理。

  3. 使用特殊的分隔符: 在数据包之间使用特殊的分隔符或标记,如换行符或特定的字节序列,以帮助接收方识别数据包的边界。

  4. 使用消息队列: 使用消息队列或中间件(如消息队列服务)可以在一定程度上缓解粘包问题,因为它们通常提供了更明确的数据包边界和大小。

  5. 优化网络条件: 改善网络环境,减少延迟和丢包,可以降低粘包发生的概率。

  6. 调整缓冲区大小: 适当调整发送方和接收方的TCP缓冲区大小,以适应数据传输的速率和网络条件。

  7. 使用其他传输层协议: 对于对粘包非常敏感的应用,可以考虑使用其他传输层协议,如UDP,它保留了数据包边界,但需要应用层协议来处理可靠性和顺序性。

总结: TCP粘包是由于TCP协议的面向流特性、缓冲区大小、网络环境、发送接收速率不匹配以及应用层协议设计等多种因素共同作用的结果。解决粘包问题通常需要在应用层协议设计和网络优化方面进行努力。

相关文章:

赶紧收藏!2024 年最常见 100道 Java 基础面试题(四十一)

上一篇地址:赶紧收藏!2024 年最常见 100道 Java 基础面试题(四十)-CSDN博客 八十一、tcp为什么要三次握手,两次不行吗?为什么? TCP(传输控制协议)使用三次握手&#xf…...

使用自关联方法处理多表关系

使用自关联方法处理多表关系 这里通过省市区之间的关系来解释自关联的情况 在设置地址的过程中 , 不可避免的需要设置 , 省份 ,市以及区 而省市区三者之间的具有一定的关联关系 一个省份对应多个市 一个市对应多个区 如果通过设置主表从表关系则需要设置三张标分别对应省…...

annaconda详细解读换源文件

annaconda换源详细解读文件 annaconda换源详细解读文件 annaconda换源详细解读文件 #踩坑/annaconda换源详细解读通道问题 如何准确使用国内源高效安装GPU版本的Pytorch - 知乎 文件中的custom通道,需要自己手动添加到默认通道里面,记得后面更上/包名…...

AI大模型系列:编写高质量提示(prompt)的实践技巧

AI大模型系列专栏 文章收录于AI大模型系列专栏 文明基石,文字与数字的起源与演变自然语言处理,从规则到统计的演变AI魔法师,提示工程的力量编写高质量提示(prompt)的小技巧编写高质量提示(prompt&#xf…...

汽车EDI:安通林Antolin EDI 项目案例

安通林(Antolin)是一家全球性的汽车零部件制造商,专注于汽车内饰系统和零部件的生产,致力于创新和采用先进的技术。近年来 安通林Antolin 推动其供应商部署EDI系统,使得双方能够通过EDI传输业务单据,极大提…...

今日arXiv最热NLP大模型论文:揭露大语言模型短板,北京大学提出事件推理测试基准

人工智能领域又一里程碑时刻!北京大学、北京智源人工智能研究院等机构联合推出大型事件推理评测基准 。这是首个同时在知识和推理层面全面评估大模型事件推理能力的数据集。 总所周知,事件推理需要丰富的事件知识和强大的推理能力,涉及多种推…...

windows系统安装Ubuntu子系统

安装前先在 控制面板 中打开 程序与功能选项 ,点击 启用或关闭Windows功能: 勾选 适用于 Linux的Windows子系统 和 虚拟机平台 、 Hyper-v 。 重启电脑后再 Microsoft Store Windows应用商店 中下载合适的Ubuntu版本。 运行Ubuntu程序,如出现…...

电脑复制和粘贴的时候会出现Hello!

电脑不管是Microsoft Excel还是Microsoft Word复制之后粘贴过来就出现HELLO,当复制粘贴文件的时候就会出现WINFILE; 具体现象看下面两个图片: 这是因为winfile 文件病毒(幽灵蠕虫病毒),每月的28号发作; 症状…...

AI新视界:探索Baidu Comate的前沿科技

前言 Baidu Comate(智能代码助手)是基于文心大模型,结合百度积累多年的编程现场大数据和外部优秀开源数据,打造的新一代编码辅助工具。拥有代码智能、场景丰富、创造价值、广泛应用等多重产品优势,可实现“帮你想、帮…...

唐山知识付费系统搭建教程,女性创业难吗?2017十佳女性创业故事:黑科技创业“女神”

女性创业难吗?2017十佳女性创业故事:黑科技创业“女神”!创业似乎一直是一个比较热门的话题,女性创业也是一个很有争议的问题。女性创业难吗?看看2017十佳女性创业故事:黑科技创业“女神”。 阿里研究院、中国企业家木兰汇、阿里巴巴创新中…...

Hotcoin Research | 模块化将是大势所趋:拆解模块化区块链的现状和未来

关于模块化区块链叙事的讨论源于Celestia和其代币TIA的亮眼表现。实际上,模块化是未来区块链设计的主要发展方向和大势所趋。模块化区块链就像乐高积木一样,将区块链系统拆分为可重用的模块,通过定制组合可实现不同功能的区块链网络。这种灵活…...

Unity VR在编辑器下开启Quest3透视(PassThrough)功能

现在有个需求是PC端串流在某些特定时候需要开启透视。我研究了两天发现一些坑,记录一下方便查阅,也给没踩坑的朋友一些思路方案。 先说结论,如果要打PC端或者在Unity编辑器中开启,那么OpenXR当前是不行的可能还需要一个长期的过程,必须需要切换到Oculus。当然Unity官方指…...

使用 git rebase 还是 git merge,优缺点

在开发过程中使用 git rebase 还是 git merge,优缺点分别是什么? - 知乎 看一下gerrit的模式 永远rebase 绝对禁用merge 每一个commit都是一个完整的功能 保持清晰直观的提交历史 所以,main 分支是万万不能使用 rebase 的!&#…...

李飞飞团队 AI4S 最新洞察:16 项创新技术汇总,覆盖生物/材料/医疗/问诊……

不久前,斯坦福大学 Human-Center Artificial Intelligence (HAI) 研究中心重磅发布了《2024年人工智能指数报告》。 作为斯坦福 HAI 的第七部力作,这份报告长达 502 页,全面追踪了 2023 年全球人工智能的发展趋势。相比往年,扩大了…...

springboot整合rabbitmq的不同工作模式理解

前提是已经安装并启动了rabbitmq,并且项目已经引入rabbitmq,完成了配置。 不同模式所需参数不同,生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…...

Ansible(二)

一、Playbook基础 1.1 Playbook定义 Playbook其实是Ansible服务的一个配置文件,Ansible使用Playbook的YAML语言配置编写成操作需求,实现对远端主机或策略部署,实现对远端主机的控制与管理。 1.2 Playbook组成 Tasks:任务&…...

【linux】linux工具使用

这一章完全可以和前两篇文件归类在一起,可以选择放一起看哦 http://t.csdnimg.cn/aNaAg http://t.csdnimg.cn/gkJx7 拖更好久了,抱歉,让我偷了会懒 1. 自动化构建工具 make , makefile make 是一个命令,makefile 是一个文件&…...

Docker需要代理下载镜像

systemctl status docker查看docker的状态和配置文件是/usr/lib/systemd/system/docker.service vi /usr/lib/systemd/system/docker.service, 增加如下配置项 [Service] Environment"HTTP_PROXYhttp://proxy.example.com:8080" "HTTPS_PROXYhttp:…...

Debian操作系统简史

一,起源和初衷 Debian项目始于1993年,由Ian Murdock发起,他当时是普渡大学的一名学生。Debian的名字来源于Ian Murdock和他的妻子Debra的组合。Debian的核心理念是创建一个完全自由的操作系统,它遵循严格的自由软件指导原则。 二…...

课堂练习——路由策略

需求:将1.1.1.0/24网段重发布到网络中,不允许出现次优路径,实现全网可达。 在R1上重发布1.1.1.0/24网段,但是需要过滤192.168.12.0/24和192.168.13.0/24在R2和R3上执行双向重发布 因为R1引入的域外路由信息的优先级为150&#xff…...

龙虎榜——20250610

上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Map相关知识

数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...