计算机网络面试相关

计算机网络

· 网络模型多层结构

OSGI模型:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2CwJ3BR7-1631952602006)(en-resource://database/807:1)]
TCP-IP模型:
应用层(对应OSI的前三层)->传输层->网络层->数据接入层

· TCP验证可靠性

TCP提供一种面向连接的、可靠的字节流服务
①使用验证码校验和(checksum计算方法)检测报文段的错误
②使用序号及ACK应答机制
③使用确认和计时器及重传机制检测丢包延时并重复发送
④给数据分包并进行排序,并使用累积确认保证数据的顺序不变和非重复
⑤TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制

注意:TCP 并不能保证数据一定会被对方接收到,因为这是不可能的。TCP 能够做到的是,如果有可能,就把数据递送到接收方,否则就(通过放弃重传并且中断连接这一手段)通知用户。因此准确说 TCP 也不是 100% 可靠的协议,它所能提供的是数据的可靠递送或故障的可靠通知

**TCP头部报文:**源端口、目标端口、序列码seq、应答码ACKnum、各种状态码位(如ACK/SYN/FIN等)、验证码checknum
头部和正文之间使用回车符和换行符分割
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p81sZdoO-1631952602009)(en-resource://database/620:1)]

验证码计算方式:按两字节划分成一个十六进制的十六位的数,然后两两组成四位,将组成的数相加,高十六位加到低十六位上直至小于32位,取反即为验证码。校验方式:验证码和其他报文相加最后取反看是不是为0.

· TCP三次握手
  • 第一次(SYN=1,seq=x):
  • 客户端发送SYN标志为1的包,指明打算链接的服务器接口以及初始序号x。发送完毕后,客户端进入SYN_SEND 状态。
  • 第二次(SYN=1.ACK=1,seq=y,ACKnum=x+1):
  • 客户端发送确认包,SYN标志位和ACK标志位均为1,确认序号ACKnum为x+1。发送完毕后,服务器端进入 SYN_RCVD 状态。
  • 第三次(ACK=1,ACKnum=y+1):
  • 发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP握手结束。
· TCP四次挥手
  • 第一次(FIN=1,seq=x):
    客户端表明自己已经没有要发送的数据了,但仍然可以接收数据。
    发送完毕后,客户端进入 FIN_WAIT_1 状态。
  • 第二次(ACK=1,ACKnum=x+1):
    服务器端确认客户端的 FIN包,发送一个确认包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态,等待服务器端关闭连接。
  • 第三次(FIN=1,seq=y):
    服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN置为1。发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK。
  • 第四次(ACK=1,ACKnum=y+1):
    客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT,等待可能出现的要求重传的 ACK包。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED状态。
· 三次握手四次挥手相关问题
  • 如果只有两次握手:可能会有死锁,已经过期的第一次握手报文等通话结束后再次传输过去/如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认
  • 为什么需要四次挥手:关闭连接时,当服务器收到第一次挥手的请求时,可能还有需要传输的数据,所以ack应答报文和din关闭连接请求需要分开发送。
  • TIME_WAIT 和 CLOSE_WAIT 的区别。TIME_WAIT状态就是用来重发可能丢失的ACK报文。TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。
· TCP中如果链接建立后服务器故障了怎么办

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

· 泛洪攻击
  • SYN泛洪:攻击者在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包(第一次握手),服务器回复确认包,并等待客户的确认(第二次握手)。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。讲人话:让服务器不断进行第二次握手。
· HTTPS:http+ssl

客户端发起HTTP请求->传送CA证书(公钥)
客户端解析证书,如果证书没问题,生成一个随机值并用证书对该随机值加密->传送加密后的随机值,让服务端得到,之后通信就用这个随机值进行加密解密->服务端解密信息获得该随机值,然后把该内容通过该值进行对称加密,该随机值即为私钥->客户端用私钥解密

HTTP1.0 1.1 2.0 HTTPS区别

影响HTTP速率的主要因素:①带宽②延迟(主要是浏览器阻塞、DNS解析、握手消耗)

1.1新增的内容:缓存处理(如缓存版本控制Etag)、Range头域(允许只请求资源的某个部分)、新增了一些错误通知、新增HOST头、长连接

和HTTPS的区别:HTTPS要申请CA证书、HTTP允许在TCP协议上而HTTPS允许在SSL/TLS之上(SSL/TLS也是运行在TCP上的)

HTTP2.0区别:采用二进制解析、多路复用(每个request使用一个ID,一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面)、header压缩(使用encoder减少header大小,并且通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。)

· 说说你知道的几种 HTTP 响应码,比如 200, 302, 404。

1xx:信息,请求收到,继续处理
2xx:成功,行为被成功地接受、理解和采纳
3xx:重定向,为了完成请求,必须进一步执行的动作
4xx:客户端错误,请求包含语法错误或者请求无法实现
5xx:服务器错误,服务器不能实现一种明显无效的请求
200 ok 一切正常
302 Moved Temporatily 文件临时移出
404 not found

· 当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤

DNS解析->端口分析->TCP三次握手->发送HTTP请求->服务器处理请求->返回报文->浏览器解析->链接关闭

·Http 请求 get 和 post 的区别以及数据包格式。

GET一般用于请求数据,所带的参数一般放在url中作为路径参数,POST一般用于发送数据到服务器来创建/更新资源,所带的参数一般放在表单里
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1w3d0gAU-1631952602011)(en-resource://database/661:1)]

·Http请求报文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLAeoeTF-1631952602013)(en-resource://database/662:1)]

  1. 请求行:由请求方法字段、url字段和http协议版本组成,如GET /index.html HTTP/1.1
  2. 请求头部:由关键字-值对组成,比如User-Agent、Accept等等
  3. 空行:用于分割请求头和请求数据
  4. 请求数据:比如POST方法需要客户填写表单的场合
·Web缓存机制

浏览器缓存从新鲜度校验值两个维度来规定浏览器是否可以直接使用缓存中的副本,还是需要去源服务器获取更新的版本。
新鲜度(过期机制):也就是缓存副本有效期。一个缓存副本满足以下条件之一,浏览器会认为它是有效的,浏览器会直接从缓存中获取副本并渲染:

  1. 含有完整的过期时间控制头信息(HTTP 协议报头),并且仍在有效期内;
  2. 浏览器已经使用过这个缓存副本,并且在一个会话中已经检查过新鲜度;

校验值(验证机制):服务器返回资源的时候有时在控制头信息带上这个资源的实体标签 Etag(Entity Tag),它可以用来作为浏览器再次请求过程的校验标识。如过发现校验标识不匹配,说明资源已经被修改或过期,浏览器需求重新获取资源内容。

·RPC和HTTP

RPC:底层一般是TCP通信,自定义数据格式,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型
HTTP:基于原生TCP通信,是一种网络传输协议,规定了数据传输的格式,消息封装臃肿
总结:对比RPC和http的区别
1 RPC要求服务提供方和服务调用方都需要使用相同的RPC技术(可以跨语言了),而http无需关注语言的实现,只需要遵循rest规范
2 RPC可以自定义请求和数据格式,HTTP规定了数据的传输格式
3 RPC需要满足像调用本地服务一样调用远程服务,也就是对调用过程在API层面进行封装。Http协议没有这样的要求,因此请求、响应等细节需要我们自己去实现。
4 速度方面RCP占优(HTTP封装的内容更臃肿)、灵活方面HTTP占优

常见的多系统交互方式:RPC、http、数据库共享数据、分布式缓存
rpc协议:包含序列化协议、传输协议(HTTP或TCP)、call ID映射(用来确定需要调用的函数)
涉及的技术:动态代理(生成client stub等)、序列化(如protobuf)、NIO
RPC流程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rh2hhcV1-1631952602015)(en-resource://database/803:1)]
RPC 服务端通过RpcServer去导出(export)远程接口方法,而客户端通过RpcClient去导入(import)远程接口方法。
客户端像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy。
代理封装调用信息并将调用转交给RpcInvoker去实际执行。在客户端的RpcInvoker通过连接器RpcConnector去维持与服务端的通道RpcChannel,并使用RpcProtocol执行协议编码(encode)并将编码后的请求消息通过通道发送给服务端。
RPC 服务端接收器RpcAcceptor接收客户端的调用请求,同样使用RpcProtocol执行协议解码(decode)。解码后的调用信息传递给RpcProcessor去控制处理调用过程,最后再委托调用给RpcInvoker去实际执行并返回调用结果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4JVEIapy-1631952602016)(en-resource://database/805:1)]

· FTP和HTTP

HTTP是面向网页的,而FTP是面向文件的。

FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。命令链路一般适用21端口来打开,数据链路的建立分为主动和被动,主动方式由客户端告诉服务器“我打开了xx端口用于连接数据链路”,被动方式则由服务器告诉客户端“我打开了xx端口”

· 协议

应用层

HTTP协议
FTP协议
DNS协议:通过域名寻找对应IP
DHCP协议:是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码
RIP、OSPF:都是用来寻址的,OSPF是dijstra算法,RIP是距离向量算法

传输层
TCP协议、UDP协议

网络层:
IP协议
ICMP:用于传递控制消息,如网络通不通、主机是否可达、路由
ARP:使用IP地址映射MAC地址

· 链路层的通信冲突处理

Aloha:随机时间后再重传
载波多路监听:1持续–一直等待(如Mac);不持续–随机时间重传;p持续–概率为p会重传
token ring:拿到口令才能发送
MACA:简单的握手(如802.11)

· 路由选择算法
  • 泛洪:
    只要收到消息就往所有邻接点转发
  • Dijstra算法:OSPF协议
    能过获取某个节点到其他任意节点的路径。 从A点开始,把A加入集合–>更新forward表设置长度都为无穷,找到集合内距离向外最小的那个点,把对应的点加入集合–>再次更新forward表直到所有点都在集合中。
    特点:对计算要求较大,有节点短路能迅速识别问题
  • 距离向量路由算法:RIP
    每个节点都只有它到相邻节点的表,然后交换forward表来更新信息
    特点:对计算要求较小,适合小型网络,但一个节点断掉需要过很久才会知道,在关键链路断掉后系统就会崩溃
  • 链路状态:
    每个节点都给出自己到邻接点的cost表,每个节点都计算出当前拓扑结构–>每个节点都是用Dijstra–>有个节点断掉后马上更新forward表
· OSPF和RIP区别

基于的算法不同:RIP是基于距离向量,OSPF是基于链路状态
工作核心不同:RIP数跳数,OSPF计算权重
发送对象不同:RIP仅和相邻路由器交互信息,OSPF和局域网中所有其他路由器交换信息
发送时间不同:RIP是以一定的时间周期,OSPF在网络刚启动计算第一次路由表时会发,后续只有当链路状态改变时才会以泛洪方式发送断路信息

RIP:路由器接受到相邻路由器发送来的路由信息,会与自己的路由表中的条目进行比较,如果路由表中已经存在这条路由信息,路由器会比较新接收到的路由信息是否优于现在的条目,如果优于现在的条目,路由器会用新的路由信息替换原有的路由条目。反之,则路由器比较这条路由信息与原有的条目是否来自同一个源,如果来自同一个源,则更新,否则就忽略这条路由信息。

· TCP和UDP

https://www.cnblogs.com/fundebug/p/differences-of-tcp-and-udp.html
TCP面向连接,可靠,基于字节流,而UDP不面向连接,不可靠,基于数据报。
TCP对系统资源消耗较多,因为它要维护链接状态、提供丢包重传机制、拥塞控制、校验码
TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OtyCUD1I-1631952602016)(en-resource://database/843:1)]
什么时候用udp
要保证信息十分安全可靠、不允许任何错误发生:UDP
少量数据传输:UDP
大量数据传输:TCP
对实时性要求较高:UDP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值