1. 认识以太网
认知:以太网是用于局域网数据通信的协议标准,定义了同一局域网内通过电缆/无线怎么在设备之间传输数据帧。
注:整个网络世界可以具象看出由许许多多的局域网组成,
• 家庭中的设备A and 家庭中的设备B and 家庭路由器(出入口)
• 家庭A的路由器 and 家庭B的路由器 and 社区路由器(出入口)
• 社区A的路由器 and 社区B的路由器 and 市区路由器(出入口)
• A省的路由器 and B省路由器 and 国家路由器(出入口)
• A国路由器 and B国路由器 and C国路由器.......
路由器构成了每个局域网的出入口
注:把链路层发送的数据叫做数据帧!
• 6位目的地址 and 6位源地址:目的Mac地址 and 源Mac地址
• 类型:上层传递下来有效载荷的协议类型,字段对应 IP、ARP、RARP;
注:0800对应IP,0806对应ARP,0835对应RARP,后续两个稍后再说
问:以太网协议怎么分离报头和有效载荷?
答:报头为固定长度
认知:网络中传输的报文带两个地址,一个是MAC地址一个是IP地址,IP地址决定了下一目的地的Mac地址的选择,IP地址是你的最终目的地,MAC地址是中途的临时地址。
2. 局域网的通信过程
假设同一局域网内,主机A发送报文给主机E,主机A会将报文发送到当前局域网中,所有的主机收到该报文时,会将自己的Mac地址和该条报文的前6位字节进行比较,发现不合符目标Mac地址,于是丢弃,上层意识不到下层已经接受过报文了。主机E发现自己的Mac地址和报文中的目的Mac地址相同,于是开始向上层层交付。
认知:局域网就是一个碰撞域,一次只能发送一个数据帧,如果同时发送多个数据,就会出现碰撞问题,导致数据丢失。因此在局域网通信时,单个数据帧要有下限和上限(46~1500)
注:这个是硬件工程师规定的。
思考:在网络通信的过程中,对于访问者个人而言,他是知道目的主机的IP的,想想socket通信时,我们需要输入对端的IP+端口号才能够访问,所以知道对端的IP对于主机A不是问题,但是!主机A是怎么知道主机E的Mac地址的?
答:ARP协议!
3. 认识ARP协议
ARP协议属于数据链路层协议之一,他位于网络层协议和以太网协议的中间,结构如图,属于定长协议
以太网首部、以太网源地址、发送端以太网地址、发送端IP地址、目的IP地址 不过多介绍
• 硬件类型:1代表以太网
• 协议类型:0800代表IP协议
• op:1表示ARP请求,2表示ARP应答
• 目的以太网地址:初始情况下为 FFFFFF
问:前面说了,数据帧的下限为46字节,为什么ARP请求只有28?
答:末尾的PAD用于填充垃圾数据(0or1),来保证满足数据帧长度的下限,读取的时候不会出问题。
3.1 通过ARP协议如何得知目的IP的Mac地址?
注:假设还是主机A发送报文给主机E
因为主机A不知道主机E的Mac地址,所以起初他会发送ARP协议数据帧,该帧中将op设置为1,表示为请求ARP,将该数据帧在局域网内广播(对应先前讲的广播IP),局域网内所有的主机都会收到该条数据帧,并对其进行ARP协议解析,当发现其目的IP地址与当前主机的IP地址不对应时,就丢弃该条报文。
主机E做解析后 发现 op字段为1 是请求,并且目的IP地址与自己的IP地址对应,并且为请求, 主机E需要做应答处理,将op设置为2,并且此时ARP协议中的目的以太网地址为主机A的地址,源以太网地址为主机E的Mac地址,将该数据帧再次发送到局域网内,非相关的主机仍然收到了这条数据帧,只不过这次因为目的Mac已知,非相关的主机直接丢弃数据帧
对于主机A,先看op字段为2 表示应答,得到了主机E的Mac地址,后续就可以将带数据的数据帧发给主机E了
细节1:主机都会在一段时间内(分钟级别),记录下来当前局域网中各个IP对应的Mac地址的映射关系
问:为什么不永久记录下来?
答:IP是变化的,MAC地址换了网口后也是变化的
细节2:相同局域网内的两台主机会通过上述方法得知目标Mac地址,对于不同局域网内的两台主机,通信时,会先通过上述方法,知道当前局域网内路由器的Mac地址,然后发送报文,报文到达了新的路由器时,他得找下一个路由器的Mac地址,就会重复上述过程,直至发给目标主机。目标IP不会变,但是Mac地址一直会变,所以路由器中只需要记录IP地址,可以通过ARP协议的请求与应答去查下一目的地的Mac地址
4. NAT技术的相关问题
问题:先前讲述了NAT技术的含义,报文从主机A通过公网传到服务器的过程大致理解了,那么服务器的应答怎么通过公网传给主机A?
答:借助NAPT转换表
NAPT转换表:记录 源IP+port/目的IP+端口 和 NAT路由器wan口IP地址 + 端口/目的IP+端口 的映射关系 当外部服务器发送回应时,他的 目的 IP+端口 是NAT路由器的WAN口IP+端口,他会查表做对应替换,更改目标ip+端口、
• 这张表是路由器自己维护的
• 除了ip会替换,必要的时候NAT路由器内的端口号也会替换,为了避免冲突(多个主机访问同一个服务器的时候)
• 私有IP在不同内网中可以重复,同一个内网中不可以重复
• 这张表从内到外,从外到内都是唯一键值对wan口ip+端口是唯一的,多个主机访问同一路由器,wan口ip相同,但是端口是不同的(IP相同不要紧,端口不同就可以)
• 从内往外访问服务器时,途径的每个由路由器都会构建NAPT表,回来的时候就可以做内网穿透
内网穿透:借助NAPT转换表 内网设备能够被外网访问,
认知1:NAT就是这个世界网络的真相
认知2:上述路由表内的键值关系越多,路由器越好也越贵,所以就区分了家用路由器和企业路由器
认知3:外网无法直接到内部,这就是为什么所有的服务器你得必须登录后才能访问,用户得先做些什么,服务器才能够给你回应。用户访问服务器的过程就是在建表的过程。
5. 正向代理
正向代理:(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等
工作原理:• 客户端将请求发送给正向代理服务器。
• 正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。
• 正向代理服务器将处理后的请求转发给目标服务器。
• 目标服务器处理请求,并将响应返回给正向代理服务器。
• 正向代理服务器将响应返回给客户端。
缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资
源时,可以直接从缓存中获取,提高访问速度。
• 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、
阻止恶意网站等。
• 访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作
时间访问娱乐网站。
• 隐藏客户端身份:正向代理可以隐藏客户端的真实 IP 地址,保护客户端的隐私。
• 负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠
性。
6. 反向代理
反向代理:服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收
来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回
给客户端。这种架构模式可以提升网站性能、安全性和可维护性等
基本原理:反向代理服务器位于客户端和 Web 服务器之间,当客户端发起请求时,它首先
会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web
服务器,并将 Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际
与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。
7. NAT和代理服务器
• 路由器往往都具备 NAT 设备的功能, 通过 NAT 设备进行中转, 完成子网设备和其他子
网设备的通信过程
• 代理服务器看起来和 NAT 设备有一点像. 客户端像代理服务器发送请求, 代理服务器将
请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户
端
问:代理服务器和NAT有何区别?
答:
• 从应用上讲, NAT 设备是网络基础设备之一, 解决的是 IP 不足的问题 、代理服务器则是更贴近具体应用, 比如通过代理服务器进行科学上网, 另外像迅游这样的加速器, 也是使用代理服务器.
• 从底层实现上讲, NAT 是工作在网络层, 直接对 IP 地址进行替换. 代理服务器往往工作在应用层.
• 从使用范围上讲, NAT 一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网
• 从部署位置上看, NAT 一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.
8. 内网打洞
内网打洞:是指通过 NAT 穿透 技术,使得 两个内网设备(或一个内网设备和外网设备)之间能够直接通信,而不需要借助中介服务器。内网打洞一般用于 P2P(对等)通信,使得两台设备可以通过直接连接互相通信。
9. 交换机
交换机:如果一个局域网内的主机数量过多,就需要用到交换机,交换机工作在数据链路层
交换机的核心作用:划分碰撞域
主机A如果想把数据发给主机D,交换机识别到主机A和主机D在一个碰撞域中,就不会做转发,减小另一个碰撞域的碰撞概率。
10. 回顾TCP/IP网络的四层结构体系
• 应用层:解决 业务处理 ,如Web游浏览、电子邮件、文件传输
回答了我收到报文该怎么处理的问题。
• 传输层:解决 通信可靠性、数据传输的完整性、流量控制 等问题
回答了我该如何将报文有效传给对方的问题。
• 网络层:解决 长距离通信 的问题
回答了我该将报文传给谁的问题。
• 链路层:解决子网内通信 问题
回答了同一局域网内,报文怎么传给对方的问题
网络四层从下到上:怎么传 → 传给谁 → 怎么可靠的传 → 传过去后怎么处理的?
问题:描述一下浏览器从发起http到得到网页的整个过程,越详细越好
答:
①. 解析URL,获得域名、参数、路径、协议
②. 解析域名获得 IP地址 and 端口号
③. connect 发起三次握手请求,该过程不会传输有效载荷,只含报头
注:三次请求的过程中,确定了双方接收缓冲区的大小从而确定了内部滑动窗口的大小,确定了传输层每次发送最大报文的大小
④. 该报文通过网络层做路径选择,根据目的IP确定下一跳IP地址,链路层获得下一跳的Mac地址,将报文路由给下一跳
注:这里涉及了一个网络IP的划分,从公网到内网的一个转换,内网ip是怎么转到公网的,公网ip又是怎么把回应发到内网的(内网发送报文时,会在各个路由器内将源IP和路由器的WAN口ip做转换,转换时会维护一张NAPT表,好做后续的内网穿透,当WAN口IP是公网IP时,不再转换)
⑤. 三次握手成功,客户端发送请求
⑥. 服务端回复相应
⑦. 客户端渲染界面