# 概念

# 互联网 Internet

互联网是一个全球性的网络,由无数个私人网、公共网、学术网和政府网所组成,这些网络通过一系列标准的协议和技术服务相互连接,互联网的核心包括:全球性、开放性、互联性和服务多样性。

# 广域网 WAN

广域网是一种覆盖地理区域的计算机网络,通常跨越多个城市、州或国家。广域网

# PPP 链路

广域网在数据链路层通过 PPP 协议来传输数据。

PPP 点对点协议

# 路由器

路由器又称为网关

  • 一台路由器对应多个网卡
  • 路由器可以拥有多个 IP 地址,常见有内部 IP 地址、外部 IP 地址和其他 IP 地址。
  • 路由器还可以支持网络地址转换(NAT 协议),可以将局域网划分为多个独立的子网,每个子网都有自己的 IP 地址范围。
  • 路由器 WAN 口 IP 是 ISP 提供的 IP 地址,可能由 ISP 动态分配,也可能是静态分配的,用于路由器与互联网之间的通信。
  • 路由器 LAN 口 IP 是路由器为其管理的局域网分配的 IP 地址,每一个 LAN 口对应一个端口号,用于设备与路由器之间通信。
# IP 地址
  • IP 地址按照划分大小分为 IPv4 和 IPv6。
  • IP 地址按照网络类型分为:公网 IP 和私网 IP。
  • 局域网内的 IP 地址是由路由器进行分配的。
  • 路由器的 IP 地址是由 ISP 动态分配的,也可能是静态分配的。

# 局域网

局域网在数据链路层通过以太网协议传输数据。

局域网是一种计算机网络,通常覆盖的范围较小,局域网允许连接到网络上的设备(计算机打印机等)之间相互通信和共享资源,特点是传输速度快,延迟低。

  • 局域网除了以太网还有无线局域网、令牌环网等网络技术。
# 以太网

以太网是一种局域网技术,定义了数据在局域网中的传输方式,以太网使用 MAC 地址进行设备间的通信,并且支持多种传输介质,包含双绞线、光纤等。

# 以太网链路

概念

  • 以太网链路是指:在以太网技术中,两个网络设备之间的物理连接或逻辑连接。
  • 物理连接通过:双绞线、光纤等
  • 逻辑连接通过:交换机或路由器等设备
# 以太网协议

以太网链路传输过程

  • 封装成帧(帧头(包含目的地址和源 MAC 地址)、数据载荷(承载上层协议的数据)和帧尾(包含 CRC 循环冗余校验的字段,用于错误检测))
  • 访问控制(多个设备同时发送数据会导致冲突,以太网链路使用载波监听多路访问协议来控制设备的访问)
  • 传输(通过物理介质发送封装好的以太网帧)
  • 接收(网络接口卡捕获物理介质传输过来的比特流,将物理信号转换为电子信号)
  • 解封装(通过帧尾 CRC 字段确认是否存在错误,如果数据无误则将其传递给上层协议进一步处理)
  • 确认(全双工通信中,接收设备可能会发送一个确认信号回发送设备,告知数据成功接收)
# 集线器

概念

  • 一种基本的网络设备,用于将多个网络设备连接到一个单一的物理网络段,主要功能用于转发,但是由于各个端口之间不记录与设备间的映射关系,所以要以广播的方式转发、传输效率很低。
# 交换机

概念

  • 交换机是一种更高级的网络设备,记录了每个端口对应设备的 MAC 地址,进而实现针对性的转发。它可以通过:MAC 地址学习,帧转发和交换机端口来管理数据流。

MAC 地址学习

  • 交换机能够学习并维护一个 MAC 地址表,记录每个端口上连接设备的 MAC 地址。
  • 帧转发:当交换机接收到一个帧数据流时,它会查看帧内的 MAC 地址,并根据 MAC 地址表决定将帧转发到哪一个端口,如果目的 MAC 地址不在表中,交换机会通过地址解析协议(广播所有端口)找到对应的 MAC 地址,并更新 MAC 地址表
  • 交换机端口:交换机每个端口可以独立工作在全双工模式,这意味着数据可以同时双向传输,提高了传输效率。
# MAC 地址

每台设备都有自己唯一的 MAC 地址,出厂就已经指定了。

# 地址解析协议 ARP

地址解析协议 ARP 用于将 IP 地址解析到 MAC 地址,当通信发生在不同网络时,ARP 可以结合路由信息通过代理 ARP 或路由器的 ARP 表来解析目标 MAC 地址。

# 网际报文控制协议 ICMP

ICMP 网际报文控制协议是 TCP/IP 协议族的一种网络层协议,是一个面向无连接的协议,不保证消息的可靠性只发送控制信息,用于在 IP 主机和路由器之间传递控制信息。
ICMP 和 UDP 的区别

  • UDP 工作在传输层,
# 内网穿透
  • 内网穿透的原因是因为内网 IP 是由路由器分配的,内网可以访问外网(公网),但是外网由于没有这个路由器上对应到该内网的端口映射关系,因此外网访问不到内网
  • 内网穿透的原理就是:内网的服务主动访问外网的某个服务器,主动被这个外网的服务器所代理。

# 分层

# 应用层(应用之间、传输数据)

最上层的应用就是应用层

  • 我们直接接触的就是应用层,电脑或手机使用的 应用软件 就是在应用层实现
  • 应用层只需要专注于为用户提供应用功能,如: HTTP FTP DNS
  • 应用层不用关系数据是如何传输的,应用层工作在操作系统中的用户态,传输层及以下工作在内核态

# 传输层(主机之间、分段)

传输层并不直接负责将数据从一个设备传到另一个设备,因为实际的网络传输环节是错综复杂的,中间有很多线路和选择,传输层的设计理念是简单、高效和专注,传输层只需要服务好应用即可.

  • 传输层用于处理应用层的数据包,为应用层提供网络支持
  • 传输层有两个协议: TCPUDP

UDP (用户数据报协议),是无连接的不可靠服务

  • UDP 只负责发送数据包,不保证数据包的可靠性,因此它的 实时性更好传输效率更高

TCP (传输控制协议),面向连接的可靠服务

  • TCP 在传输数据之前,要先进行 三次握手 建立连接, 最少三次握手才能保证接收方和发送方具有正常的收发能力
  • TCP 在断开连接时,要进行 四次挥手 断开连接, 断开时,发送方会先发送数据,然后再发送一个断开的消息,这两次不能合并的原因就是:一旦接收方返回的数据包丢失,就会导致接收方认为连接断开,而发送方还要发送数据,从而导致半开连接的状态
  • TCP 相比于 UDP 多了: 流量控制超时重传拥塞控制 等特性,目的是保证数据包能可靠的传输给对方
  • 当传输层的数据包大小超过 TCP最大报文段 时,就要重新 进行数据包分块 ,这样即使中途有一个分块丢失了,也只需要重新发送这一个分块,而不必重新发送整个数据包。其中的每个分块被成为 TCP段
  • 设备作为接收方时,传输层要负责将数据包传给应用,但是一台设备上可能有很多应用在接收或者传输数据,因此需要一个编号进行区分,这个编号就是 端口
  • 传输层并不直接负责传输,他只负责处理好应用数据的传输功能,作为应用数据的传输媒介,实际的传输功能由下一层网络层来处理

# 网络层(主机设备之间、分组、数据报)

网络层负责将数据从一个设备传输到另一个设备

  • 网络层最常用的协议是 IP 协议 ,用于得到一个发送到网络的 IP 报文
  • IP 协议会将 传输层的报文 作为 数据部分 ,再加上 IP包头 组成 IP报文 ,如果 IP 报文大小超过 MTU, 就会再次进行分片,得到一个即将发送到网络的 IP 报文

ip 地址寻址 (选择方向)

  • 由于设备太多,因此网络层需要有一个区分设备的编号,即 ip地址
  • ip 地址通过子网掩码被分为两种意义: 网络号主机号
  • 网络号 标识该 ip 地址属于哪个子网
  • 主机号 标识同一子网下的不同主机
  • 区分 ip 地址时需要子网掩码才能计算出 ip 地址的网络号和主机号, 网络号 = IP地址 & 子网掩码主机号 = IP地址 & ~子网掩码

ip 地址路由 (选择路径)

  • 两台设备不是直接通过网线相连的,而是通过很多网关、路由器、交换机等多种网络连接起来的,从而形成了很多网络路径,当数据包到达一个网络节点,就需要通过路由算法决定下一步走哪一条路径
  • ip 地址路由就是先找到目标地址的子网,再将数据包转发到对应的网络中

# 数据链路层(以太网设备之间、封装成帧)

在 IP 头部的前面加上 MAC 头部,并封装成数据帧发送到网络上

# 物理层(物理媒介之间、物理信号变为电子信号)

以太网

  • 以太网就是一种在局域网内,将附近的设备连接起来,使他们之间可以进行通讯的技术
  • 常见的以太网有: wifi接口 以太网交换机 路由器以太网接口
  • MAC地址 用于标识以太网上的设备, 它和网络接口卡相绑定
  • 以太网在判断网络包的目的地时,必须采用相匹配的方式才能在以太网中将包发往目的地,而 MAC地址 就是这个作用
  • 通过 ARP地址解析协议 就可以获得到 MAC地址

无线局域网 WLAN

  • 和以太网的工作大致相同,不同在于 无线局域网使用无线电波进行数据传输

# url 输入网址后,发生了什么

  1. 补全 url

补全 url 协议、端口号和默认文件名,http 默认 80 端口,https 默认 443 端口,index.html

  1. 检查浏览器缓存
  2. 生成 http 请求
  3. 进行 DNS 解析
    生成 http 请求之后,如果浏览器和本地 DNS 服务器中没有相应的缓存,就会通过本地 DNS 服务器进行请求,询问域名对应的 ip 地址。

DNS 用于查询域名对应的 ip 地址,在域名中,越靠右其层级越高,实际上域名末尾还有一个 . ,他表示根域名,.com 表示顶级域名,baidu 表示权威域名

  • 跟域名(DNS)服务器(.)
  • 顶级域名(DNS)服务器(.com)
  • 权威域名(DNS)服务器(dmqweb.com
  • 本地 DNS 服务器。
  1. 得到 IP 地址后,发生系统调用,交给 操作系统网络协议栈 ,找到其使用的协议为 TCP协议

操作系统协议栈就是一组网络通信协议的集合,用于标准化通信,分层处理,模块化设计,网络管理和接口定义等。

  1. 加上 TCP 首部封装为 TCP 报文(操作系统的 TCP 协议模块、传输层)
  2. 加上 IP 首部封装为 IP 数据报(操作系统 IP 协议模块、网络层)
  3. 加上 MAC 地址帧头帧尾,封装为网络包(将 IP 数据包封装成网络帧、数据链路层)
  4. 交给网卡,网卡驱动程序将网络包转为电信号,通过网线发送出去
  5. 网络包被交换机和路由器中转,最后被转发到目的 ip 地址对应的路由器
  6. 路由器根据 IP 地址找到 MAC 地址对应的设备
  7. 设备(服务器)通过端口号找到对应的服务
  8. 服务端处理请求的数据,通过相同的方式,返回 html 给请求方的浏览器
  9. 浏览器解析 html 为 DOM 树,解析 css 为 CSSOM 树,两者不冲突,当遇到 js 文件就会去请求并执行 js 文件,js 文件由于会操作 DOM 树,因此和渲染主线程互斥。
  10. 将 DOM 树和 CSSOM 树合并为渲染树。
  11. 浏览器进行分层、布局、光栅化生成绘制指令。
  12. 最后调用 GPU 渲染像素点。

# HTTP

# 概念

超文本传输协议,计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。

# 常见状态码

1xx 提示信息,表示协议处理的中间状态
2xx 成功

  • 200 OK
  • 204 无内容
  • 206 分块下载或断点上传

3xx 资源变动

  • 301 永久重定向
  • 302 临时重定向

4xx 请求有误

  • 400 请求有误(笼统)
  • 403 禁止访问
  • 404 未找到资源

5xx 服务器错误

  • 500 服务器错误(笼统)
  • 501 不支持该请求
  • 502 网关或代理错误
  • 503 服务器繁忙

# HTTP 字段

  • Host,指定服务器域名
  • Content-Length 数据长度
  • Connection 连接机制
  • Content-Type 数据类型
  • Content-Encoding、Accept-Encoding 压缩方法

# HTTP 缓存

强制缓存,用于长时间不会变化的资源
通过资源的 Cache-Control(资源有效期)响应头和 Expires(缓存到期时间)字段来判断资源是否过期,如果资源没有过期,浏览器直接使用缓存的资源,而不发送网络请求。

  • Cache-Control 优先级大于 Expires。
  • 最开始使用 Expires 表示资源的过期时间,但是由于客户端和服务器端时间可能不一致,从而导致一些问题
  • 后来出现 Cache-control 表示资源的过期时长。

协商缓存,用于不定时变化,但不会经常变化的资源
浏览器正常发送网络请求,服务端通过请求头判断是否要返回 304 状态码,表示浏览器可以使用本地缓存的资源。

  • Etag 优先级大于 Last-Modified。
  • 最开始使用 Last-Modified(资源最后修改时间)和 If-Modified-Since(上一次从服务器获取的 Last-Modified 值),但是 last-Modified 是以秒级别记录的,当资源在一秒内发生改变的话,last-modified 是无感知的。
  • 后面使用 Etag(资源唯一标识)和 If-None-Match(上一次从服务器获取的 Etag),比对服务器的 Etag,如果比对相同就返回 304 状态码。

# HTTPS 和 HTTP 的不同

HTTPS 就是在 HTTP 的基础之上,进行了 TLS 加密(前身是 SSL),进行信息加密和身份验证。

  • SSL 证书,就是保存在服务器的证书文件,服务端需要向 CA 证书授权中心申请
  • SSL 加密过程先通过非对称加密获取密钥,然后通过对称加密进行通信,从而避免了非对称加密繁琐的过程

具体加密的过程就是:

  • 客户端发送自己支持的加密方式,并给出第一随机数
  • 服务端发送自己的加密方式、证书、并给出第二随机数
  • 客户端根据两个随机数随机生成预主密钥,通过证书中的公钥对预主密钥进行加密,发送给服务端
  • 服务端通过私钥对加密的预主密钥进行解密,获取到预主密钥
  • 双方通过第一随机数、第二随机数和预主密钥混合,得到会话密钥,双方的相同

对称加密的过程就是:

  • 后续双方都使用会话密钥进行加密,会话密钥只在当前会话中有效。

# HTTP 版本

HTTP1.1

  • 核心:pipeline 管道模式,请求到一个之后才能去请求下一个,其中有一个没有收到就会导致后面的都接收不到,从而导致 HTTP 队头阻塞
  • 持久连接,保持连接状态,每个域有最大的持久连接数(HTTP 队头阻塞):chrome 为 6 个,其他浏览器各不相同(减少请求次数:域名分片、精灵图和 base64 图片)
  • 首部重复发送(尤其是 cookie)
  • 明文传输,报文进行压缩,但是首部不压缩

HTTP2

  • 多路复用(用于解决 HTTP 队头阻塞问题,但没有解决 TCP 层面的队头阻塞问题,由于 TCP 数据包中没有数据帧,为了可靠性需要需要等到全部的数据包响应完成)
  • 头部压缩,多个请求相同时,会帮助消除重复的部分。
  • 服务器推送(将浏览器需要的文件提前发送)
  • 报文变为二进制的帧格式,增加了传输效率

HTTP3

  • 基于 UDP 协议和 TLS 构建出 QUIC 协议,没有 TCP 的三次握手,解决了 TCP 队头阻塞的问题,QUIC 帧中就有数据帧,解决了 TCP 层面的队头阻塞的问题,实现多路复用
  • 具体解决方式是使用: 流帧 ,QUIC 的流帧分别跟踪每个流的字节范围,当一个 QUIC 数据包丢失时,只有属于那个特定流的数据会被阻塞,其他流可以正常处理

# ipv4 和 ipv6

ipv4 使用 4 个字节,大小有限不够使用了,所以有了 ipv6,ipv6 使用 16 个字节

# 图解网络

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

dmq 微信支付

微信支付

dmq 支付宝

支付宝