2024最新网络编程 面试题解析

news2025/2/1 6:43:39

2024最新网络编程 面试题解析
图片来源网络

三次握手和四次挥手

三次握手

三次握手是TCP/IP协议中用于建立可靠连接的过程。具体步骤如下:

  1. 第一次握手:客户端发送一个带有SYN标志的TCP报文段给服务器,请求建立连接,并进入SYN_SENT状态。

  2. 第二次握手:服务器接收到SYN报文段后,若同意连接,则回应一个带有SYN和ACK标志的报文段给客户端,确认已收到客户端的连接请求,同时也向客户端请求连接,服务器进入SYN_RECEIVED状态。

  3. 第三次握手:客户端收到服务器的SYN+ACK报文后,发送一个带有ACK标志的报文段作为确认,至此,客户端和服务器都已确认对方的收发能力,双方建立起一条TCP连接,客户端进入ESTABLISHED状态,随后服务器收到ACK后也进入ESTABLISHED状态。

三次握手是为了确保在不可靠信道上能够可靠地建立连接,防止已失效的连接请求报文突然又传送到服务器而产生错误。

四次挥手

四次挥手是TCP/IP协议中用于断开连接的过程,原因在于TCP连接是全双工的,因此每个方向上的数据传输都需要单独关闭。步骤如下:

  1. 第一次挥手:主动关闭连接的一方(通常为客户端)发送一个带有FIN标志的报文段,表明该方向的数据传输已完成,进入FIN_WAIT_1状态。

  2. 第二次挥手:服务器接收到FIN报文后,发送一个带有ACK标志的报文段,确认收到了关闭请求,但服务器可能还有数据未发送完,因此继续保持连接,客户端进入FIN_WAIT_2状态。

  3. 第三次挥手:当服务器完成数据发送任务后,也发送一个带有FIN标志的报文段给客户端,请求关闭连接,服务器进入LAST_ACK状态。

  4. 第四次挥手:客户端收到服务器的FIN报文后,发送一个ACK报文段作为回应,确认已收到服务器的关闭请求。然后客户端进入TIME_WAIT状态等待一段时间确保服务器收到最后一个ACK,而服务器收到这个ACK后关闭连接。最后,客户端在等待一段时间(通常是2MSL)后,确定没有残留的报文段到达时,也会关闭连接。

之所以需要四次挥手是因为在全双工通信中,每一方都有自己的数据传输通道,关闭连接必须分别在两个方向上进行确认。

TCP粘包/拆包

TCP粘包是指在一个TCP连接中,发送方连续发送的多个数据包可能会合并成一个较大的数据包发送出去,而在接收方看来,本来应该分开的数据包被当作一个大的数据块接收了。

TCP拆包则是相反的现象,即发送方发送的一个大包可能会被TCP协议在传输过程中分割成多个较小的数据包。

TCP粘包/拆包的解决办法

解决TCP粘包/拆包问题主要依靠应用层协议的设计:

  1. 定长消息:每个消息固定长度,不足部分补空格或其他字符。

  2. 消息边界:在每条消息的末尾附加特定的分隔符,接收方通过分隔符来区分不同的消息。

  3. 消息头包含长度字段:在消息前增加一个表示消息长度的字段,接收方可以根据这个长度字段来区分不同的消息。

  4. 协议设计采用面向消息的思路:在应用层设计合适的消息结构,比如添加消息ID、消息长度、消息体等内容,通过解析这些元数据来正确组装和拆分消息。

从浏览器中输入URL到页面加载发生的过程

  1. 域名解析:浏览器查找域名对应的IP地址,首先检查本地缓存,如果没有则通过DNS服务器递归查询。

  2. 建立TCP连接:浏览器使用获得的IP地址与服务器建立TCP连接,这涉及三次握手过程。

  3. 发送HTTP请求:浏览器构建HTTP请求报文(GET或POST),通过建立好的TCP连接发送给服务器。

  4. 服务器处理请求:服务器接收到请求后解析请求报文,调用相应的后台程序进行处理。

  5. 服务器返回响应:服务器完成请求处理后,封装HTTP响应报文并通过TCP连接发送给浏览器。

  6. 浏览器解析渲染页面:浏览器接收响应报文,开始解析HTML内容,并下载CSS、JavaScript和其他资源,按照HTML标准渲染页面。

  7. 连接关闭:数据传输完成后,TCP连接经过四次挥手关闭,也可以选择保持长连接以复用。

长连接和短连接

  • 长连接:在网络通信中,长连接是指在完成一次数据交换后,连接仍然保持打开状态,后续的多次请求都可以沿用同一个连接,无需每次通信都重新建立连接。例如,HTTP Keep-Alive、WebSocket、TCP长连接等。

  • 短连接:短连接则是指每次通信完毕后都会关闭连接,下次通信时需要重新建立连接。典型的例子是HTTP 1.0默认的非Keep-Alive模式,每次请求和响应结束后TCP连接都会被关闭。相较于长连接,短连接减少了闲置连接占用的系统资源,但频繁建立和关闭连接的开销较大。

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

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

相关文章

Radash一款JavaScript最新的实用工具库,Lodash的平替!

文章目录 Lodash 的痛点进入正题--Radash特点 举例几个常用的api 一说lodash应该大部分前端同学都知道吧,陪伴我们好多年的JavaScript工具库,但是自从 ES6 出现后就慢慢退出前端人的视线,能ES6写的代码绝对不会用Lodash,也不是完全…

快速上手Spring Cloud 九:服务间通信与消息队列

快速上手Spring Cloud 一:Spring Cloud 简介 快速上手Spring Cloud 二:核心组件解析 快速上手Spring Cloud 三:API网关深入探索与实战应用 快速上手Spring Cloud 四:微服务治理与安全 快速上手Spring Cloud 五:Spring …

回溯dfs和分支限界bfs

一:拓扑排序 207. 课程表 这道题说白了就是在有向图中找环 拓扑排序实际上应用的是贪心算法。 贪心算法简而言之:每一步最优,全局就最优。 每一次都从图中删除没有前驱的顶点,这里并不需要真正的删除操作,通过设置入度…

centos7配置阿里云的镜像站点作为软件包下载源

目录 1、备份 2、下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/ 3、测试 阿里镜像提供的配置方法:centos镜像_centos下载地址_centos安装教程-阿里巴巴开源镜像站 1、备份 [rootlocalhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentO…

时序预测 | Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测

时序预测 | Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测 目录 时序预测 | Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现CPO-BP冠豪猪算法优化BP神经网络时间序列预测(完整源码…

大电流电感的作用和特点

大电流电感又称为高功率电感,一般是指绕线型电感, 一、主要作用 1.在低频时,起蓄能和滤高频; 2.在高频时,它的阻抗特性表现的很明显。有耗能发热,感性效应降低等现象。 简单来说就是对交流信号进行隔离、…

Bun安装与使用

Bun安装与使用。 它目前无法在windows上直接安装使用,必须通过虚拟机安装。 在win10虚拟机中安装 # 查看内核版本 $ uname -srm Linux 6.1.0-10-amd64 x86_64# 安装unzip解压工具 $ sudo apt install unzip# 下载安装脚本并开始安装 curl -fsSL https://bun.sh/ins…

实现一个Google身份验证代替短信验证

最近才知道公司还在做国外的业务,要实现一个登陆辅助验证系统。咱们国内是用手机短信做验证,当然 这个google身份验证只是一个辅助验证登陆方式。看一下演示 看到了嘛。 手机下载一个谷歌身份验证器就可以 。 谷歌身份验证器,我本身是一个基…

Hyper-V 虚拟机设置静态 IP 和外网访问

文章目录 环境说明1 问题简介2 解决过程 环境说明 宿主机操作系统:Windows 11 专业版漏洞复现操作系:debian-live-12.5.0-amd64-standard 1 问题简介 在 Windows 上用自带的 Hyper-V 虚拟机管理应用创建了一个 Debian 12 虚拟机,配置静态 IP…

Ventoy装机

文章目录 Ventoy安装操作系统问题U盘无法识别问题BIOS设置图片 Ventoy安装操作系统问题 当前使用的m.2(nvm)可以使用在台式机上。 "verification failed sercury violation"这个问题似乎与使用Ventoy创建启动盘并在启用了Secure Boot&#x…

为什么写博客对程序员很重要

之前写过一段时间博客,但是后面半途而废了。最近开始频繁更新,把自己一些学习心得系统得整理后发布出来,希望以后能够坚持写下去。 写博客对程序员有多重要?这个是自己在反思的一个问题,上下班在地铁上想,…

windows下QT如何集成OpenCV

说明 我在windows下使用QT Creator12创建的CMake项目,需要OpenCV的一些功能。由于安装的时候我选择的QT组件都是MInGW的,所以无法使用VS studio版本的dll库。 为什么vs的版本不能用 我安装QT选择的是MinGW版本,本地编译QT工程只能选择MinG…

HarmonyOS实战开发-如何实现一个简单的电子相册应用开发

介绍 本篇Codelab介绍了如何实现一个简单的电子相册应用的开发,主要功能包括: 实现首页顶部的轮播效果。实现页面跳转时共享元素的转场动画效果。实现通过手势控制图片的放大、缩小、左右滑动查看细节等效果。 相关概念 Swiper:滑块视图容…

Matlab-写入mhd和raw医学图像处理格式文件

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 mhd和raw是什么? MHD(MetaImage)和RAW(Raw Image Data)是用于医学图像…

数字化坚鹏:小熊电器面向数字化转型的大数据顶层设计实践培训

小熊电器面向数字化转型的大数据顶层设计实践培训圆满结束 ——努力打造“数据技术营销”三轮驱动的数字化领先企业 小熊电器股份有限公司由李一峰创立于2006年,是一家专业从事创意小家电研发、设计、生产和销售的实业型企业。2019年8月23日正式在深交所挂牌上市。…

XUbuntu22.04之Typora快捷键Ctrl+5不生效问题(二百二十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Discourse 最多允许有几个分类级别

和 DISCUZ 不同,DISCUZ 可以允许分类下面还有分类,再继续分类这种嵌套式分类。 Discourse 最多只允许有 2 个分类。 如果你在已有的分类下再继续分类的话,系统会提示错误: 意思就是子分类不能再分子分类。 Discourse 尽量采取了…

Web前端—(原生JS)歌词滚动效果

歌词滚动效果实现 歌词滚动效果HTML部分CSS部分JS部分解析歌词字符串,得到歌词的对象数组计算在当前情况下,播放器播放到第几秒的情况创建歌词元素设置ul元素的偏移量最后对时间变化的事件进行监听完整JS代码 歌词滚动效果 实现效果如图所示&#xff1a…

PyCharm中配置PyQt5并添加外部工具

Qt Designer、PyUIC和PyRcc是Qt框架下的三个重要工具,总的来说,这三个工具各司其职,相辅相成,能显著提升Qt开发的速度与效率。 Qt Designer:是一个用于创建图形用户界面的工具,可轻松构建复杂的用户界面。…

Photoshoot 2(Java)

Photoshoot 2 题目描述 在一个似曾相识的场景中,Farmer John 正在将他的 N 头奶牛(1≤N≤10^5)排成一排(为了方便将它们按 1⋯1⋯N 编号),以便拍照。 最初,奶牛从左到右按照 a1,a2,⋯,aN 的顺…