mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-26 21:26:41 +08:00
799 lines
23 KiB
HTML
799 lines
23 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
|
||
<head>
|
||
|
||
<head>
|
||
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
|
||
|
||
<link rel="icon" href="/static/favicon.png">
|
||
|
||
<title>03 OSI的灵魂就是我 - 网络层.md.html</title>
|
||
|
||
<!-- Spectre.css framework -->
|
||
|
||
<link rel="stylesheet" href="/static/index.css">
|
||
|
||
<!-- theme css & js -->
|
||
|
||
<meta name="generator" content="Hexo 4.2.0">
|
||
|
||
</head>
|
||
|
||
|
||
|
||
<body>
|
||
|
||
|
||
|
||
<div class="book-container">
|
||
|
||
<div class="book-sidebar">
|
||
|
||
<div class="book-brand">
|
||
|
||
<a href="/">
|
||
|
||
<img src="/static/favicon.png">
|
||
|
||
<span>技术文章摘抄</span>
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<div class="book-menu uncollapsible">
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li><a href="/" class="current-tab">首页</a></li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li><a href="../">上一级</a></li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/01 我应该站在谁的肩膀上 - OSI vs TCPIP模型.md.html">01 我应该站在谁的肩膀上 - OSI vs TCPIP模型.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/02 万丈高楼平地起- 物理层 + 数据链路层.md.html">02 万丈高楼平地起- 物理层 + 数据链路层.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
<a class="current-tab" href="/专栏/全解网络协议/03 OSI的灵魂就是我 - 网络层.md.html">03 OSI的灵魂就是我 - 网络层.md.html</a>
|
||
|
||
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/04 要快还是要稳你说好了 - 传输层.md.html">04 要快还是要稳你说好了 - 传输层.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/05 是时候展现真正的技术了 - 应用层.md.html">05 是时候展现真正的技术了 - 应用层.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/06 重回小学课堂 - 二进制101.md.html">06 重回小学课堂 - 二进制101.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/07 1+1 = 2吗? - 二进制的计算.md.html">07 1+1 = 2吗? - 二进制的计算.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/08 16进制又是个什么鬼? - 16进制的讲解.md.html">08 16进制又是个什么鬼? - 16进制的讲解.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/09 我想有个家 - 什么是IP地址.md.html">09 我想有个家 - 什么是IP地址.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/10 我可是住二环的人 - IP地址的组成和分类.md.html">10 我可是住二环的人 - IP地址的组成和分类.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/11 我已经没地方住了吗 - IPv6.md.html">11 我已经没地方住了吗 - IPv6.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/12 向左还是向右 - IP路由.md.html">12 向左还是向右 - IP路由.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/13 我能给你安全感 - TCP(一).md.html">13 我能给你安全感 - TCP(一).md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/14 我那不为人知的秘密是什么 - TCP(二).md.html">14 我那不为人知的秘密是什么 - TCP(二).md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/15 不问收没收到,就问快不快 - UDP.md.html">15 不问收没收到,就问快不快 - UDP.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/16 我为什么与众不同 - TCP高级篇(拥塞模型).md.html">16 我为什么与众不同 - TCP高级篇(拥塞模型).md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/17 来,先看看我的家谱 - HTTP的身世.md.html">17 来,先看看我的家谱 - HTTP的身世.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html">18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/19 我老了,让我儿子来吧 - HTTP2.md.html">19 我老了,让我儿子来吧 - HTTP2.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/20 稳重的大外甥 - HTTPS.md.html">20 稳重的大外甥 - HTTPS.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/21 HTTP的高级篇 - HTTPClient(Java).md.html">21 HTTP的高级篇 - HTTPClient(Java).md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/22 想来我家,你自己查呀 - DNS.md.html">22 想来我家,你自己查呀 - DNS.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/23 来的早,不如来得巧 - NAT.md.html">23 来的早,不如来得巧 - NAT.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/24 辛苦的邮政 - SMTP.md.html">24 辛苦的邮政 - SMTP.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/25 你就是看不见我 - VPN.md.html">25 你就是看不见我 - VPN.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/26 黑客的好帮手 - SSH.md.html">26 黑客的好帮手 - SSH.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html">27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/28 你怎么证明你就是你 - 身份验证和访问控制.md.html">28 你怎么证明你就是你 - 身份验证和访问控制.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html">29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html">30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/31 如何保护我的考研资料 - 网络攻击防范.md.html">31 如何保护我的考研资料 - 网络攻击防范.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/32 Linux网络安全 - 安全实战.md.html">32 Linux网络安全 - 安全实战.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/全解网络协议/33 结语.md.html">33 结语.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
|
||
|
||
<div class="sidebar-toggle-inner"></div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<script>
|
||
|
||
function add_inner() {
|
||
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
|
||
inner.classList.add('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
function remove_inner() {
|
||
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
|
||
inner.classList.remove('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
function sidebar_toggle() {
|
||
|
||
let sidebar_toggle = document.querySelector('.sidebar-toggle')
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let content = document.querySelector('.off-canvas-content')
|
||
|
||
if (sidebar_toggle.classList.contains('extend')) { // show
|
||
|
||
sidebar_toggle.classList.remove('extend')
|
||
|
||
sidebar.classList.remove('hide')
|
||
|
||
content.classList.remove('extend')
|
||
|
||
} else { // hide
|
||
|
||
sidebar_toggle.classList.add('extend')
|
||
|
||
sidebar.classList.add('hide')
|
||
|
||
content.classList.add('extend')
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
function open_sidebar() {
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
|
||
sidebar.classList.add('show')
|
||
|
||
overlay.classList.add('show')
|
||
|
||
}
|
||
|
||
function hide_canvas() {
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
|
||
sidebar.classList.remove('show')
|
||
|
||
overlay.classList.remove('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
</script>
|
||
|
||
|
||
|
||
<div class="off-canvas-content">
|
||
|
||
<div class="columns">
|
||
|
||
<div class="column col-12 col-lg-12">
|
||
|
||
<div class="book-navbar">
|
||
|
||
<!-- For Responsive Layout -->
|
||
|
||
<header class="navbar">
|
||
|
||
<section class="navbar-section">
|
||
|
||
<a onclick="open_sidebar()">
|
||
|
||
<i class="icon icon-menu"></i>
|
||
|
||
</a>
|
||
|
||
</section>
|
||
|
||
</header>
|
||
|
||
</div>
|
||
|
||
<div class="book-content" style="max-width: 960px; margin: 0 auto;
|
||
|
||
overflow-x: auto;
|
||
|
||
overflow-y: hidden;">
|
||
|
||
<div class="book-post">
|
||
|
||
<p id="tip" align="center"></p>
|
||
|
||
<div><h1>03 OSI的灵魂就是我 - 网络层</h1>
|
||
|
||
<p>网络对网络的连接使互联网成为可能。 “网络层”是Internet通信过程的一部分,通过在不同网络之间来回发送数据包来进行这些连接。在7层OSI模型中,网络层是第3层。该层确定如何将数据发送到接收设备。它负责数据包转发,路由和寻址。在网络之间以数据包的形式传输数据段。当你向朋友发送消息时,此层将源IP地址和目标IP地址分配给数据段。你的IP地址是源,而你的朋友的IP是目的地。第3层还确定了数据传递的最佳路径。Internet协议(IP)是该层使用的主要协议之一,另外还有一些其他路由,测试和加密协议。</p>
|
||
|
||
<p><img src="assets/20210201144003157.png" alt="在这里插入图片描述" /></p>
|
||
|
||
<p>假设美国队长和黑寡妇连接到相同的局域网(LAN)来做给wayz(美版高德)做兼职配音,美国队长想要向黑寡妇发送消息。因为美国队长和黑寡妇在同一网络上,所以他可以将其直接通过网络发送到她的计算机上。但是,如果黑寡妇位于几英里之外的其他LAN上,则必须先处理美国队长的消息,然后将其发送到黑寡妇的网络,然后才能到达她的计算机,这是网络层的过程。</p>
|
||
|
||
<p>网络层可以想象成邮件载体,因为网络层的工作是弄清楚如何在网络之间获得最佳数据。我们几乎假设如果我们要调用第3层,那就是从一个网络转到另一个网络。甚至在数据中心内,你可能为Web服务器设置了一个网络,为数据库服务器设置了另一个网络。虽然它们物理上位于同一数据中心,但仍然是不同的网络,这无关紧要。因此,第3层就是使用路由表来了解网络在哪里以及谁可以访问它们。对我来说,这就像一个邮递员。你不一定知道朋友家在哪里。当你发送一封信给他们时,他们可能处于完全不同的州,国家或地区。邮递员根据他们的路由协议弄清楚,这类似于邮政编码,地址以及你所居住的地方。第3层的一些示例协议是IP,OSPF(即开放式最短路径优先),RIP(即路由信息协议)之类的东西,你真的不会再看到RIP了。有RIP,有RIP版本2,但是实际上,我没有遇到太多使用RIP的网络,但是我相信你可能对此有所了解,因为它在很长一段时间内都是非常流行的协议。最后,BGP是边界网关协议,Internet的核心路由使用BGP。理解起来很复杂,但是很有趣。</p>
|
||
|
||
<h3>我们一直在说网络,那什么是网络?</h3>
|
||
|
||
<p>网络是一组两个或更多连接的计算设备。通常,网络中的所有设备都连接到中央集线器,例如路由器。网络还可以包括子网或该网络的较小细分。子网是指非常大的网络(例如ISP提供的网络)能够管理数千个IP地址和连接的设备。将Internet视为网络中的网络:计算机在网络内相互连接,并且这些网络与其他网络连接。这样一来,这些计算机就可以与附近的其他计算机连接。</p>
|
||
|
||
<h3>那网络层又干了什么呢?</h3>
|
||
|
||
<p>与网络连接有关的任何事情都发生在网络层。这包括设置数据包采用的路由,检查其他网络中的服务器是否已启动并正在运行以及寻址和接收来自其他网络的IP数据包。这最后一个过程可能是最重要的,因为绝大多数Internet通信都是通过IP发送的。</p>
|
||
|
||
<h3>网络层的主要功能</h3>
|
||
|
||
<ul>
|
||
|
||
<li>路由:当数据包到达路由器的输入链路时,路由器会将数据包移动到路由器的输出链路。例如,从S1到R1的数据包必须转发到S2路径上的下一个路由器</li>
|
||
|
||
<li>逻辑寻址:数据链路层实现物理寻址,网络层实现逻辑寻址。逻辑寻址还用于区分源系统和目标系统。网络层在数据包中添加一个标头,其中包含发送者和接收者的逻辑地址。</li>
|
||
|
||
<li>互联网络:这是网络层的主要角色,它提供了不同类型网络之间的逻辑连接。</li>
|
||
|
||
<li>分段:分段是将数据包分解为通过不同网络传播的最小的单个数据单元的过程。</li>
|
||
|
||
</ul>
|
||
|
||
<h3>网络层提供的服务</h3>
|
||
|
||
<ul>
|
||
|
||
<li>可靠的交付:该层提供的服务可确保数据包将到达其目的地。</li>
|
||
|
||
<li>带有延迟限制的保证传送:此服务保证在指定的主机到主机延迟限制内传送数据包。</li>
|
||
|
||
<li>有序数据包:此服务可确保数据包按其发送顺序到达目的地。</li>
|
||
|
||
<li>保证最大抖动:此服务可确保在发送方两次连续传输之间花费的时间等于在发送方两次接收之间的时间。</li>
|
||
|
||
<li>安全服务:网络层通过使用源主机和目标主机之间的会话密钥来提供安全性。源主机中的网络层对发送到目标主机的数据报的有效载荷进行加密。然后,目标主机中的网络层将解密有效负载。以这种方式,网络层维护数据完整性和源认证服务。</li>
|
||
|
||
</ul>
|
||
|
||
<h3>什么是数据包呢?</h3>
|
||
|
||
<p>通过Internet发送的所有数据都被分解为称为“数据包”的较小数据块。例如,当美国队长向黑寡妇发送消息时,他的消息被分解成较小的部分,然后在黑寡妇的计算机上重新组合。数据包有两部分:标题(包含有关数据包本身的信息)和正文(正在发送的实际数据,比如说前方有监控,请减速慢行)。</p>
|
||
|
||
<p>在网络层,当数据包通过Internet发送时,网络软件会在每个数据包上附加一个标头,另一方面,网络软件可以使用标头来了解如何处理该数据包。(这部分会在后面讲ip的时候,详细讲解)</p>
|
||
|
||
<p>标头包含有关每个数据包的内容,源和目标的信息(有点像在目标和返回地址上标记信封)。例如,IP标头包含每个数据包的目标IP地址,数据包的总大小,在传输过程中是否已将数据包分段(分解成更小的片段)的指示以及多少个计数数据包经过的网络。</p>
|
||
|
||
<p>还记得我们之前说过在TCP / IP模型中,没有“网络”层。 OSI模型网络层大致对应于TCP/IP模型Internet层。在OSI模型中,网络层为第3层。在TCP/IP模型中,Internet层是第2层。换句话说,网络层和Internet层基本上是同一件事,但是它们来自Internet工作方式的不同模型。</p>
|
||
|
||
<h3>什么是IP?</h3>
|
||
|
||
<p>因为这一层主要的协议是IP。 那什么是IP呢?IP就是IP地址和IP地址用句点分隔的四个数字,代表网络上的第四个Rh标识设备。我们将I P地址分配给网络上设备的网络接口卡,并且我们的IP地址分为两部分。它具有网络部分或网络主管,并且具有主机部分。网络部分标识AH组联网设备。主机部分标识该特定网络上的单个设备。这与我们的地址将特定的街道地址识别为个人的方式非常相似。将房子的空气和邮政编码标识为一般区域,在该区域中,有很多房子的地址不同,但是它们都属于相同的邮政编码或地址。我们有邮政编码,有点像我们的网络长官,还有我们的主机部分,有点像我们的地址。我们在邮编中具有唯一标识或邮政编码,并且在邮编中具有通用标识。IP地址以四个十进制数字的格式写入。这些十进制数字中的每一个我们称为八位字节。因此203.0.113.10那里有四个八位字节。每个八位位组。它包含八个二进制位。因此,我们的IP/4地址始终为32位长。我们将其分为四组,每组八位,然后将它们转换回十进制,以便将其编程到计算机中并进行讨论。因为IP是那么的重要。我们后面会有一节专门讲解IP的课程。</p>
|
||
|
||
<h3>那在这一层都有什么协议呢?</h3>
|
||
|
||
<p>协议是一种公认的格式化数据的方式,以便两个或多个设备能够相互通信并相互理解。许多不同的协议使网络层的连接,测试,路由和加密成为可能,包括:IP, IPsec, ICMP, IGMP, GRE。你可以把这个当做一个窍门或者强行记忆也好,首先你要大概了解这个协议是做什么的,然后你知道了每一层是做什么的。这叫好像是一个连线题一样,把左右类似或者说相同功能连在一起,IP就不用说了,比如ICMP,全称是Internet Control Message Protocol。是一种错误报告协议,当网络问题阻止IP数据包的传递时,像路由器之类的网络设备会用于将错误消息生成到源IP地址。我给你介绍之后,还需要我告诉你他属于哪层吗?再来看以下GRE,不是你要出国考试的GRE,是一个协议(Generic Routing Encapsulation)- 通用路由封装是由思科系统公司开发的隧道协议,可以在Internet协议网络上的虚拟点对点链接或点对多点链接内部封装各种网络层协议。是不是很明显也是网络层的人。</p>
|
||
|
||
<p>这一小节可能讲的比较抽象。那是因为我们后面有专门的IP专题,所以不想多讲IP的事情。然而网络层的最大赢家就是IP。所以就从宏观来聊一下网络层。</p>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div>
|
||
|
||
<div style="float: left">
|
||
|
||
<a href="/专栏/全解网络协议/02 万丈高楼平地起- 物理层 + 数据链路层.md.html">上一页</a>
|
||
|
||
</div>
|
||
|
||
<div style="float: right">
|
||
|
||
<a href="/专栏/全解网络协议/04 要快还是要稳你说好了 - 传输层.md.html">下一页</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
|
||
|
||
</div>
|
||
|
||
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7099762178e33cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
|
||
|
||
</body>
|
||
|
||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
|
||
|
||
<script>
|
||
|
||
window.dataLayer = window.dataLayer || [];
|
||
|
||
|
||
|
||
function gtag() {
|
||
|
||
dataLayer.push(arguments);
|
||
|
||
}
|
||
|
||
|
||
|
||
gtag('js', new Date());
|
||
|
||
gtag('config', 'G-NPSEEVD756');
|
||
|
||
var path = window.location.pathname
|
||
|
||
var cookie = getCookie("lastPath");
|
||
|
||
console.log(path)
|
||
|
||
if (path.replace("/", "") === "") {
|
||
|
||
if (cookie.replace("/", "") !== "") {
|
||
|
||
console.log(cookie)
|
||
|
||
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
|
||
|
||
}
|
||
|
||
} else {
|
||
|
||
setCookie("lastPath", path)
|
||
|
||
}
|
||
|
||
|
||
|
||
function setCookie(cname, cvalue) {
|
||
|
||
var d = new Date();
|
||
|
||
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
|
||
|
||
var expires = "expires=" + d.toGMTString();
|
||
|
||
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
|
||
|
||
}
|
||
|
||
|
||
|
||
function getCookie(cname) {
|
||
|
||
var name = cname + "=";
|
||
|
||
var ca = document.cookie.split(';');
|
||
|
||
for (var i = 0; i < ca.length; i++) {
|
||
|
||
var c = ca[i].trim();
|
||
|
||
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
|
||
|
||
}
|
||
|
||
return "";
|
||
|
||
}
|
||
|
||
|
||
|
||
</script>
|
||
|
||
|
||
|
||
</html>
|
||
|