计算机网络

一. OSI连接模型

连接模型

二. 目前主要使用的四层模型

  1. 应用层
    HTTP/HTTPS/FTP
  2. 传输层
    TCP/UDP
  3. 网络层
    IP
  4. 网络接口层

三. 浏览器以HTTPS访问www.baidu.com发生的事情

  1. 首先需要将域名转换为ip地址
    1.1 在浏览器中访问缓存的静态映射
    1.2 如果没有,访问本机host缓存
    1.3 仍没有,查找本地DNS服务器
    1.4 本地服务器缓存没有,则以迭代的方式去查询根域名服务器(或者本机设置的优先服务器,例如谷歌的8.8.4.4/8.8.8.8),返回.com的顶级域名服务器
    1.5 本地服务器再向.com的顶级域名服务器查询baidu.com
    1.6 重复进行一直到查询到www.baidu.com,得到对应的IP地址
  2. 经过多级跳跃找到对应服务器,发起TCP连接申请,进行TCP三次握手
    2.1 发起握手请求发送SYN=1同步码,顺序码x
    2.2 服务器接到请求,打开连接,返回确认码为x+1,以及自己的顺序码y,表示已打开连接
    2.3 客户端接到返回检查确认码,再次返回确认码为y+1表示自己知道已连接


    三次握手示意图
  3. 在TCP连接基础上进行HTTPS请求
    3.1 客户端发起HTTPS请求
    3.2 服务端接受到该请求,返回一个包含公钥和服务器证书生成的SSL证书,这里的公钥是非对称加密的公钥,该证书不可逆
    3.3 客户端取得证书,验证证书机构,这里涉及到CA认证,此处的证书是保证客户端接收到的密钥是目的服务器发出的,未被中间人劫持的,所以这里会传两份数据,一份是明文密钥,一份是证书,证书里包含的明文密钥经过CA加密且进行散列加密的数据,客户端拿到数字证书后使用CA证书的公钥对其进行解密,拿到hash后的数据,再将明文密钥进行hash,这两份数据对比,如果相同,则表示没有被中间人替换,而且这里会包含目标服务器的信息,所以也能保证不会被中间人替换掉整个证书包。
    3.4 拿到服务器的密钥后,在客户端生成随机数,作为之后对称加密的密钥,用服务器的公钥对这个随机数进行非对称加密,然后返回给服务器
    3.5 服务器拿到数据后用自己的私钥进行解密拿到该随机数,然后以此作为对称加密的密钥进行通信。
  4. 结束通信,四次挥手断开TCP连接
    4.1 客户端发起终止连接的请求,客户端停止发送数据,但是仍可以接受数据
    4.2 服务端接到终止请求,回复客户端表示收到,但还是可以发送数据
    4.3 服务端将所有数据发送完,发送给客户端停止信号
    4.4 客户端接收到终止信号,进入等待状态,再发送给服务端表示收到,服务器收到消息直接关闭连接,客户端等待两个单位时间后再关闭连接


    四次挥手

四. 几个思考的点

  1. 为什么是三次握手?
    保证双方都确保对方收到消息最少需要三次
    一次握手,客户端只是将消息发出去,并不知道服务端是否收到
    两次握手,客户端知道服务器收到了消息,但是服务端并不知道客户端知道了以上信息

  2. HTTPS为什么采用非对称加密和对称加密结合?
    采用非对称加密是因为需要保证安全,而加上对称加密是因为非对称加密消耗的资源太多,所以只是在最开始连接使用非对称加密
    如果只是使用这两者,仍然可能被攻击,因为如果整个过程都被监视,那么中间人完全可以取得所有客户端所知道的信息,在服务器发出公钥时,捕捉到这个公钥,替换为自己的公钥,而客户端生成随机数时,中间人就能拿到这个随机数,然后再用服务端的公钥进行加密,那么所有数据在中间人这里就都是明文的了。所以仍然需要ca证书,保证中间的信息没有被篡改。


    中间人攻击原理
  3. 证书如何保证中间信息没有被篡改?
    在上一个问题中知道,中间人可以通过篡改中间的数据来进行攻击,那么只需要保证中间数据不被篡改就可以,所以在证书里使用了不可逆的加密方式,客户端这边在这块不用解密,在这块对原文进行加密,然后对比结果相同就可以。

  4. 为什么是四次挥手?
    如果不考虑客户端断开连接时,服务端仍可能有未发送完的数据,那么三次挥手就可以,也就是第二次和第三次是放到一起的,但这块必须要考虑。

  5. 为什么最后一次挥手客户端需要等待两个单位时间再关闭?
    因为最后一次挥手可能服务器没收到客户端的第四次挥手信息,那么服务端就仍处于第三次挥手无结果的状态,到一次通信最长时间还无结果,服务器就认为客户端可能没收到该信息,就会重复发一次第三次挥手的信息,如果客户端收到这个信息就会重置等待时间,而这两个时间最长就是两次消息发送的最长时间

  6. server端容易受到SYN攻击?
    Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时
    只能尽快释放这种链接,然后开启短时间的黑名单,将对应ip拉黑(服务器在遭受大量ip撞登录密码时也可以这样处理)

参考

https://blog.csdn.net/qq_29966203/article/details/90448790
https://blog.csdn.net/qq_38984677/article/details/85621784
https://zhuanlan.zhihu.com/p/43789231

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容