【2023最新】计算机网络面试题【收藏持续更新】

2023-05-16

你好,我是萝卜,我会在本篇文章持续更新关于计算机网络的面试题

最新内容更新日期:2023-04-11

基础

说一下计算机网络体系结构

网络体系结构一般有三种ISO七层模型,TCP/IP四层模型和五层结构

ISO七层模型是理论上的网络通信模型,TCP/IP四层模型是实际上的网络通信模型,五层结构是为了介绍网络原理而折中的网络通信模型

由上至下说一下ISO七层模型和每层的作用

ISO七层模型由上至下是:

  • 应用层:通过应用进程之间的交互来完成特定网络应用,应用层协议定义的是应用进程间通信和交互的规则

  • 表示层:数据的表示、安全、压缩,确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取

  • 会话层:建立、管理、终止会话,是用户应用程序和网络之间的接口

  • 传输层:提供源端与目的端之间提供可靠的透明数据传输,传输层协议为不同主机上运行的进程提供逻辑通信

  • 网络层:将网络地址翻译成对应的物理地址,实现不同网络之间的路径选择

  • 数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路

  • 物理层:建立、维护、断开物理连接

由上至下说一下TCP/IP四层模型每层的作用

TCP/IP四层模型由上至下是:

  • 应用层:用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层

  • 传输层:是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性

  • 网络层:主要负责网络中数据包的传送等,主要解决主机到主机的通信问题

  • 网络接口层:提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等

讲一下ISO七层模型和TCP/IP四层模型中每一层对应的网络协议

TCP

TCP和UDP的概念及特点

TCP和UDP的区别?

TCP和UDP的使用场景有哪些?

TCP如何保证可靠性?

讲一下TCP三次握手

TCP三次握手

主动发起连接请求的一端称为客户,被动连接的一端称为服务器

连接建立前,服务器进程处于LISTEN(收听状态),等待客户的连接请求

过程:

第一次握手:

客户端发送报文段SYN=1,seq=x给服务器

进程状态变化:客户端进程的状态进入SYN-SENT(同步已发送)状态

第二次握手:

服务器发送报文段SYN=1,ACK=1,seq=y,ack=x+1给客户端

服务器在本次握手时为该TCP连接分配缓存和变量

进程状态变化:服务器进程的状态进入SYN-RCVD(同步收到)状态

第三次握手:

客户端发送报文段ACK=1,seq=x+1,ack=y+1给服务器

客户端在本次握手时为该TCP连接分配缓存和变量

进程状态变化:

客户端进程的状态进入ESABLISHED(已建立连接)状态

完成第三次握手后,服务器进程的状态也进入ESABLISHED(已建立连接)状态,可以开始发送数据

为什么要三次握手?两次可以吗?

  • 为了防止服务器端开启一些无用的连接增加服务器开销

首先我们要知道第三次握手的作用:是客户端告诉服务器能够收到服务器所传输的数据。

如果没有了第三次握手出现的结果:假如第二次握手的这个数据包因为网络传输的原因丢失了,丢失之后客户端就一直没有接收到服务器返回的数据包,但是没有了第三次握手,服务器无法确定客户端是否收到了服务器所传输的数据,服务端就认为这个连接是可用的,端口就一直开着,等到客户端因超时重新发出请求时,服务器就会重新开启一个端口连接。这样一来,就会有很多无效的连接端口白白地开着,导致资源的浪费

  • 防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

已经失效的客户端发出的请求信息,由于某种原因传输到了服务器端,服务器端以为是客户端发出的有效请求,接收后产生错误

所以需要第三次握手来确认连接过程:

通过第三次握手的数据告诉服务端,客户端有没有收到服务器“第二次握手”时传过去的数据,以及这个连接的序号是不是有效的。若发送的这个数据是“收到且没有问题”的信息,接收后服务器就正常建立 TCP 连接,否则建立 TCP 连接失败,服务器关闭连接端口。由此减少服务器开销和接收到失效请求发生的错误

第三次握手可以携带数据吗?

可以携带数据,此时客户端已经处于ESTABLISHED(已建立连接)状态。对于客户端来说,它已经建立连接成功,并且确认服务端的接收和发送能力是正常的。

第一次握手可以携带数据吗?

不可以携带数据,第一次握手不能携带数据是出于安全的考虑,因为如果允许携带数据,攻击者每次在SYN报文中携带大量数据,就会导致服务端消耗更多的时间和空间去处理这些报文,会造成CPU和内存的消耗

那么四次握手可以吗?

三次握手已经足够建立可靠连接,没必要多进行一次握手花费更多时间建立连接

分别说一下三次握手中每一次没收到报文会发生什么情况?

第一次握手服务端未SYN报文:

服务端没有任何动作;客户端在一段时间内没有收到服务端发来的确认报文,等待一段时间后会重新发送SYN报文,如果仍然没有回应,会重复这个过程,直到发送次数超过最大重传次数限制,就会返回连接建立失败

第二次握手客户端未收到ACK报文:

客户端会继续重传,直到次数限制;而务端此时会阻塞在accept()处,等待客户端发送ACK报文

第三次握手服务端未收到ACK报文:

服务端同样会采用类似客户端的超时重传机制,如果重试次数超过限制,则accept()调用返回-1,服务端建立连接失败;而此时客户端认为自己已经建立连接成功,因此开始向服务端发送数据,但是服务端的accept()系统调用已经返回,此时不在监听状态,因此服务端接收到客户端发送来的数据时会发送RST报文给客户端,消除客户端单方面建立连接的状态

第二次握手传回了 ACK,为什么还要传回 SYN?

传回ACK是为了告诉客户端传来的数据已经接收无误

而传回SYN是为了告诉客户端,服务端响应的确实是客户端发送的报文

讲一下TCP四次挥手

tcp连接释放的过程称为tcp的四次挥手

第一次挥手:客户端发送释放连接报文FIN=1,seq=u,发送完毕后,客户端进入 FIN_WAIT_1 (终止等待1)状态。

第二次挥手:服务端发送确认报文ACK=1,ack=u+1,seq =v,发送完毕后,服务器端进入 CLOSE_WAIT (关闭等待) 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 (终止等待2)状态。

第三次挥手:在服务器已经没有要向客户机发送的数据后就会进行第三次挥手,服务端发送释放连接报文FIN=1,ACK1,seq=w,ack=u+1(序号w说明在半关闭状态服务器可能又发送了一些数据),发送完毕后,服务器端进入 LAST_ACK(最后确认) 状态,等待来自客户端的最后一个 ACK

第四次挥手:客户端发送确认报文ACK=1,seq=u+1,ack=w+1,客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT 状态,等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime,MSL约为60s)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED(连接关闭) 状态。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED(连接关闭) 状态。

为什么要四次挥手?三次可以吗?

关闭连接时,第一次挥手客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。服务端收到客户端的 FIN 报文时,先回一个 ACK 应答报文(第二次挥手),而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文(第三次挥手)给客户端来表示同意现在关闭连接。你发的FIN报文我收到了,只有等到我服务器所有的报文都发送完了,我才能发送FIN报文,因此服务端的ACK报文和FIN报文不能一起发送,故需要四次挥手。

TCP粘包是什么?怎么解决?

讲一下TCP重传机制

tcp重传机制包括超时重传快速重传带选择确认的重传(SACK)重复SACK四种

超时重传:

超时重传是tcp协议保证数据可靠性的一个重要机制

原理是在发送某一个数据以后开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,就会重新发送数据,直到发送成功为止

快速重传:

快速重传不以时间为驱动,以数据驱动,基于接收端的反馈信息来引发重传

快速重传流程如下:

  • 第⼀份 Seq1 先送到了,于是就 Ack 回 2;

  • 结果 Seq2 因为某些原因没收到,Seq3 到达了,于是还是 Ack 回 2;

  • 后⾯的 Seq4 和 Seq5 都到了,但还是 Ack 回 2,因为 Seq2 还是没有收到;

  • 发送端收到了三个 Ack = 2 的确认,知道了 Seq2 还没有收到,就会在定时器过期之前,重传丢失的 Seq2

  • 最后,收到了 Seq2,此时因为 Seq3,Seq4,Seq5 都收到了,于是 Ack 回 6 。

但是快速重传只解决了超时时间的问题,但是它还存在一个问题,那就是重传的时候是重传之前的一个,还是重传所有的问题

带选择确认的重传(SACK):

TCP 提供了带选择确认的重传(即 SACK,Selective Acknowledgment)以解决应该重传多少个包的问题。

SACK机制就是,在快速重传的基础上,接收方返回最近收到报文段的序列号范围,这样发送方就知道接收方哪些数据包是没收到的。这样就很清楚应该重传哪些数据包。

流程如下:

发送⽅收到了三次同样的 ACK 确认报⽂,于是就会触发快速重发机制,通过 SACK 信息发现只有200~299 这段数据丢失,则重发时,就只选择了这个 TCP 段进⾏重发。

重复SACK:

D-SACK,英文是 Duplicate SACK,是在 SACK 的基础上做了一些扩展,主要用来告诉发送方,有哪些数据包,自己重复接受了。

DSACK 的目的是帮助发送方判断,是否发生了包失序、ACK 丢失、包重复或伪重传。让 TCP 可以更好的做网络流控。

流程如下:

  • 接收⽅发给发送⽅的两个 ACK 确认应答都丢失了,所以发送⽅超时后,重传第⼀个数据包(100-499)

  • 于是接收⽅发现数据是重复收到的,于是回了⼀个 SACK = 100-500,告诉「发送⽅」 100-500的数据早已被接收了,因为 ACK 都到了1000 了,已经意味着1000之前的所有数据都已收到,所以这个SACK 就代表着 D-SACK 。这样发送⽅就知道了,数据没有丢,是接收⽅的 ACK 确认报⽂丢了。

超时重传中的超时重传时间应该设置多大?

讲一下TCP拥塞控制

讲一下TCP流量控制

讲一下TCP可靠传输机制

UDP

IP

HTTP

HTTP请求报文

HTTP响应报文

HTTP状态码有哪些?

HTTP请求方法有哪些?

GET和POST的区别?

HTTPS

其他

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【2023最新】计算机网络面试题【收藏持续更新】 的相关文章

  • 【Win11下载链接已更新|2023/3/7】VMware上安装Windows 11虚拟机

    2021 年 06 月 24 日微软正式发布了 Windows 11 操作系统 相信很多同学对新版的Windows 11操作系统充满好奇 xff0c 新操作系统有很多新特性 在这里就不一一叙述了 有兴趣的同学 xff0c 可以去微软官网查看
  • 2023安装archlinux笔记

    本文只是个笔记 xff0c 不是详细教程 xff0c 仅供参考 安装过程基本与 2021年vmware安装archlinux https blog csdn net lxyoucan article details 115226297 差不
  • IntelliJ IDEA 2023.1 最新变化 【附带ChatGPT教程】

    ChatGPT开源公众号 xff1a https gitee com wy521a astar weixin mp最新变化 2023 1主要更新用户体验编辑器JavaScala分析器版本控制系统构建工具运行 调试框架和技术DockerKub
  • WebStorm 2023.1 最新变化【附带ChatGPT教程】

    ChatGPT开源公众号 xff1a https gitee com wy521a astar weixin mp 观看更新概览视频 在浏览器中打开更新变化 WebStorm 2023 1 最新变化 框架和技术 Astro 支持 备受期待的
  • 2023-03-06 debian11 最小安装记录

    1 镜像准备 xff0c 根据个人需求下载debian 版本 Debian 获取 Debian 2 上传到VSAN 内容库 我这边是在vm里面安装的 xff0c 就直接上传到内容库备用 xff08 根据个人需求存放 xff09 3 分配虚拟
  • Arch Linux安装 2023-04-09

    除特殊场景外 下面所有的 34 34 后都是注释 准备 EFI分区不小于200mb iso版本 archlinux 2023 04 01 x86 64 使用分区工具预留出足够空间 gt 20G 标签为 未分配 安装 连接网络 rfkill
  • Rust交叉编译问题(mac to linux) 2023

    Rust本身是支持跨平台编译的 看资料是只需要简单的跨平台编译命令就好了 一 官方给出的资料是 rustup target add x86 64 unknown linux gnu cargo build release target x8
  • 【Rust 日报】2023-01-15 交互式AI训练模拟器

    预写日志okaywal 基础示例 xff1a 用Checkpointer开一个log xff0c echo传递到Checpointer trait定义的每个函数的信息 let log 61 WriteAheadLog recover 34
  • 【Rust日报】2023-03-06 Rust中的安全性和稳定性

    Rust中的安全性和稳定性 Rust的设计是围绕安全和健全性展开的 粗略地说 xff0c 安全的代码是不使用 unsafe 关键字的代码 xff0c 而健全的代码是不会导致内存损坏或其他未定义行为的代码 但是当涉及到 unsafe 代码时
  • 人工智能轨道交通行业周刊-第36期(2023.2.27-3.5)

    本期关键词 xff1a 智能高铁体系架构 广州港海铁联运 5G R 铁路受电弓 电务信号工 图像压缩 1 整理涉及公众号名单 1 1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS Wor
  • 人工智能轨道交通行业周刊-第40期(2023.3.27-4.2)

    本期关键词 xff1a TACS列车 智能雄安站 火车掉头 高铁供电 AIGC发展史 1 整理涉及公众号名单 1 1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟
  • 2023 New Year‘s Resolution

    This Is Game 2023 New Year 39 s Resolution My 2022 ended with a day of game I am convinced that I am not to blame becaus
  • 2023/5/4总结

    刷题 xff1a 第二周任务 Virtual Judge vjudge net 这一题用到了素筛 然后穷举即可 include lt stdio h gt define Maxsize 500000 int a Maxsize long l
  • 2023/5/7总结

    最近还是在项目上 xff1a 主要实现了 xff1a 把头像的数据传给服务器 xff1a 服务器开一个文件夹接收 发送文件是 xff0c 用字节流传递很容易出错 xff0c 我因此坏掉了很多文件 这样写就没有坏掉 xff0c 之前一直是图片
  • 推荐一款调试工具:深蓝串口网络调试工具(ACOM)2023春季版(2.18.12.30202),一直使用这个,最近更新好快。

    深蓝串口网络调试工具 ACOM 2023春季版 2 18 12 30202 此应用程序支持1M波特率 最高有效波特率受硬件设置的限制 串口数据采集 文本模式发送与接收 HEX模式发送与接收 报文模式 xff0c 数据模式 xff0c 数据管
  • Kubernetes 镜像仓库 k8s.gcr.io 将于 2023 年 4 月 3 日冻结

    公众号关注 奇妙的 Linux 世界 设为 星标 xff0c 每天带你玩转 Linux xff01 2023 年 4 月 3 日 xff0c 旧镜像仓库 k8s gcr io 将被冻结 xff0c Kubernetes 和相关子项目的镜像将
  • 2023年3月计算机三级网络技术备考

    一 专项练习 网络系统结构与设计的基本原则 1 1基础知识 1 1 1 广域网技术的发展 下列关于光以太网技术特征的描述中 xff0c 错误 的是 A 能够根据用户的需求分配宽带 B 以信元为单位传输数据 C 具有保护用户和网络资源安全的认
  • 再见2022,加油2023

    其实变化最大的一点就是 xff0c 这一年自己变成了一个北漂 没有很多的成熟的规划 xff0c 没有很多预算准备来到了北京 那会儿和之前的同事合租 xff0c 也给他添了不少麻烦 最开始到北京的时候 xff0c 因为口罩问题入职前生活状态比
  • 2023-4-23 Windows和Ubuntu使用网线直连搭建局域网

    1 Windows下的配置 xff1a 右键右下角的网络图标 xff08 或者右键网络 属性 xff09 更改适配器设置 以太网 右键属性 TCP IPv4 IP地址 xff08 192 168 1 3 xff09 子网掩码 xff08 2
  • 学python的第十五天---简单数论

    模运算 一 刷题统计 二 快速幂 三 RSA解密 GCD LCM 四 核桃的数量 最小公倍数 五 Hankson 的趣味题 六 寻找整数 素数 七 笨小孩 八 质数 九 分解质因数 模运算 ab mod m a mod m b mod m

随机推荐

  • 利用定时器的输出比较功能产生PWM驱动舵机

    一 定时器基本原理 首先我们来看一下ST官方给出的关于定时器的相关介绍 xff1a xff08 以STM32F103C8T6为例 xff09 STM32F103C8T6 含有 4 个 16 位定时器 xff0c 分别是一个高级定时器 TIM
  • ST-LINK固件升级

    关于st link固件升级注意的问题 在下载调试的过程中 xff0c 程序可能由于st link版本过旧而提示 command not supported 的错误 xff0c 这就要求我们升级st link固件才可以正常下载 但是在升级的过
  • 关于英伟达jetson nano的搭配双目摄像头跑ORB_SLAM2

    1 安装系统 按照商家给的资料安装 xff0c 将Ubuntu18 04LTS镜像拷贝到tf卡中 xff0c 插上jetson nano就可以安装了 2 系统设置 进入系统我先把系统语言设置为中文 xff0c 在右上角的设置中找到系统设置中
  • 双目摄像头(CSI-IMX219)的标定

    1 介绍 网上关于这类标定有挺多教程的 xff0c 但由于这个摄像头的特殊性 xff0c 所以不可能完全安装教程来走 目前来说有3种标定方法 xff1a ROS操作系统来标定 matlab标定 opencv标定 这三种方法我先试了用ROS来
  • 小学生学AD16(入门级别,看这篇就够了)

    1 软件安装 xff1a AD16的安装我就不多介绍了 xff0c csdn一搜一大把 要学一个软件 xff0c 那么软件安装是必经之路 xff0c 不要认为软件安装不重要 xff08 如果你的安装完之后桌面没快捷方式 xff0c 那么可以
  • Arduino串口绘图器双通道绘制

    Serial print val Serial print 34 34 Serial println muBiao 其实只用在两个变量之间加个 xff0c 就行了 参考网址 https www norwegiancreations com
  • 关于神舟笔记本TX8连副屏经常蓝屏的问题

    大概率是3060显卡驱动的问题 xff0c 可以试试重新安装显卡驱动 若还是不行就换个接口 xff0c 不要用hdim的接口 xff0c 那个是直接连3060的 换剩下两个的minidp接口其中一个 xff0c 第一个不要接 xff0c 那
  • 51单片机入门(小学生都能学会)

    序 xff1a 时隔一年 xff0c 我终于从二年级到三年级了 xff01 由于小学三年级这学期要学单片机 xff0c 故写下这篇笔记留下些什么 由于自己也是新手 xff0c 欢迎各位指出本文的各种错误 1 什么是51单片机 为什么要说这个
  • 解决使用WinScp连接Ubantu系统失败的问题---SSH无法连接

    起因 为了互通Linux系统和Windows系统的文件 xff0c 以更好的实现文件管理和资源共享 所以在查阅资料后 xff0c 使用WinScp xff0c WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端 它的
  • 小学生51系列之基础知识

    1 单片机的基本结构 说到基本结构 xff0c 就是指51单片机的硬件组成 51单片机由中央处理器CPU 储存器 定时器 I O端口 组成 其中储存器包含数据储存器 xff08 RAM xff09 和程序储存器 xff08 ROM xff0
  • ros 接入Livox Mid-70

    最近在研究3d避障激光 大疆Livox mid 70 xff0c 记录下接入过程 环境信息 xff1a Ubuntu 18 04 ros melodic 1 livox view 点云可视化 xff08 1 xff09 根据livox mi
  • ROS+opencv实践-二维码识别

    一 安装二维码识别的功能包 sudo apt span class token operator span get install ros span class token operator span melodic span class
  • C语言简单链表详细步骤详解

    43 链表 gt 小阿豪带你写链表 xff01 xff01 xff01 xff01 进入正文 span class token number 1 span 首先 xff0c 先想好自己要创建的链表格式以及最后的的显示界面 xff01 xff
  • 滚球控制系统详解 —— (附核心代码)

    最近练习了17年的国赛题 滚球控制系统 这里展示一下画圆 xff1a 观看完整视频点这里 接下来 xff0c 我来分享一下从搭整体结构到调试完的过程 这是我搭完的整体结构 xff08 缩小版 xff09 不管什么题 xff0c 结构部分还是
  • 【Linux网络编程】你了解TIME_WAIT状态吗?

    在Linux网络编程中 xff0c 我相信大多数人觉得最难理解的就是TCP中的TIME WAIT状态了吧 xff0c 那么TIME WAIT的概念到底是什么 xff0c 有几个类型呢 xff0c 以及在面试中经常会问到的TIME WAIT状
  • 【图解】八幅图带你轻松掌握八大排序(上):冒泡排序、选择排序、插入排序、快速排序

    在算法中 xff0c 八大排序算是最简单的也是重中之重 xff0c 所以掌握好八大排序的思想是非常重要的 xff0c 很多人学排序的时候会觉得似懂非懂 xff0c 本篇文章作者耗时两小时绘制了八大排序的详细图解 xff0c 让大家快速理解八
  • 最详细整理STL之vector基础

    前言 xff1a Vector是一种可以存储任意类型的动态数组 xff0c 属于序列式容器 xff0c 可以用sort对其进行排序 xff0c 底层数据结构是数组 xff0c 可以随机访问元素 Vectors 包含着一系列连续存储的元素 其
  • STL之vector扩容机制

    前言 大家好 xff0c 我是萝卜 上期结尾说到vector的push back操作一般情况下时间复杂度为O 1 xff0c 是否存在特殊情况 那么本期就讲讲vector在容器空间不足时进行push back操作会发生什么 vector作为
  • 求职嵌入式软件开发linux kernel/BSP leader/工程师职位

    个人工作说明 xff1a 目前从事linux系统网络设备的开发工作 xff0c 负责bootloader linux kernel文件系统 xff0c driver移植 xff0c 以及开源app移植 主要技能和过去的经验 xff1a 1
  • 【2023最新】计算机网络面试题【收藏持续更新】

    你好 xff0c 我是萝卜 xff0c 我会在本篇文章持续更新关于计算机网络的面试题 最新内容更新日期 xff1a 2023 04 11 基础 说一下计算机网络体系结构 网络体系结构一般有三种 xff1a ISO七层模型 xff0c TCP