计算机网络基础总结

OSI7层模型

物理层

电脑链接起来的一种手段(光纤,无线电波),规定了网络的一些电气特性,作用是负责传送0和1的电信号

数据链路层

规定解读电信号的方式,统一电信号分组方式:以太网协议Ethernet

ARP协议来获取接受方的MAC地址,以太网采用原始方式:广播向同一子网络的计算机发送数据,每台电脑读取数据包内的”标头“,对照自己的MAC,对上了,就接收。

网络层

要区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用”路由”方式发送。这就导致了”网络层”的诞生(引入网址)。

每台计算机有了两种地址,MAC地址和网络地址,网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。

规定网络地址的协议:IP协议

传输层

计算机间可以在互联网上通信,但有些数据是发给一个计算机的单独程序的,引入端口port,数据包加入端口信息,需要协议:TCP,UDP

UDP

面向无连接

UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到

TCP

面向有连接

能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。面向字节流,传输慢

应用层

互联网是开放架构,数据来源五花八门,必须事先规定好通信的数据格式,否则接收方根本无法获得真正发送的数据内容。

应用层规定应用程序使用的数据格式,例如我们TCP协议之上常见的Email、HTTP、FTP等协议,这些协议就组成了互联网协议的应用层。

应用层还可分为:应用层,表示层,会话层

浏览器请求过程

  1. DNS询IP地址--网络层

  2. TCP握手-- 传输层

  3. HTTP请求--应用层

  4. nginx反向代理

  5. web服务器

  6. TCP挥手

TCP三次握手

TCP四次挥手

TCP粘包

为什么会出现粘包

主要原因就是tcp数据传递模式是流模式,在保持长连接的时候可以进行多次的收和发。

“粘包”可发生在发送端也可发生在接收端:

  1. 由Nagle算法造成的发送端的粘包:Nagle算法是一种改善网络传输效率的算法。简单来说就是当我们提交一段数据给TCP发送时,TCP并不立刻发送此段数据,而是等待一小段时间看看在等待期间是否还有要发送的数据,若有则会一次把这两段数据发送出去。
  2. 接收端接收不及时造成的接收端粘包:TCP会把接收到的数据存在自己的缓冲区中,然后通知应用层取数据。当应用层由于某些原因不能及时的把TCP的数据取出来,就会造成TCP缓冲区中存放了几段数据。

解决办法

出现”粘包”的关键在于接收方不确定将要传输的数据包的大小,因此我们可以对数据包进行封包和拆包的操作。

封包:封包就是给一段数据加上包头,这样一来数据包就分为包头和包体两部分内容了(过滤非法包时封包会加入”包尾”内容)。包头部分的长度是固定的,并且它存储了包体的长度,根据包头长度固定以及包头中含有包体长度的变量就能正确的拆分出一个完整的数据包。

我们可以自己定义一个协议,比如数据包的前4个字节为包头,里面存储的是发送的数据的长度。

HTTPS

https指的是超文本传输安全协议,https是基于http协议的,不过它会使用TLS/SSL来进行数据加密。使用TLS/SSL协议,所有的信息都是加密的,第三方没有办法窃听。并且它还提供了一种校验机制,信息一旦被篡改,通信双方都会立刻发现。它还配备了身份证书,防止身份被冒充的情况出现

如上所示为http和https之间的层级划分,可以看出https比http多了一个TSL/SSL的安全层。

TLS握手的过程

第一步:客户端向服务器发送请求,请求中包含使用的协议版本号,生成的一个随机数,客户端支持的加密方法。
第二步:服务器接受到请求后,确认双方使用的加密方法,并给出服务器的证书,以及一个服务器生成的随机数。
第三步:客户端接收到证书后,验证证书是否有效后,生成一个新的随机数,并使用数字证书中的公钥,加密这个随机数,然后发送给服务器。
第四步:服务器使用自己的私钥,来解密客户端发送来的随机数。
第五步:客户端和服务器根据约定的加密方法使用前面的三个随机数,生成对话的秘钥,以后的对话的过程中就都使用这个秘钥来加密信息。

实现原理

TLS的握手过程主要用到了三种方法来保证传输的安全。

  1. 对称加密方法:首先是对称加密的方法,对称加密的方法就是,通信双方使用同一个秘钥来对数据进行加密和解密。但是存在一个问题,就是在通信的过程中,秘钥会通过网络传输,一旦秘钥被其他人获取,那么整个加密的过程就毫无意义。此时就需要用到非对称加密。

  2. 非对称加密:就是存在一个公钥和一个私钥,公钥是公开的,私钥是保密的,用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密。我们可以将公钥公布出去,任何想和我们通信的客户,都可以使用我们提供的公钥对数据进行加密,这样我们就可以使用私钥进行解密,这样就能保证数据的安全了。但是非对称加密存在一个问题,通信双方使用非对称加密导致等待时间过长。因此我们使用对称加密和非对称加密两个方法结合,使用非对称加密来加密密钥来尽心传输,然后使用对称加密进行信息加密。

  3. 存在一个问题:上述方法中存在一个问题,因为我们没有办法确定我们得到的公钥就一定是安全的公钥。可能存在一个中间人,截取了对方发给我们的公钥,然后将他自己的公钥发送给我们,当我们使用他的公钥加密后发送的信息,就可以被他用自己的私钥解密。然后他伪装成我们以同样的方法向对方发送信息,这样我们的信息就被窃取了,然而我们自己还不知道。

解决:我们可以使用数字证书的方式,首先我们使用一种 Hash 算法来对我们的公钥和其他信息进行加密生成一个信息摘要,然后让有公信力的认证中心(简称 CA )用它的私钥对消息摘要加密,形成签名。最后将原始的信息和签名合在一起,称为数字证书。当接收方收到数字证书的时候,先根据原始信息使用同样的 Hash 算法生成一个摘要,然后使用CA的公钥来对数字证书中的摘要进行解密,最后将解密的摘要和我们生成的摘要进行对比,就能发现我们得到的信息是否被更改了。这个方法最重要的是认证中心的可靠性,一般浏览器里会内置一些顶层的认证中心的证书,相当于我们自动信任了他们,只有这样我们才能保证数据的安全。

posted @ 2022-08-25 16:27  aleiyoy  阅读(49)  评论(0编辑  收藏  举报