LQH入职第16天--常识学习

1、网络延迟&网络抖动

网络中的延迟是指信息从发送到接收经过的延迟时间,一般由传输延迟及处理延迟组成;
抖动是指最大延迟与最小延迟的时间差,如最大延迟是20毫秒,最小延迟为5毫秒,那么网络抖动就是15毫秒,它主要标识一个网络的稳定性
解决网络抖动的方法:

1 数据包接收端的抖动缓存指针队列的入队线程接收数据包,对接收到的数据包进行排序后将接收到的数据包插入抖动缓存指针队列的相应位置
2 抖动缓存指针队列的出队线程定时器以一定时间间隔触发出队线程,出队线程判断抖动缓存指针队列队头的数据包是否应该在当前触发时刻出队,如果是,则将该数据包出队
3 根据抖动缓存指针队列中的队尾数据包和队头数据包时戳值之差与当前抖动缓存深度的大小关系,以及根据数据包在抖动缓存指针队列中的缓存时间与该抖动缓存指针队列缓存数据包的最小延时量之间的关系,增大或缩小当前抖动缓存深度的操作。

https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E6%8A%96%E5%8A%A8/10275747?fr=aladdin

2、sha1加密算法调用

package main
//Go 在多个 crypto/* 包中实现了一系列散列函数。
import "crypto/sha1"
import "fmt"

func main() {
    s := "string1"
    //产生一个散列值得方式是 sha1.New(),sha1.Write(bytes),然后 sha1.Sum([]byte{})。这里我们从一个新的散列开始。
    h := sha1.New() // md5加密类似md5.New()
    //写入要处理的字节。如果是一个字符串,需要使用[]byte(s) 来强制转换成字节数组。
    h.Write([]byte(s))
    //这个用来得到最终的散列值的字符切片。Sum 的参数可以用来对现有的字符切片追加额外的字节切片:一般不需要要。
    bs := h.Sum(nil)
    //SHA1 值经常以 16 进制输出,使用%x 来将散列结果格式化为 16 进制字符串。
    fmt.Printf("%x\n", bs)
   //如果需要对另一个字符串加密,要么重新生成一个新的散列,要么一定要调用h.Reset()方法,不然生成的加密字符串会是拼接第一个字符串之后进行加密
   h.Reset()//重要!!!
   h.Write([byte]("string2"))
   fmt.Printf("%x\n", fmt.Sprintf("%x", h.Sum(nil)))
}

https://www.jianshu.com/p/3fda50adba6f

3、token学习

1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
二、如何使用Token?

    这是本文的重点,在这里我就介绍常用的两种方式。

1、用设备号/设备mac地址作为Token(推荐)

    客户端:客户端在登录的时候获取设备的设备号/mac地址,并将其作为参数传递到服务端。

    服务端:服务端接收到该参数后,便用一个变量来接收同时将其作为Token保存在数据库,并将该Token设置到session中,客户端每次请求的时候都要统一拦截,并将客户端传递的token和服务器端session中的token进行对比,如果相同则放行,不同则拒绝。

分析:此刻客户端和服务器端就统一了一个唯一的标识Token,而且保证了每一个设备拥有了一个唯一的会话。该方法的缺点是客户端需要带设备号/mac地址作为参数传递,而且服务器端还需要保存;优点是客户端不需重新登录,只要登录一次以后一直可以使用,至于超时的问题是有服务器这边来处理,如何处理?若服务器的Token超时后,服务器只需将客户端传递的Token向数据库中查询,同时并赋值给变量Token,如此,Token的超时又重新计时。

2、用session值作为Token

    客户端:客户端只需携带用户名和密码登陆即可。

    客户端:客户端接收到用户名和密码后并判断,如果正确了就将本地获取sessionID作为Token返回给客户端,客户端以后只需带上请求数据即可。

分析:这种方式使用的好处是方便,不用存储数据,但是缺点就是当session过期后,客户端必须重新登录才能进行访问数据。

https://www.jianshu.com/p/24825a2683e6

4、Session原理

Session:记录一系列状态
Session与cookie功能效果相同。Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。
解释session:当访问服务器否个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session

原理:HTTP协议是非连接性的,取完当前浏览器的内容,然后关闭浏览器后,链接就断开了,而没有任何机制去记录取出后的信息。而当需要访问同一个网站的另外一个页面时(就好比如在第一个页面选择购买的商品后,跳转到第二个页面去进行付款)这个时候取出来的信息,就读不出来了。所以必须要有一种机制让页面知道原理页面的session内容。
https://blog.csdn.net/weixin_42217767/article/details/92760353

5、基于timestamp和nonce的防重放攻击

如果在60s内,重放该HTTP请求,因为nonce参数已经在首次请求的时候被记录在服务器的nonce参数“集合”中,所以会被判断为非法请求。超过60s之后,stime参数就会失效,此时因为黑客不清楚token的值,所以无法重新生成签名。

综上,我们认为一次正常的HTTP请求发送不会超过60s,在60s之内的重放攻击可以由nonce参数保证,超过60s的重放攻击可以由stime参数保证。

因为nonce参数只会在60s之内起作用,所以只需要保存60s之内的nonce参数即可。

分析链接:https://blog.csdn.net/u010963948/article/details/88874540

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值