百度二战二败,计网基础太差,花一天时间补补
本文参考B站UP主技术蛋老师视频,其中大部分内容为视频内容或者作者本人理解,如有偏差请谅解。
推荐观看完整视频
直接MAC地址通信
要发送数据之前,讲数据封装成数据帧,包含目标MAC和源MAC,通过网线传输所有设备都可以接受到数据帧,判断目标MAC是否为本机MAC,不是则丢弃,是则接收。
交换机通信
二层交换机支持两种模式:学习模式、泛洪模式、转发模式
学习模式,主机1 发送数据帧 包含本机IP地址、MAC地址、目标IP地址,
如果不知道对方的MAC地址,目标MAC地址为全F,
FF:FF:FF:FF....
(广播地址),交换机会先记录主机1 的MAC和端口,然后进入泛洪模式
泛洪模式,交换机会讲数据帧发送到所有端口上,每个主机检查数据帧目标IP是否是自己的,否则丢弃。
转发模式,如果是则发送响应数据帧,包含主机1的MAC地址和自身的MAC地址,交换机记录主机2的MAC地址,并查看MAC地址表发现有主机1的MAC和端口号,直接向端口号发送数据帧。
使用VLAN进行网络划分,划分为虚拟局域网
三层交换机
IP地址:网络号(表示某一块区域)+主机号
IP分类,分为A、B、C(DE不在研究范围)
子网掩码:解决简单分类导致的IP分配不合理问题
子网掩码的作用:表示IP的区间范围,可以是一组数,如 255.255.255.252
或者是CIDR的方式表示,如 192.168.0.0/30
表示掩盖IP的二进制前30位数
OSI网络模型是一个参考模型,实际中更常用的是TCP/IP 五层模型
OSI网络模型的各层
- 物理层,数据在计算机层面就是二进制的bit,物理层就是用不同的媒介将他们传输出去,包括电、光、电磁波等,传输过程可能包含各种网络拓扑,有中继器和集线器这样的设备实现。
- 数据链路层,数据在这一层,bit会被封装成帧,在封装时会加上MAC地址,为了可以通过MAC地址对不同设备进行数据的传输,就出现了交换机(二层交换机)
- 网络层,数据在这一层被封装成包,包内包含了源IP和目标IP,MAC地址无法做出快速定位,因此出现了IP地址,IP地址是分区的,路由器根据包内的IP的网络号+主机号可以快速查找主机
- 传输层,数据在这一层里被封装成段,在一台主机上运行着多个软件,要实现软件到软件的通信,就要通过端口号进行通信了,这里的传输包含可靠传输(TCP)和不可靠传输(UDP)
- 会话层,保存用户在连接中的一些信息,比如用户信息等
- 表示层,表示层对数据进行编码和解码,将数据呈现成不同形式
- 应用层,数据在应用层的名字为报文,这一层包含多种协议,如HTTP、FTP、STP等。
socket(套接字):IP地址+端口号
三次握手
- 第一次客户端发送SYN=1报文,包含客户端序号seq=x
- 第二次服务端接收到客户端报文后,发送SYN=1、ACK=1报文,包含确认号ack=x+1,服务端序号seq=y
- 第三次客户端接收到服务端报文后,发送ACK=1报文,包含确认号ack=y+1、序号seq=x+1
握手后,就建立了连接,可以发起HTTP请求了
四次挥手,客户端和服务端都可以主动发起挥手
- 第一次客户端发送FIN=1、ACK=1报文,包含序号seq=x、确认号ack=y
- 第二次服务端接收到报文,发送ACK=1报文,包含序号seq=y,确认号ack=x+1
- 第三次服务端在发送完ACK报文后,还会发送一个FIN=1、ACK=1报文
- 客户端在收到FIN+ACK报文后,会发送一个ACK报文,包含seq=x+1、ack=y+1
为什么服务端需要发送两次确认包
因为可能存在未发送完的数据
HTTP的组成
HTTP是一种网络传输协议,组成部分如下
请求响应报文
请求报文
- 请求行(起始行)
方法、请求URL、HTTP版本
- 请求首部(请求头)
很多参数,比如Cookie、UA等
- 请求主体(请求体)
具体的参数
响应报文
响应行(起始行)
状态码,成功或失败原因,HTTP版本
响应首部(响应头)
和请求头类似
响应主体(响应体)
具体的数据
传输数据,使用TCP传输请求报文或者响应报文
- HTTP 1.0 使用非持久化TCP连接,每发起一次HTTP请求都要建立一次TCP连接
- HTTP 1.1 使用持久化TCP连接,多次HTTP请求可以复用一个TCP连接
状态
HTTP默认是无状态的,无法记住客户端和服务端做了什么
在请求首部加上Cookie,可以让其成为有状态,比如登录验证之类
HTTP 各版本的区别
HTTP 1.0 和 HTTP 1.1
http1.1 默认使用持久连接,而 http1.0 默认使用非持久连接。http1.1 通过使用持久连接来使多个 http 请求复用同一个 TCP 连接。
http1.1新增了很多请求方法,如 PUT、HEAD、OPTIONS 等
HTTP 1.1 和 HTTP 2.0
HTTP/2 实现了多路复用,HTTP/2 仍然复用 TCP 连接,但是在一个连接里,客户端和服务器都可以同时发送多个请求或回应,而且不用按照顺序一一发送,这样就避免了"队头堵塞"【1】的问题。
HTTP/2 实现了头信息压缩,由于 HTTP 1.1 协议不带状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如 Cookie 和 User Agent ,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。HTTP/2 对这一点做了优化,引入了头信息压缩机制。
HTTP状态码
2xx表示请求成功,一般有200;
3xx一般表示重定向,比如301永久重定向、302临时重定向、304可以使用缓存的内容
4xx表示客户端错误,404表示请求的资源未找到,403无权访问资源
5xx表示服务器错误,比如502表示网关错误,503表示服务不可用,504表示网关超时
对称加密
发送方和接受方使用相同的规则(密钥)进行数据的加密和解密,缺点容易被盗取密钥
加密算法有AES、DES等
非对称加密
假设发送方有自己的私钥,使用私钥加密数据,接收方有自己的公钥,它可以用公钥解密数据。同时公钥也可以用来加密数据,但是公钥自己也无法解密数据,只有私钥可以解密数据。加解密都是单向的。
非对称加密常见的算法有RSA、ECC等
非对称加密 传输 对称加密 的 密钥
哈希算法
对输入的数据进行复杂的计算,生成一个唯一的哈希值。这个哈希值具有以下特点:对于相同的输入数据,无论在何时何地进行计算,得到的哈希值都是相同的;而对于不同的输入数据,即使它们之间只有微小的差异,其哈希值也会有很大的不同。有MD5、SHA等算法
证书
- 主体部分
- 公钥
- 主体名称
- CA部分
- CA签名,会使用公钥来进行验证
- 颁发者名称
- 有效期
TLS 握手
HTTPS连接过程
(豆包)
握手阶段(使用非对称加密)
- 客户端发起 HTTPS 请求,连接到服务器的 443 端口。
- 服务器收到请求后,将包含公钥的数字证书发送给客户端。
- 客户端验证数字证书的有效性,包括证书的颁发机构、有效期、证书链等。如果证书验证通过,客户端使用证书中的公钥对一个随机生成的对称加密密钥(也称为会话密钥)进行加密,并将加密后的密钥发送回服务器。
数据传输阶段(使用对称加密)
- 服务器接收到客户端发送过来的加密后的对称密钥后,使用自己的私钥进行解密,得到对称加密密钥。
- 之后客户端和服务器之间就可以使用这个对称加密密钥进行数据的加密和解密传输。对称加密算法(如 AES)在数据传输过程中提供了高效的加密和解密速度,确保了数据传输的效率。
HTTPS 攻击
- 中间人攻击
- 证书伪造攻击
- 降级为HTTP进行攻击
本文作者:peepdd864
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!