文章目录
- [1. 数据链路层](#1. 数据链路层)
- [2. 以太网帧格式](#2. 以太网帧格式)
- [3. MTU](#3. MTU)
-
- [3.1 认识MTU](#3.1 认识MTU)
- [3.2 MTU 对于 TCP 协议的影响](#3.2 MTU 对于 TCP 协议的影响)
- [4. 局域网通信原理](#4. 局域网通信原理)
- [5. ARP协议](#5. ARP协议)
-
- [5.1 基本概念](#5.1 基本概念)
- [5.2 原理](#5.2 原理)
- [5.3 ARP 数据报的格式](#5.3 ARP 数据报的格式)
- [6. NAT技术](#6. NAT技术)
- [7. 内网穿透](#7. 内网穿透)
- [8. 内网打洞](#8. 内网打洞)
- [9. 代理服务器](#9. 代理服务器)
-
- [9.1 正向代理](#9.1 正向代理)
- [9.2 反向代理](#9.2 反向代理)
- [9.3 NAT VS 代理服务器](#9.3 NAT VS 代理服务器)
- 10.网络总结

1. 数据链路层
真正在网络物理结构上传输的,是mac帧;但是逻辑上我们认为是IP报文在流动,实际是需要mac帧的支持的。
在局域网通信那里,我们知道局域网内是使用mac地址进行通信的,所以,数据链路层就是用来解决相邻主机间的通信问题。
MAC 地址用来识别数据链路层中相连的节点
- 长度为 48 位,即6 个字节。 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
- 在网卡出厂时就确定了,不能修改。 mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址,可能会冲突;也有些网卡支持用户配置 mac 地址)

- IP 地址描述的是路途总体的 起点 和 终点;
- MAC 地址描述的是路途上的每一个区间的起点和终点;
2. 以太网帧格式
"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如: 规定了网络拓扑结构,访问控制方式,传输速率等
例如以太网中的网线必须使用双绞线,传输速率有 10M, 100M, 1000M 等;
以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN 等
以太网帧格式:

- 源地址和目的地址是指网卡 MAC 地址,长度是6字节
- 帧协议类型字段有三种值,分别对应 IP、 ARP、 RARP;
- RARP是将MAC地址转换为IP地址
- 帧末尾是 CRC 校验码
3. MTU
3.1 认识MTU
MTU 相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层,产生的限制。
- 以太网帧中的数据长度规定最小 46 字节,最大 1500 字节,数据包的长度不够 46 字节,要在后面补填充位;
- 最大值 1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
- 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的 MTU了,则需要对数据包进行分片(fragmentation);
- 不同的数据链路层标准的 MTU 是不同的;
3.2 MTU 对于 TCP 协议的影响
让我们再回顾一下 TCP 协议:
- TCP 的一个数据报也不能无限大,还是受制于 MTU,TCP 的单个数据报的最大消息长度,称为MSS(Max Segment Size),
- TCP 在建立连接的过程中, 通信双方会进行 MSS 协商
- 最理想的情况下,MSS 的值正好是在 IP 不会被分片处理的最大长度 (即最大是1460(1500 MTU - 20IP报头 - 20传输层报头))
- 双方在握手发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值,然后双方得知对方的 MSS 值之后,选择较小的作为最终 MSS
- MSS 的值是在 TCP 首部的 40 字节变长选项中(如果有的话)
4. 局域网通信原理
局域网中的一台主机向局域网中发送信息时,该局域网中的所有主机都可以收到该信息
正如图上所画,局域网中的所有主机都能收到该数据帧,若多个主机同时向局域网中发送数据,会发送数据碰撞问题。
所以,为了避免局域网中产生数据碰撞问题,要保证,任何时刻,只有一台主机在使用局域网!
如果发生了碰撞,碰撞双方要休眠一段时间 (碰撞避免),然后再重发,
所以在数据链路层上,也有重发机制
此时,整个局域网就像临界资源,只有一台主机在使用局域网就是互斥。
令牌环网,其实它的令牌,就类似于锁,谁持有锁,谁就可以向局域网中发送数据
既然会发送碰撞,那么局域网中主机的数量肯定不能太多,多了容易碰撞,但万一多了怎么办?- - 引入交换机

所以,交换机的作用就是:划分碰撞域!
既然局域网中存在数据碰撞问题,那单台主机发送数据时,数据帧的长度是越短越好,还是越长越好?
- 数据帧不能太长,太长了主机发送单条数据的发送周期长,碰撞多
- 数据帧也不能太段,太短发送的次数太多了
- 所以,数据链路层规定,单词发送数据帧的长度不能超过MTU的长度!
5. ARP协议
5.1 基本概念

ARP 不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议
ARP 协议的作用:ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系
- 在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址;
- 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
- 因此在通讯前必须获得目的主机的硬件地址·

5.2 原理
ARP的原理非常简单:先广播、再单发
源主机发出 ARP 请求,询问"IP 地址是 192.168.0.1 的主机的硬件地址是多少"?并将这个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF
表示广播);
目的主机接收到广播的 ARP 请求,发现其中的 IP 地址与本机相符,则发送一个ARP 应答数据包给源主机,将自己的硬件地址填写在应答包中;
每台主机都维护一个 ARP 缓存表,可以用
arp -a
命令查看。 缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP 请求来获得目的主机的硬件地址

5.3 ARP 数据报的格式

注意:源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
- 硬件类型指链路层网络类型,1 为以太网;
- 协议类型 指要转换的地址类型,0x0800 为 IP 地址;
- 硬件地址长度对于以太网地址为 6 字节;
- 协议地址长度对于和 IP 地址为 4 字节;
ARP协议的前6个字节基本是固定的
- op 字段为 1 表示 ARP 请求 ,op 字段为 2 表示 ARP 应答
ARP工作流程:
首先我们要明确一点:任何一个主机,它都可能会收到ARP请求 (广播)或应答(它可能请求过别人)


6. NAT技术
路由器将 IP 首部中的 IP 地址进行替换(替换成路由器的 WAN 口 IP),这样逐级替换,最终数据包中的 IP 地址成为一个公网 IP,这种技术称为 NAT。
- NAT 技术当前解决 IP 地址不够用的主要手段,是路由器的一个重要功能;
- NAT 能够将私有 IP 对外通信时转为全局 IP,也就是就是一种将私有 IP 和全局IP 相互转化的技术方法
目前我们已经知道使用它可以缓解IP地址不足的问题,也能将信息转发到公网上;但是目前不知道如何将信息从公网再转发回内网。
在 NAT 路由器内部,有一张自动生成的,用于地址转换的表
如果局域网内有多个主机都访问同一个外网服务器,如果仅进行IP地址的替换,那么对于服务器返回的数据时,目的 IP 都是相同的,那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机呢?
这时候 NAPT 来解决这个问题了,使用 IP+port进行映射(映射本质是:内网进程和公网进程的映射关系)
这种关联关系也是由 NAT 路由器自动维护的。例如在 TCP 的情况下,建立连接时,就会生成这个表项;在断开连接后,就会删除这个表项
7. 内网穿透

8. 内网打洞

9. 代理服务器
9.1 正向代理

正向代理(Forward Proxy) 是一种常见的网络代理方式, 它位于客户端和目标服务器之间, 代表客户端向目标服务器发送请求。
正向代理服务器接收客户端的请求 ,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。 通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。
工作原理
- 客户端将请求发送给正向代理服务器。
- 正向代理服务器接收请求, 并根据配置进行处理, 如缓存查找、 内容过滤等。
- 正向代理服务器将处理后的请求转发给目标服务器。
- 目标服务器处理请求, 并将响应返回给正向代理服务器。
- 正向代理服务器将响应返回给客户端。
功能特点
- 缓存功能 : 正向代理服务器可以缓存经常访问的资源, 当客户端再次请求这些资源时,可以直接从缓存中获取, 提高访问速度。
- 内容过滤 : 正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等。
- 访问控制: 通过正向代理,可以实现对特定网站的访问控制, 如限制员工在工作时间访问娱乐网站。
- 隐藏客户端身份: 正向代理可以隐藏客户端的真实 IP 地址, 保护客户端的隐私。
- 负载均衡: 在多个目标服务器之间分配客户端请求, 提高系统的可扩展性和可靠性。
应用场景
公共网络环境: 在公共场所如图书馆、 学校等提供的网络环境中, 通过正向代理可以实现对网络资源的合理分配和管理, 确保网络使用的公平性和安全性。
跨境电商与海外访问: 对于跨境电商或需要访问海外资源的企业和个人, 正向代理可以帮助他们突破网络限制, 顺畅地访问海外网站和资源。
9.2 反向代理
反向代理服务器是一种网络架构模式, 其作为 Web 服务器的前置服务器, 接收来自客户端的请求, 并将这些请求转发给后端服务器, 然后将后端服务器的响应返回给客户端。
这种架构模式可以提升网站性能、 安全性和可维护性等

基本原理
- 反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先会到达反向代理服务器。
- 反向代理服务器会根据配置的规则将请求转发给后端的 Web服务器,并将 Web 服务器的响应返回给客户端。 在这个过程中,客户端并不知道实际与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。
应用场景
- 负载均衡: 反向代理服务器可以根据配置的负载均衡策略, 将客户端的请求分发到多个后端服务器上, 以实现负载均衡。 这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。
- 动静分离: 在大型网站中, 通常需要将静态资源和动态资源分开处理。 通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。 这可以大大提升静态资源的访问速度
9.3 NAT VS 代理服务器
路由器往往都具备 NAT 设备的功能,通过 NAT 设备进行中转,完成子网设备和其他子网设备的通信过程。
代理服务器看起来和 NAT 设备有一点像,客户端像代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端。
那么 NAT 和代理服务器的区别有哪些呢?
- 从应用上讲,NAT 设备是网络基础设备之一,解决的是 IP 不足的问题。代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器.
- 从底层实现上讲,NAT 是工作在网络层,直接对 IP 地址进行替换;代理服务器往往工作在应用层.
- 从使用范围上讲, NAT 一般在局域网的出口部署;代理服务器可以在局域网做,也可以在广域网做,也可以跨网
- 从部署位置上看,NAT 一般集成在防火墙, 路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上
10.网络总结
- 请描述一下一次网络转发的完整过程:
- 从应用层,把数据做序列化,转换成字符串,然后把他从应用层拷贝到TCP的发送缓冲区(一旦到了这里,发送数据就与用户无关了,由OS自己决定)
- TCP结合滑动窗口、流量控制、超时重传等策略,把数据包可能拆分成若干数据段,添加TCP报头,向下交付给IP
- 添加IP报头,封装成MAC帧,然后进行路由
- 路由的过程涉及:局域网通信,路由表查找,ARP的过程
- 到达目标主机,在自底向上,根据每一层协议的分包、分用,把报头向上交付,直到对方的接收缓冲区
- 应用层再采用read或recv将数据从缓冲区拷贝到应用层,然后解决粘包问题,进行反序列化,得到结构化数据
- 处理,将处理后的字符串,将上述过程再做一遍,即可完成一次完整的通信过程。
- 数据链路层
- 数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据
- 以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
- 以太网帧格式
- 理解 mac 地址
- 理解 arp 协议
- 理解 MTU
- 网络层
- 网络层的作用L在复杂的网络环境中确定一个合适的路径.
- 理解 IP 地址,理解 IP 地址和 MAC 地址的区别.
- 理解 IP 协议格式.
- 了解网段划分方法
- 理解如何解决 IP 数目不足的问题,掌握网段划分的两种方案,理解私有 IP 和公网 IP
- 理解网络层的 IP 地址路由过程,理解一个数据包如何跨越网段到达最终目的地.
- 理解 IP 数据包分包的原因.
- 了解 ICMP 协议.
- 了解 NAT 设备的工作原理
- 传输层
- 传输层的作用: 负责数据能够从发送端传输接收端.
- 理解端口号的概念.
- 认识 UDP 协议, 了解 UDP 协议的特点.
- 认识 TCP 协议, 理解 TCP 协议的可靠性. 理解 TCP 协议的状态转化.
- 掌握 TCP 的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延迟应答, 捎带应答特性.
- 理解 TCP 面向字节流, 理解粘包问题和解决方案.
- 能够基于 UDP 实现可靠传输.
- 理解 MTU 对 UDP/TCP 的影响.
- 应用层
- 应用层的作用: 满足我们日常需求的网络程序, 都是在应用层
- 能够根据自己的需求, 设计应用层协议.
- 了解 HTTP 协议.
- 理解 DNS 的原理和工作流程.
