网络协议(三)

从系统层面上,UDP 如何保证尽量可靠?

传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。

  • 实现确认机制、重传机制、窗口确认机制。
  • 如果你不利用linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须实现如下功能:
  • 发送:包的分片、包确认、包的重发
  • 接收:包的调序、包的序号确认
  • 目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。

简述 JWT 的原理和校验机制

JWT: JSON Web token 用于json对象在各方之间安全的传输信息,它是安全可被信任的,因为它是数字签名的。JWT是目前最流行的跨域身份验证解决方案

JWT工作原理:

  1. 应用或客户端向授权服务器请求授权
  2. 当授权被许可后,授权服务器返回一个access token给应用
  3. 客户端存储token,并且在随后的每一次请求中都带着它
  4. 服务器校验token并返回数据

HTTP 的方法有哪些?

  1. GET方法:获取资源

  2. POST方法:传输实体主题

  3. PUT方法:传输文件

  4. HEAD方法:获取报文首部

  5. DELETE方法:删除文件

  6. OPTIONS方法:询问支持的方法

TCP 长连接和短连接有那么不同的使用场景?

数据库的连接用长连接, 如果用短连接频繁的通信会造成 socket 错误,而且频繁的 socket创建也是对资源的浪费。网络游戏应用都是长连接

WEB 网站的 http 服务一般都用短链接

什么是 ARP 协议?简述其使用场景

地址解析协议 ARP:知道IP地址请求硬件地址(MAC)

反向地址转换协议 RARP:将局域网中某个主机的物理地址转换为IP地址

ARP使用场景

1、发送方是主机H1,要把IP数据报发送到另一个网络上的另一个主机H2.这时H1发送ARP请求分组(在网1上广播),找到目的主句H2的硬件地址;
2、发送方是主机H1,要把IP数据报发送到另一个网络上的另一个主机H2.这时H1发送ARP请求分组(在网1上广播),找到网1的一个路由器R1,剩下的工作由路由器R1来完成;
3、发送方是路由器R1,要把IP数据报发送到R1连接在同一个网络(网2 )上的主机H3。这时R1发送ARP请求分组(在网2上广播),找到目的主机H3的硬件地址;
4、发送方是路由器R1,要把IP数据报发送到网3上的一个主机H4。这时R1发送ARP请求分组(在网2上广播),找到连接在网2上的一个路由器R2的硬件地址,剩下的工作由路由器R2来完成。
反向地址转换协议RARP:将局域网中某个主机的物理地址转换为IP地址

简述 RPC 的调用过程

image-20211024114038289

  1. 调用者(客户端Client)以本地调用的方式发起调用;

  2. Client stub(客户端存根)收到调用后,负责将被调用的方法名、参数等打包编码成特定格式的能进行网络传输的消息体;

  3. Client stub将消息体通过网络发送给服务端;

  4. Server stub(服务端存根)收到通过网络接收到消息后按照相应格式进行拆包解码,获取方法名和参数;

  5. Server stub根据方法名和参数进行本地调用;

  6. 被调用者(Server)本地调用执行后将结果返回给server stub;

  7. Server stub将返回值打包编码成消息,并通过网络发送给客户端;

  8. Client stub收到消息后,进行拆包解码,返回给Client;

  9. Client得到本次RPC调用的最终结果。

TCP 中 SYN 攻击是什么?如何防止?

SYN攻击属于DoS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。

SYN攻击通过故意不完成建立连接所需要的三次握手过程,造成连接一方的资源耗尽。

造成TCP连接的资源消耗,其中包括:数据包信息、条件状态、序列号等。

如何防止SYN 攻击

1、具有SYN proxy(SYN代理)功能的防火墙

每秒通过指定对象(目标地址和端口、仅目标地址或仅源地址)的SYN片段数的阀值,当来自相同源地址或发往相同目标地址的SYN片段数达到一定阀值时,防火墙开始截断连接请求和代理回复SYN/ACK片段,当防火墙代理半连接的队列被填满,防火墙拒绝来自相安全同区域所有地址的新SYN片段。
缺点:当攻流量较大时,连接出现较大延迟,网络负载高,很多时候成为整个网络瓶颈

2、加快淘汰无效SYN请求,通过降低tcp_syn_retries实现;加大队列长度,长度和tcp_max_syn_backing相关,但不完全由它决定。

缺点:在高强度攻击面前这两个不能根本解决问题,更有效的是tcp_syncookies。

3、SYN Cookie,给每一个请求连接的IP地址分配一个Cookie,若短时间内收到某个连续的SYN报文,就认定受到攻击,再来就丢弃。

原理:服务器收到SYN报文,返回SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值,在收到TCP_ACK时,服务器对比cookie对比检查合法性,再分配专门的数据区处理连接。

简述 TCP 的报文头部结构

image-20211024115019173

TCP的拥塞控制具体是怎么实现的?UDP有拥塞控制吗?

拥塞控制:TCP模块为了防止过多的数据注入网络,使网络中的路由器或链路不致于过载。以此提高网络利用率,降低丢包率,并抱证网络资源对每条数据流的公平性而采取的控制手段。拥塞控制包含四部分内容:慢启动、拥塞避免、快速重传、快速恢复。

  • 慢启动: 网络传输刚开始时,并不知道网络的实际情况,所以采取一种试探的方式控制数据的发送速率。慢启动阶段,数据的发送速率以指数方式增长,即就是拥塞窗口的增长,每次都是收到确认报文段数量的2倍。可以看出慢启动并不慢,拥塞窗口增长的速度很快。所以,为其设置了一个慢启动门限,当达到门限时,就进入到拥塞避免阶段。
  • 拥塞避免: 当拥塞窗口的大小采用慢启动方式增长到慢启动门限时,就进入拥塞避免阶段,拥塞避免阶段不再以指数形式增长拥塞窗口,而是每经过一个往返时间RTT就将发送方的拥塞窗口+1, 使其增长速度减缓。按照线性方式增长。如果发生网络拥塞,比如丢包时,就将慢启动门限设为原来的一半,然后将拥塞窗口设置为1,开始执行慢启动算法。(较低的起点,指数级增长)。
  • 快速重传: 假设发送方发送的报文段分别为: M1,M2,M3,M4,M5,M6 , 当接收方收到M1和M2后,M3报文段丢失,接着收到的M4,M5,M6都不做处理,而是没接收到一个报文段就对M2重复确认,发送方接收到重复的三次确认报文段,就对其后的报文段进行重新发送,而不需要等待超时时间到达。当快速重传后,立即进入到快速恢复阶段。
  • 快速恢复:将慢启动门限设置为原来的一半,然后将拥塞窗口设置为现在的慢启动门限值,不再执行慢启动算法,而是直接进入拥塞避免阶段。使发送窗口成线性方式增大。

image-20211024115427867

  • 流量控制(滑动窗口协议)TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。【滑动窗口技术存在于数据链路层和传输层。两者有不同的协议,但基本原理相同。区别是一个是发送帧,一个是发送字节数据。接收方的接受窗口告诉发送方本端tcp接受缓冲区还能容纳多少字节,发送方的发送窗口就可以控制发送数据的速度。】

UDP没有流量控制和拥塞控制,所以在网络拥塞时不会是源主机发送速率降低(对实时通信很有用,比如QQ电话,视频会议等)

什么是中间人攻击?如何防止攻击?

MITM 中间人攻击

攻击者可以将自己植入到彼此正在通信的两方之间,开展窃听、甚至是攻击活动。

离线中间人攻击:某中间人成功截获了您发送的消息,对其进行了读取和重新打包操作,然后将新的内容发回给您、或原始收件人。而当此人在不知情的情况下回复时,该中间人便可继续截获并阅读原本通信双方互发的信息。由于双方并非面对面通信,因此信息即使被截获和窃取,他们都不得而知。

在线中间人攻击:您用笔记本电脑连接上了某个咖啡馆的免费公共Wi-Fi,并试图访问某个银行的网站。

防止中间人攻击

  • 使用HTTPS:确保您只访问那些使用着HTTPS的网站。如前所述,HTTPS提供了额外的安全保护层。在此,您可以考虑下载并安装Electronic Frontier Foundation的HTTPS Everywhere浏览器扩展程序。它是Google Chrome浏览器最好的隐私扩展程序之一。

  • 不要忽略警告:如果您的浏览器提示,您正在访问的网站存在着安全问题,那么就请引起足够的重视。毕竟安全证书警告可以帮您直观地判定,您的登录凭据是否会被攻击者截获。

  • 不要使用公共Wi-Fi:如果您无法避免使用公共Wi-Fi,那么请下载并安装安全防护,为连接增加安全性。同时,在使用公共Wi-Fi连接时,请留意浏览器的安全警告。如果警告的数量突然猛增,那么很可能就表明某个漏洞遭到了中间人攻击。

  • 运行并更新防病毒软件:除了此外,也请考虑使用诸如Malwarebytes Premium之类的其他安全工具。

简述什么是 XSS 攻击以及 CSRF 攻击?

XSS,即 Cross Site Script,中译是跨站脚本攻击;是指攻击者在网站上注入恶意的客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。

XSS攻击可以分为3类:反射型(非持久型)、存储型(持久型)、基于DOM。

CSRF,即 Cross Site Request Forgery,中译是跨站请求伪造,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。

通常情况下,CSRF 攻击是攻击者借助受害者的 Cookie 骗取服务器的信任,可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击服务器,从而在并未授权的情况下执行在权限保护之下的操作。

如何防止传输内容被篡改?

1.设置客户端IP黑/白名单

1.1.客户端所有请求,请求到代理服务器(nginx),代理服务器维护黑/白名单的ip,决定是否转发请求。

1.2.项目创建一个filter,拦截所有请求,在filter的方法中,通过request信息匹配ip黑/白名单,和url的拦截规则,决定是否合法。

优点:简单粗暴。

缺点:需要客户端的IP固定。

应用场景:并发量小的场景。比如系统的后台管理服务,客服需要人工审批和通过涉及到钱财的业务,就可以使用这种简单粗暴的方式,防止账号泄露,接口泄露等等。

2.请求参数Sign签名

2.1前端发起http请求,对参数排序,然后使用 参数与私钥拼接,在进行md5加密 等方式,生成一个签名出来,一起发给服务端,服务端这边获取到参数,签名,再使用自己的私钥进行同样方式的加密生成签名,比对签名是否一致。一致则认为合法,不一致则不合法。但是无法防止重复请求攻击!

2.2针对上面方法升级,可以缓存每次请求的md5值,或者给每个请求添加uuid+随机数这样一个代表请求序号的标识。然后请求到服务端时,服务端想办法缓存起来起来这个标识,每次请求过来时,判断是否已经请求过。但是缓存怎么实现,如何维护?而且并发量高的话,每个请求过来都先查缓存,是否影响性能。

2.3在请求的参数中和签名结果里,加入时间戳这个参数,业务服务器一方面比较签名结果,一方面根据时间戳,来认证请求的合法性,比如允许请求的时间戳与服务器当前时间,存在20秒的误差等自定义规则。超过20秒的合法请求,服务器也不处理,防止恶意的重复请求。

2.4时间戳+md51 时间差120s以上代表重复请求,md5写缓存,缓存时长120s(大于等于上面的值就行),判断如果有md5代表重复请求。

3.请求方式换成Https

如何设计 API 接口使其实现幂等性?

所谓幂等,就是任意多次执行所产生的影响均与一次执行的影响相同。

image-20211024160432704

  • 唯一主键索引实现幂等性

  • 乐观锁实现幂等性

  • 悲观锁实现幂等性

  • Token 令牌如何实现幂等性

简述 BGP 协议和 OSPF 协议的区别

  1. 类型不同

OSPF是无类别链路状态路由协议,属于IGP,工作也在一个AS内;

BGP是无类别路径矢量路由协议,属于EGP,工作在AS间

  1. 作用不同

OSPF是用来发现、计算路由的;

BGP是用来传递、控制路由的

HTTP 是无状态的吗?需要保持状态的场景应该怎么做?

HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。

  1. 基于Session实现的会话保持

    在会话开始时(客户端第一次像服务器发送http请求),服务器将会话状态保存起来(本机内存或数据库中),然后分配一个会话标识(SessionId)给客户端,这个会话标识一般保存在客户端Cookie中,以后每次浏览器发送http请求都会带上Cookie中的SessionId到服务器,服务器拿到会话标识就可以把之前存储在服务器端的状态信息与会话联系起来,实现会话保持(如果遇到浏览器禁用Cookie的情况,则可以通过url重写的方式将会话标识放在url的参数里,也可实现会话保持).

  2. 基于Cookie实现的会话保持
    基于Cookie实现会话保持与上述基于Session实现会话保持的最主要区别是前者完全将会话状态信息存储在浏览器Cookie中,这样一来每次浏览器发送

简述 TCP 协议的延迟 ACK 和累计应答

在收到数据以后并不立即返回确认应答,延迟一会,等待缓冲区中数据被处理,那么剩余的缓冲区就会大些——这是延迟应答

那么所有的包都可以延迟应答么? 肯定也不是;

  • 数量限制: 每隔N个包就应答一次;
  • 时间限制: 超过最大延迟时间就应答一次; 一般N取2, 超时时间取200ms;

**捎带应答:**在延迟应答的基础上, 我们发现, 很多情况下, 客户端服务器在应用层也是 “一发一收” 的. 意味着客户端给服务器说了”How are you”, 服务器也会给客户端回一个 “Fine, thank you”;那么这个时候ACK就可以搭顺风车, 和服务器回应的 “Fine, thank you” 一起回给客户端。

SSL握手流程为什么要使用非对称秘钥?

image-20211024171449089

简述 WebSocket 是如何进行传输的

  • 浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,

  • 连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

  • 当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,

  • 并通过 onmessage 事件来接收服务器返回的数据。

traceroute 有什么作用?

traceroute是诊断网络问题时常用的工具。

可以通过traceroute进行初步的检测,定位网络包在是在哪个节点丢失的,之后才可以进行针对性的处理。

如何解决 TCP 传输丢包问题?

  1. 数据分片:发送端对数据进行分片,接受端要对数据进行重组,由TCP确定分片的大小并控制分片和重组

  2. 到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认

  3. 超时重发:发送方在发送分片时设置超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片数据

  4. 滑动窗口:TCP连接的每一方的接受缓冲空间大小固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出

  5. 失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;

  6. 重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据;

  7. 数据校验:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验或有差错,TCP将丢弃这个分片,并不确认收到此报文段导致对端超时并重发

题目答案均为转载,题目先后顺序按各大厂总出题次数排列!