网络面试题

简单说下OSI七层协议模型吧。

在这里插入图片描述

  • 应用层:由用户自己规定各个应用之间的消息传递的形式,常见的协议有http、ftp协议等
  • 表示层:在满足用户需求的基础上,为节省传输资源而设置如:压缩文件、加密文件等
  • 会话层:用来创建会话和取消会话
  • 传输层:负责将会话层的消息传递给网络层,常见的协议有tcp、udp协议
  • 网络层:规定通信网内的路由选择方式,常见的协议有ip、ARP、ICMP协议
  • 数据链路层:与数据传输相关的工作
  • 物理层:规定一个机电性能,也包括工作方式单工通信、半双工通信、全双工通信

TCP/IP协议有了解吗?

TCP/IP协议是一系列网络协议的总称,是网络通信的基础骨架,TCP/IP协议模型分为应用层、传输层、网络层、链路层。

数据通信过程:当各个应用之间通信时,传输层的TCP模块给http数据添加tcp头部信息,网络层IP模块给http数据添加ip头部信息,链路层添加以太网首部信息,数据包发送给接收方,依次经过接收方的链路层、网络层、传输层、应用层实现数据通信

  • IP协议:可以判断两台主机是否同属一个子网
  • ARP协议:通过ip地址获取mac地址
  • 路由协议:通过网关将数据包多次转发到对应的子网中

可以详细说一下三次握手以及四次挥手吗?

在这里插入图片描述
客户端状态变化:close->syn_sent->established
服务器状态变化:close->listen->syn_rcvd->established

第一次握手:客户端向服务器发送连接建立请求;
第二次握手:服务器收到连接建立请求后进行应答回复;
第三次握手:客户端收到应答回复后再发送一个确认回复(表示你发送的应答回复我成功收到),确认回复发送后客户端进入连接状态,服务器收到确认回复后进行连接状态;

为什么不能是两次握手

如果是两次握手,客户端没什么变化,依然是收到服务端的应答后才开始进入连接状态而服务端收到客户端的连接请求后就进入连接状态,假设现在网络阻塞,客户端发送连接请求迟迟没有达到服务器,客户端超时重发请求,服务器接收连接请求客户端收到应答,双方建立连接开始通信,通信结束断开连接,而之前第一次发送的连接请求到达服务器,服务器建立连接并等待客户端发送数据,但是客户端已经关闭,这就造成服务器一直等待下去浪费了资源;

四次挥手的状态流程图如下所示:
在这里插入图片描述

客户端状态变化:established->fin_wait_1->fin_wait_2->time_wait(2msl)>close
服务器状态变化:established->close_wait->last_ack_close

第一次挥手:客户端向服务器发送连接释放请求;
第二次挥手:服务器收到连接释放请求进行应答回复,客户端->服务器方向到连接已经释放,客户端不会向服务器发送数据;
第三次挥手:服务器向客户端发送连接释放请求;
第四次挥手:客户端收到连接释放请求后进行应答回复,该过程持续2MSL时间,若期间没有收到服务器的应答请求后就关闭连接;

面试官:“为什么断开连接需要四次而不是三次?“

我们都知道发送fin数据报表示没有数据要发送
客户端第一次发送fin数据报
表示没有数据发送了;服务器回复ack确认数据报;此时服务器不会立马发送fin数据报,因为它还有一些数据要发送等这些数据完了才会发送fin数据报,所以不能一次性发送ack+fin数据报(这里就多出来一次了)。

面试官:“四次挥手主动方为什么需要等待2MSL?“

为了保证服务器能收到客户端的应答回复,如果客户端进行应答回复后就关闭,该应答回复丢失了,服务器等待超时会重新发送连接释放请求,但是客户端已经关闭了,不会做出任何响应,那么服务器永远无法正常关闭;

TCP和UDP协议的区别?(重点掌握)

TCPUDP
发送数据包之间需要建立tcp连接(3次握手)不需要建立连接
有丢包重传机制,保证数据的正确性不能保证数据正确性,单纯的发送数据
对于较大数据包可以进行拆分发送,然后在接收端进行重组;不能对报文进行拆分和重组
面向数据包的面向报文的
tcp的头部是20字节udp是8字节

tcp
udp:qq、微信中的视频语音、

一个网络数据包包括哪些有了解吗?

在这里插入图片描述
一个网络数据包包括数据和头部信息,数据经过tcp模块添加tcp头部,经过ip模块添加ip头部,经过链路层添加mac头部,然后在最前面加报头/起始帧分界符,在末尾加上帧检验序列,这就是一个完整的数据包。

TCP协议的拥塞避免算法有哪些?

HTTP和HTTPS的区别有哪些?(掌握)

HTTPHTTPS
超文本传输协议,文明传输在HTTP的基础上加了SSL协议,加密传输
默认端口80默认端头443
需要申请证书,收费的

面试官:“HTTP请求中的Get和Post方法有哪些区别?”

GETPOST
请求服务器的资源向服务器提交资源
参数挂到url后面,文明传输,通过地址栏进行访问通过表单进行提交,非明文传输,相比较下安全性更高
get请求有长度限制没有长度限制

面试官:“常见的HTTP Code有哪些?”

  • 200:请求成功
  • 302:重定向
  • 304:响应的请求页面来自于浏览器的缓存页面,因为本次请求的页面与上次相比并没有修改;
  • 401:未授权
  • 403:服务器拒绝请求
  • 404:找不到
  • 405:post请求当成get请求
  • 500:服务器错误
  • 502:网关错误
  • 504:网关超时

在这里插入图片描述

面试官:“cookie和session有了解吗?“

cookie:访问网站后在本地存储的一些网站的信息,包括如下内容:
key:
value:
domain:cookie在哪个域名中有效;
path:cookie在哪个路径下有效;
expire_time:cookie的过期时间;
httponly:无法使用js脚本获取cookie;
secure:web页面只有在https请求时候才可以发送cookie;

session

session是保存在服务器上的存放用户信息的hashtable数据结构,当用户第一次发送请求时在服务器上会生成一个唯一标识sessionid和hashtable,sessionid用来唯一标识这个hashtable,并响应给浏览器,当下次再访问服务器的时候,sessionid会放入请求中,服务器取出sessionid然后去所有的sessionid中查找,找到对应的hashtable;

cookie和session的区别

cookiesession
保存在浏览器上保存在服务器上
string类型多种类型:string、list、set、对象等
3k大小没有大小限制
攻击者可以分析cookie进行安全诈骗,不安全不存在敏感信息泄漏,安全性高
支持跨越访问,例如,所有a.com的cookie在a.com下都能用。不支持跨域访问,例如,www.a.com的session在api.a.com下不能用。
可以长期存储,只要不超过它的过期时间都可以存储一般是30分钟过期,但是在关闭浏览器的时候会调用session.invalidate()方法,清除掉session中信息

HTTP1.0,HTTP1.1以及HTTP2.0协议的区别

  • HTTP1.0:无状态无连接的协议,浏览器每次都需要与服务器建立tcp连接,访问完就断开tcp连接,默认使用connection:close
  • HTTP1.1:默认使用connection:keep-alive,避免了每次访问都需要建立连接和断开连接带来的资源消耗,服务器按照客户端请求的先后顺序处理请求,通过content-length字段判断请求的数据是否接受完。
  • HTTP2.0:在http1.1基础上增加了多路复用、头部压缩,二进制分帧和服务器推送等功能,进一步提高数据传输效率

路由汇聚

路由汇聚是指把一组路由汇聚为一个单个的路由广播。路由汇聚优点是可以缩小网络上的路由表的尺寸

举例:
假设下面有4个网络:
172.18.129.0/24
172.18.130.0/24
172.18.132.0/24
172.18.133.0/24

具体计算方式如下:

129的二进制代码是10000001
130的二进制代码是10000010
132的二进制代码是10000100
133的二进制代码是10000101 

这四个数的前五位相同都是10000,不同的位添加0,所以就是10000 000,10进制就是128,加上前面的172.18这两部分相同的位数,网络号就是8+8+5=21,所以,路由汇聚的IP地址就是172.18.128.0,所以最终答案就是172.18.128.0/21

从浏览器中输入一个网址,之后都发生了啥?请尽可能详细的阐述。

dns域名解析
tcp3次握手
发送http请求
服务器响应请求
浏览器获取html代码并解析
浏览器获取静态资源(img、css、js等)
浏览器对页面进行渲染并返回给用户



 - DNS域名解析:查找浏览器dns缓存>>>查找系统dns缓存>>>查找本地域名服务器>>>本地域名服务器发送请求给根域名服务器,根域名服务器返回一个查询域的主域名服务器(如:.com、.org等)>>>主域名服务器查找并返回这个域名对应的ip地址,返回给本地域名服务器>>>本地域名服务器缓存这个域名对应的ip以备下次使用,并返回给用户。
 - tcp连接:拿到域名对应的ip后,通过三次握手与服务器建立tcp连接发送数据。
 - 发送http请求:一般发送的请求方法有GET或者POST,还有一些不常用的DELETE/PUT等。
 - 服务器处理请求并进行响应
 - 浏览器渲染页面:浏览器拿到相应结果进行解析并渲染页面。
 - 连接关闭:页面为了节省建立连接/关闭连接耗费的资源,默认会开启connetcion:keep-alive,持久进行连接,当进行四次挥手的时候就是确切要关闭连接。


https://www.cnblogs.com/wjlog/p/5790627.html

子网掩码的求法

根据划分的子网数:
如欲将B类IP地址168.195.0.0划分成27个子网,则其子网掩码为255.255.248.0

  • 27=11011
  • 该二进制为五位数,N = 5
  • 将B类地址的子网掩码255.255.0.0的主机地址前5位置1(B类地址的主机位包括后两个字节,所以这里要把第三个字节的前5位置1),得到
    255.255.248.0

根据每个子网中的主机数:
如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台,则其子网掩码为:255.255.252.0

  • 700=1010111100
  • 该二进制为十位数,N = 10
  • 将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255
  • 然后再从后向前将后10位置0,即为: 11111111.11111111.11111100.00000000
  • 即255.255.252.0。

XSS跨站脚本攻击

XSS(cross site scripting):攻击者将恶意代码嵌入到web网页中,当用户点击的提交的时候执行了恶意代码,它会盗取用户的资料、控制用户的行为以及对web页面的结构和样式带来破坏,例如:提交一个表单弹出一个窗口,无论如何都无法关闭该窗口;

产生的原因:对客户端发送过来的请求没有进行过滤/编码/转义,比如:请求中带有js代码等

分类:

  • 存储型:恶意代码嵌入到数据库中;
  • 反射型:恶意代码嵌入到url的参数中
  • dom型:前端js漏洞

防御

  • 对重要的cookie设置http only,防止客户端通过document.cookie读取cookie;
  • 对客户端发送过来的请求进行过滤/编码/转义;

CSRF跨站请求伪造

CSRF(cross site request forgery),为转成受信任用户的请求去访问受信任的网站;

在这里插入图片描述注意:恶意网站仅仅是伪装成正常的用户但是无法获取登录态cookie里面的值

CSRF防御

  • token验证:服务器返回给客户端一个token,客户端下次提交的url参数或者表单中带有token;
  • 双cookie验证:利用恶意网站无法获取cookie值,我们取出cookie值将其放到url参数中;

SSRF服务端请求伪造

SSRF是由攻击者构造请求,利用服务端能够其他服务器获取数据处理的能力且没有对请求进行过滤,常用来攻击外网无法访问的内部系统

在这里插入图片描述
发生场景

  • 分享链接
  • 收藏图片、文章
  • 下载图片

防御措施

  • 关闭不用的端口
  • 设置ip黑名单
  • 禁用不需要的协议
  • 对错误信息进行统一处理

SQL注入

把sql命令注入到web表单或者url请求参数后面,到达的一种欺骗服务器的效果;例如:or 1=1完成身份的验证和授权;

防御手段

  • 使用#,不要使用$,#具有预编译的效果;
  • 使用较为安全的存储过程;
  • 对输入的数据类型进行检查;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前撤步登哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值