网络相关-面试高频

news2024/11/19 21:26:31

网络

当前的应用系统主要分两大类,一类是C/S(Client/Server)客户端/服务器架构的,一类是B/S(Browser/Server)浏览器/服务器架构的[3],例如:PC上安装的QQ程序是典型的C/S架构中的客户端程序;通过在浏览器中输入淘宝的网址打开淘宝的主页,就是典型的B/S架构。 无论是哪一种,都需要和远端的服务器进行网络通信和数据交互,同时,服务器之间也需要进行通信,一旦通过网络进行通信,就会不可避免地出现各种网络问题或网络故障,比如DNS服务器、路由器、交换机、集线器等,可能是多个原因引起的,需要逐步地进行排查。

网络问题主要有两大类,一类是客户端与服务器无法建立连接的问题(网络不通、客户端使用了错误的地址或者端口、服务器没有开启监听端口、中间的网络设备故障了、中间的网络设备启动了部分安全规则将数据包拦截等),一类是建立连接后有网络延时或严重丢包问题。对于网络不稳定的场景,尽量使用网线连接路由器;对于网络设备拦截数据包的场景,查看安全规则。要排查网络通信过程中遇到的一系列网络问题,需要掌握一些基础的网络知识,了解一些常用的网络命令,必要时要使用wireshark进行抓包分析

OSI七层模型和TCP/IP四层模型

OSI七层模型的全称为开放式系统互联通信参考模型(Open System Interconnection Reference Model)

TCP/IP的全称为传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol),它是一组用于实现网络互连的通信协议。也有人将物理数据层拆开变成五层结构,一般我们使用的是四层

应用层:直接为用户的应用进程(例如电子邮件、文件传输和终端仿真)提供服务。;使用UDP的应用层协议:DNS/DHCP

运输层:报文段/用户数据报。负责向两台主机中进程之间的通信提供通用的数据传输服务;

网络层:数据报,负责为分组交换网上的不同主机提供提供连接和路径选择;

数据链路层:,对比特流的功能的加强,提供错误检测和纠正,以确保数据的可靠传输。

物理层:传输比特流,定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。

在这里插入图片描述

从wireshark中抓到的数据包中能看到每一层的数据信息,如下所示:

在这里插入图片描述

数据进入TCP/IP协议的封装过程

最上面的应用层的数据,进入TCP/IP协议栈时的封装过程如下:经过传输层时,会加上TCP头部;经过网络层时,会加上IP头;经过数据链路层时,会加上以太网头。对于数据接收端,会按照相反的方向,将各层的头部剥离掉,最终到上层的数据就是发送端应用层的数据。

在这里插入图片描述

协议与端口

此处讲的端口是TCP或UDP通信中数字端口号,要进行TCP或UDP通信时,除了要有IP,必须要有端口。操作系统会有很多默认端口,是留给指定的协议使用的

在这里插入图片描述

UDP:NFS:远程文件服务器。RIP:路由信息协议。DHCP:动态主机配置协议。IGMP:网际组管理协议。

对于TCP,需要先绑定目标端口(调用bind),再开启对目标端口的监听(调用listen),准备接收客户端的请求。 对于UDP,是无连接的,只需要绑定端口,不需要开启对端口的监听。有时即使程序开启了端口,可能也连接不上,可能是路由器或者防火墙禁用了该端口,导致发给该端口的数据(包括连接请求)都被拦截了,此时需要在网络环境中放行该端口,即不再拦截与该端口相关的数据。

在这里插入图片描述

如何判断远端服务器的端口有没有开启监听,有个简单的方法,只要使用Telnet命令去测试即可,比如telnet 192.168.102.176 7800。如果远端的7800端口没有开启监听,就是显示连接失败。如果cmd窗口中提示找不到Telnet,需要到控制面板->程序与功能->启用和关闭Windows功能中开启Telnet客户端,

TCP的三次握手与四次挥手

  1. TCP头的构成
  • 源端口和目标端口:源端口是该包数据发送者的端口,目标端口是这包数据要发送到的目的端口。
  • (包)序号:当前数据包的包序号Seq序号,占4字节(32bit),用来标识从TCP源端向目的端已经发送了多少字节的数据,发起方发送数据时对此进行标记。包序号的最大值是65535,如果达到最大值,则会从0开始重新计数。
  • 确认号:Ack序号,占4字节(32bit),只有ACK标志位为1时,该确认序号字段才有效在TCP中,接收端收到发送端发来的数据后会给客户端回一个ACK确认包,确认收到数据了,这就是TCP的ACK机制。
  • URG紧急:当 URG = 1 时,表明此报文段中有紧急数据,是高优先级的数据,应尽快发送,不用在缓存中排队。

ACK确认:仅当 ACK = 1 时确认号字段才有效,当 ACK = 0 时确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置为 1。

PSH推送:接收方收到 PSH = 1 的报文段时,就直接发送给应用进程,而不用等到整个缓冲区都填满了后再向上传送。

RST复位:当 RST = 1 时,表明 TCP 连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。

SYN同步:SYN = 1 表示这是一个连接请求或连接接受报文。当 SYN = 1 而 ACK = 0 时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使 SYN = 1 且 ACK = 1。

FIN终止:用来释放一个连接。当 FIN = 1时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接。

在这里插入图片描述

  1. 三次握手
  • 客户端SYN = 1 连接请求
  • 服务器收到客户端发来的SYN包,给客户端回ACK确认包,SYN = 1 ,ACK=1
  • 客户端收到服务器的ACK包,并给服务器发送一个ACK确认包ACK=1 ,(SYN = 0)

此时,TCP连接建立,established

如果没有连接上,却可以ping通(网络是通的),服务器丢了RST包,一般是端口的问题。

在这里插入图片描述

  1. 为什么要三次握手

tcp在握手过程中并不携带任何数据,而是在三次握手完成之后,才会进行数据的传递

  • 确定双方发送和接收能力正常,并同步连接双方的初始化序列号,为之后的可靠性传输做准备。而两次握手只有服务端对客户端的起始序列号做了确认,但客户端却没有对服务端的初始序列号做确认,不能保证传输的可靠性
  • 为了防止已经失效的连接请求报文突然又传送到了服务端,因而产生了错误。客户端发起了一个连接请求,但是因为一些原因请求并未及时传递到服务器。而客户端因为长时间收不到服务器的就认为本地连接请求失败,然后就去做别的事了。而过了一段时间,之前的请求到达了服务器,服务器收到请求进行一系列操作后返回给客户端并等待客户端的响应,客户端此时并未响应服务器端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。若采用三次握手,服务器端没有收到来自客户端的再此确认,则就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。
  1. 四次挥手

浏览器向服务器发送报文Fin=1,Ack=z,Seq=x),表示客户端请求报文已经发送完了,准备关闭了。并进入到FIN_WAIT_1状态。
服务器收到客户端的断开请求后,发送确认报文(Ack=x+1,Seq=z),表示统一关闭。此时主机进入FIN_WAIT_2状态。
服务器在发送完数据以后,也会向客户端发送断开连接的报文(Fin=1,Ack=x,Seq=y),表示我没有响应数据要传了,准备关闭了。此时进入到LAST_ACK状态
客户端收到服务器的关闭请求后,会发送一个确认报文(Ack=y+1,Seq=x),表示同意关闭。服务器收到客户单的确认报文后关闭连接。而浏览器在等待一段时间后未收到回复,则正常关闭。

  1. SYN包攻击

SYN 包攻击是指利用 TCP 需要三次握手的特性,攻击者伪造 SYN 报文向服务器发起连接,服务器在收到报文后用 ACK 应答,但之后攻击者不再对该响应进行应答,造成一个半连接。最终会导致服务器连接资源耗尽,导致正常的 SYN 请求因为队列满而被丢弃,使得正常用户无法访问。

TCP与UDP的区别

在这里插入图片描述

TCP是可靠的:面向连接的,需要建立连接后才能收发数据,TCP在收发数据时有ACK机制,即数据接收方收到数据后会给数据发送方回一个ACK确认包,表示已经收到对方的数据,如果数据发送方没收到ACK包就会触发丢包重传机制

TCP是有序的:数据到达传输层时TCP协议会将乱序的包按前后顺序重组,即排好顺序后再投递给应用层

常用的网络命令

ping命令:判断是否连接到远程的地址及端口

telnet:检查服务器上的端口有没有开启监听

ipconfig /all:查看网卡的配置信息,比如IP地址,子网掩码和默认网关等

ipconfig /flushdns命令,用来清除系统中的DNS缓存

netstat命令:查看本机的网络连接与端口占用情况;具体使用netstat /?去查看详细说明

route:主要用来查看路由表、添加/删除路由 ,使用route /?

ARP:主要用来显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表

tracert命令:可以追踪访问目标地址所经历的网络节点

TCP的心跳机制和丢包重传机制

TCP心跳检测是通过定时在链路上发心跳包去保持链路的活性(keepalive),这样链路中的网络设备就不会因为链路上有段时间没有数据在跑,将链路强行断开了,libwebsockets内部的心跳检测,实际上使用的是TCP/IP协议栈的心跳检测

对于TCP连接,数据发送方将数据发出去后,会启动一个定时器,等待接收端回ACK确认包,如果在指定的时间内没有收到ACK确认包,就会触发TCP的丢包重传机制。如果发送重传包后还是没收到ACK,下一次的重传时间间隔会加倍,当重传次数达到系统上限(Windows默认的上限是5次,Linux默认的上限是15次)后,协议栈就认为网络出故障了,协议栈会直接将对应的连接关闭了。

TCP的滑动窗口、流量控制、拥塞控制

滑动窗口机制

ACK确认包的缺点:数据包的往返时间越长,通信的效率就越低,因此引入窗口:就可以指定窗口大小,窗口大小(Window)就是指无需等待确认应答,而可以继续发送数据的最大值。

通常窗口的大小是由接收方的决定的,发送方发送的数据大小**不能超过(约等于)**接收方的窗口大小,否则接收方就无法正常接收到数据

在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。

可用窗口大 小= SND.WND -(SND.NXT - SND.UNA)

在这里插入图片描述

流量控制

如果发送方一直无脑的发数据给接收方,但接收方处理不过来,那么就会导致触发重发机制,从而导致网络流量的无端的浪费。

避免「发送方」的数据填满「接收方」的缓存,但是并不知道网络的中发生了什么。

拥塞控制

在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等,这时 TCP 就会重传数据,但是一重传就会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这个情况就会进入恶性循环被不断地放大….

拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络

当 cwnd < ssthresh 时,使用慢启动算法。
当 cwnd >= ssthresh 时,就会使用「拥塞避免算法」:每当收到一个 ACK 时,cwnd 增加 1/cwnd。当 8 个 ACK 应答确认到来时,每个确认增加 1/8,8 个 ACK 确认 cwnd 一共增加 1,于是这一次能够发送 9 个 MSS 大小的数据,变成了线性增长。

在这里插入图片描述

抓包与网络包分析

  • Windows-Wireshark抓包
  • Linux-rcpdump命令抓包

HTTP是什么,HTTP和HTTPS的区别是什么

http是超文本传输协议,应用:被用于在Web浏览器和网站服务器之间传递信息,以明文方式发送内容,不提供任何方式的数据加密

优点

  • 支持客户/服务器模式
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
  • 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
安全性默认端口性能费用
HTTP明文传输,不安全80较高
HTTPS使用了SSL/TLS协议进行了加密处理,更安全443需要设计加密以及多次握手,较低高,SSL证书的价格随功能变化

HTTP请求 get和post的区别

:HTTP协议中的两种发送请求的方法

  • get比post更快:get会将数据缓存起来,post请求包含更多的请求头
  • 主要区别

GET产生一个TCP数据包;POST产生两个TCP数据包。:GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志以及浏览器浏览记录中)

(2)post发送的数据更大(get有url长度限制)

(3)post能发送更多的数据类型(get只能发送ASCII字符)

(4)post比get慢

(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据

GET在浏览器回退时是无害的,而POST会再次提交请求

HTTP报文段是什么样的

HTTP报文段:有请求和响应两种,基本格式主要如下

  • 起始行:请求/响应行,描述请求或响应的状态

请求起始行包括:请求方式(GET)+ 请求的资源在服务器中的相对路径(URI) + HTTP的版本

响应起始行:在最后加了状态码,表示本次请求的处理结果

  • 头部字段(header):请求/响应头,以 key:value 的形式展示
  • 空行(CRLF):区分两者边界,只有第一行算,若有多个空行,则其他行视为body
  • (body):实际要传输的数据,可以是文本,也可以是图片、文件、视频等二进制数据

一个普通的get请求:

在这里插入图片描述
在这里插入图片描述

HTTP状态码

  • 100~199表示消息,请求已收到继续处理
  • 200~299表示成功: 200—响应成功 • 206:断点续传,或者是视频文件等大文件的加载
  • 300~399表示资源重定向:301—永久重定向会缓存(换了新的url),302-临时重定向不会缓存,307-临时重定向
  • 400~499表示客户端请求出错:400—客户端请求语法错误,403—服务器拒绝提供服务(内网IP) 404:客户端的请求有错误
  • 500~599表示服务器端出错 500—服务器端出现错误 • 503:服务器停机维护 504:网关超时

☆在浏览器输入url地址到显示主页的过程

**DNS解析——**解析域名,获取对应的ip地址,url(包括因特网服务类型,主机,域名,端口,路径,文件名)
TCP连接——TCP三次握手:
浏览器发送http请求:行头空体
服务器处理请求并返回http报文:
浏览器解析返回的数据并渲染页面:
断开连接:TCP四次挥手:

浏览器输入URL到网页完全呈现的过程 - 简书 (jianshu.com)

计算题

主机数、子网掩码、网络地址

在这里插入图片描述

参考链接

【网络入门】详解常用的基础网络知识(面试笔试常考内容)_dvlinker的博客-CSDN博客_网络基础

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

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

相关文章

C# Onnx 阿里达摩院开源DAMO-YOLO目标检测

效果 模型信息 Inputs ------------------------- name&#xff1a;images tensor&#xff1a;Float[1, 3, 192, 320] --------------------------------------------------------------- Outputs ------------------------- name&#xff1a;output tensor&#xff1a;Float…

人工智能-优化算法之动量法

对于嘈杂的梯度&#xff0c;我们在选择学习率需要格外谨慎。 如果衰减速度太快&#xff0c;收敛就会停滞。 相反&#xff0c;如果太宽松&#xff0c;我们可能无法收敛到最优解。 泄漏平均值 小批量随机梯度下降作为加速计算的手段。 它也有很好的副作用&#xff0c;即平均梯度…

HMM(Hidden Markov Model)详解——语音信号处理学习(三)(选修一)

参考文献&#xff1a; Speech Recognition (Option) - HMM哔哩哔哩bilibili 2020 年 3月 新番 李宏毅 人类语言处理 独家笔记 HMM - 6 - 知乎 (zhihu.com) 隐马尔可夫&#xff08;HMM)的解码问题维特比算法 - 知乎 (zhihu.com) 本次省略所有引用论文 目录 一、介绍 二、建模单…

解决uview中uni-popup弹出层不能设置高度问题

开发场景&#xff1a;点击条件筛选按钮&#xff0c;在弹出的popup框中让用户选择条件进行筛选 但是在iphone12/13pro展示是正常&#xff0c;但是切换至其他手机型号就填充满了整个屏幕&#xff0c;需要给这个弹窗设置一个固定的高度 iphone12/13pro与其他型号手机对比 一开始…

关于使用若依,并不会自动分页的解决方式

关于使用若依,并不会自动分页的解决方式 如果只是单纯的使用一次查询list,并不会触发这个bug 例如: 但是我们如果对里面的数据进行调整修改的话就会触发这个bug 例如: 此时可以看到我对数据进行了转换!!!,这时如果超出数据10条,实际我们拿到的永远是10条,具体原因这里就不展…

ora.LISTENER.lsnr状态为Not All Endpoints Registered

客户的监控反馈有个监听无法连接&#xff0c;登录环境检查发现ora.LISTENER.lsnr的状态为Not All Endpoints Registered&#xff0c;如下 [rootdb2 ~]# crsctl status res -t -------------------------------------------------------------------------------- NAME …

什么是requestIdleCallback?和requestAnimationFrame有什么区别?

什么是requestIdleCallback? 我们都知道React 16实现了新的调度策略(Fiber), 新的调度策略提到的异步、可中断&#xff0c;其实就是基于浏览器的 requestIdleCallback和requestAnimationFrame两个API。 在 JavaScript 中&#xff0c;requestIdleCallback 是一个用于执行回调函…

Go 谈论了解Go语言

一、引言 Go的历史回顾 Go语言&#xff08;通常被称为Go或Golang&#xff09;由Robert Griesemer、Rob Pike和Ken Thompson在2007年开始设计&#xff0c;并于2009年正式公开发布。这三位设计者都曾在贝尔实验室工作&#xff0c;拥有丰富的编程语言和操作系统研究经验。Go的诞生…

数据结构day6作业

初次进入len100;if(resuillen)不符合条件,执行resultcompetu_date(arr,--len),从此处开始递归. 直到len0: 此时len0; ---result0; ---return arr[0]1; 上一层len1; ---result1---执行语句return (result%2)?(result arr[len]):((result 1)*arr[len]);得到return 1arr[1]3 …

visionOS空间计算实战开发教程Day 10 照片墙

本例选择了《天空之城》的25张照片&#xff0c;组成5x5的照片墙&#xff09;。首先我们在setupContentEntity方法中构建了一个纹理数组&#xff0c;将这25张照片添加到数组images中。其中封装了setup方法&#xff0c;借助于visionOS对沉浸式空间的支持&#xff0c;我们创建了三…

解决:ModuleNotFoundError: No module named ‘qt_material‘

解决&#xff1a;ModuleNotFoundError: No module named ‘qt_material’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named qt_material背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时&#xff0c;报错&…

基于asp.net 消防安全宣传网站设计与实现

目 录 1 绪论 1 1.&#xff11;课题背景 1 1.2 目的和意义 1 1.3主要研究内容 1 1.4 组织结构 2 2 可行性分析 3 2.1技术可行性 3 2.2经济可行性 3 2.3操作可行性 3 2.4系统开发环境 4 3 需求分析 7 3.1性能分析 7 3.2业务流程分析 7 3.3数据流程分析 9 4 系统设计 11 4.1系统…

drawio 流程图以图片保存

随笔记录 目录 1. drawio 介绍 2. 绘制流程图以白底图片保存 2.1 流程图原始图​编辑 2.2 修改配置 2.3 流程图以图片保存 2.4 图片保存后效果展示 1. drawio 介绍 是一款非常强大的开源在线的流程图编辑器&#xff0c;支持绘制各种形式的图表&#xff0c;提供了 Web…

Leetcode2336 无限集中的最小数字

题目&#xff1a; 现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, ...] 。 实现 SmallestInfiniteSet 类&#xff1a; SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。int popSmallest() 移除 并返回该无限集中的最小整数。void addBack(int nu…

[node]Node.js事件

[node]Node.js事件 EventEmitter属性方法error 事件 实例应用简单实例onceremoveListenerlistenerCounterror 事件完整实例 继承 事件循环事件驱动程序 Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列 Node.js 里面的许多对象都会分发事件&#xff1a;一个 n…

从0开始学习JavaScript--JavaScript 单例模式

单例模式是一种常见的设计模式&#xff0c;它保证一个类仅有一个实例&#xff0c;并提供一个全局访问点。在 JavaScript 中&#xff0c;单例模式通常用于创建唯一的对象&#xff0c;以确保全局只有一个实例。本文将深入探讨单例模式的基本概念、实现方式&#xff0c;以及在实际…

linux 磁盘扩容初始化挂载 笔记

目录 说明环境信息前提条件 操作步骤 说明 linux 系统磁盘扩容步骤 环境信息 系统信息&#xff1a;Linux version 4.19.90-23.8.v2101.ky10.aarch64cpu信息&#xff1a;Kunpeng-920 、aarch64、64-bit、HiSilicon 前提条件 有未初始化的用户磁盘操作系统可以支持当前磁盘的…

【Spring系列】DeferredResult异步处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

VC++调试QT源码

环境&#xff1a;vs2017 qt 5.14.2 1&#xff1a;首先我们需要选择我们的源码路径 右键解决方案-》属性-》通用属性-》调试源文件-》在窗口内添加QT下载时的源码**.src文件夹**&#xff0c;这里最好把源码 D:\software\QT\path\5.14.2\Src 源文件里面的Src文件做一个备份出来…