-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.html
171 lines (150 loc) · 27.6 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="format-detection" content="telephone=no"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><link rel="icon" href="/images/favicon_package_v0.16/favicon-16x16.png?v=2.6.2" type="image/png" sizes="16x16"><link rel="icon" href="/images/favicon_package_v0.16/favicon-32x32.png?v=2.6.2" type="image/png" sizes="32x32"><meta property="og:type" content="website">
<meta property="og:title" content="在下的小书架">
<meta property="og:url" content="http://yoursite.com/index.html">
<meta property="og:site_name" content="在下的小书架">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="zxr">
<meta name="twitter:card" content="summary"><title>在下的小书架</title><link ref="canonical" href="http://yoursite.com/index.html"><link rel="dns-prefetch" href="https://cdn.jsdelivr.net"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css" type="text/css"><link rel="stylesheet" href="/css/index.css?v=2.6.2"><script>var Stun = window.Stun || {};
var CONFIG = {
root: '/',
algolia: undefined,
assistSearch: undefined,
fontIcon: {"prompt":{"success":"fas fa-check-circle","info":"fas fa-arrow-circle-right","warning":"fas fa-exclamation-circle","error":"fas fa-times-circle"},"copyBtn":"fas fa-copy"},
sidebar: {"offsetTop":"20px","tocMaxDepth":6},
header: {"enable":true,"showOnPost":true,"scrollDownIcon":false},
postWidget: {"endText":true},
nightMode: {"enable":true},
back2top: {"enable":true},
codeblock: {"style":"default","highlight":"light","wordWrap":false},
reward: false,
fancybox: false,
zoomImage: {"gapAside":"20px"},
galleryWaterfall: undefined,
lazyload: false,
pjax: undefined,
externalLink: {"icon":{"enable":true,"name":"fas fa-external-link-alt"}},
shortcuts: undefined,
prompt: {"copyButton":"复制","copySuccess":"复制成功","copyError":"复制失败"},
sourcePath: {"js":"js","css":"css","images":"images"},
};
window.CONFIG = CONFIG;</script><meta name="generator" content="Hexo 4.2.1"></head><body><div class="container" id="container"><header class="header" id="header"><div class="header-inner"><nav class="header-nav header-nav--fixed"><div class="header-nav-inner"><div class="header-nav-menubtn"><i class="fas fa-bars"></i></div><div class="header-nav-menu"><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/"><span class="header-nav-menu-item__icon"><i class="fas fa-home"></i></span><span class="header-nav-menu-item__text">首页</span></a></div><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/archives/"><span class="header-nav-menu-item__icon"><i class="fas fa-folder-open"></i></span><span class="header-nav-menu-item__text">归档</span></a></div><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/categories/"><span class="header-nav-menu-item__icon"><i class="fas fa-layer-group"></i></span><span class="header-nav-menu-item__text">分类</span></a></div><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/tags/"><span class="header-nav-menu-item__icon"><i class="fas fa-tags"></i></span><span class="header-nav-menu-item__text">标签</span></a></div></div><div class="header-nav-mode"><div class="mode"><div class="mode-track"><span class="mode-track-moon"></span><span class="mode-track-sun"></span></div><div class="mode-thumb"></div></div></div></div></nav><div class="header-banner"><div class="header-banner-info"><div class="header-banner-info__title">在下的小书架</div><div class="header-banner-info__subtitle">对一件事理解的越深,就能做的越好!</div></div></div></div></header><main class="main" id="main"><div class="main-inner"><div class="content-wrap" id="content-wrap"><div class="content content-home" id="content"><section class="postlist"><article class="postlist-item post"><header class="post-header"><h1 class="post-title"><a class="post-title__link" href="/2021/02/21/golang/bases/note/">Golang - 基础骨架</a></h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">发表于</span><span class="post-meta-item__value">2021-02-21</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">更新于</span><span class="post-meta-item__value">2021-02-21</span></span></div></header><div class="post-body"><div class="post-excerpt"><h1 id="GOLANG" >
<a href="#GOLANG" class="heading-link"><i class="fas fa-link"></i></a><a href="#GOLANG" class="headerlink" title="GOLANG"></a>GOLANG</h1>
<h4 id="GO语言的特性" >
<a href="#GO语言的特性" class="heading-link"><i class="fas fa-link"></i></a><a href="#GO语言的特性" class="headerlink" title="GO语言的特性"></a>GO语言的特性</h4>
<ol>
<li><p>GO语言是按值调用语言。</p>
</li>
<li><p>GO是面向函数的语言,仅管它允许面向对象风格的编程。</p>
<p>它的面向对象风格是由结构体(复合数据类型)、方法、接口来实现的。</p>
<p>具体表现为:结构体嵌套,为类型定义方法,接口等</p>
</li>
<li><p>就像Python的所有数据类型都是类的思想一样,Go也拥有自己的独特的类型系统,每一个类型都由底层接口定义而来。</p>
</li>
</ol>
<h4 id="GO语言的实用功能包" >
<a href="#GO语言的实用功能包" class="heading-link"><i class="fas fa-link"></i></a><a href="#GO语言的实用功能包" class="headerlink" title="GO语言的实用功能包"></a>GO语言的实用功能包</h4>
<ol>
<li>golang.org/x/net/html:</li>
</ol>
<p>它提供了解析HTML的功能。</p>
<ol start="2">
<li></li>
</ol>
<h4 id="变量" >
<a href="#变量" class="heading-link"><i class="fas fa-link"></i></a><a href="#变量" class="headerlink" title="变量"></a>变量</h4>
<ul>
<li>短变量声明</li>
</ul>
<p>一个容易被忽略但重要的地方是:</p>
<p>短变量声明不需要声明所有在左边的变量。如果一些变量在同一个词法块中声明,那么对于那些变量,短变量行为等同于赋值。</p>
<p>在下面的代码中,第一条语句声明了in和err。第二条语句仅仅声明了out,但向已有的err变量赋了值。</p>
<figure class="highlight go"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">in,err := os.Open(infile)</span><br><span class="line"><span class="comment">//下面的语句和第二条语句联系一起看</span></span><br><span class="line">out,err := os.Create(outfile)</span><br></pre></td></tr></table></div></figure>
<p>短变量声明最少声明一个新变量,否则编译不通过。</p>
<h4 id="slice" >
<a href="#slice" class="heading-link"><i class="fas fa-link"></i></a><a href="#slice" class="headerlink" title="slice"></a>slice</h4>
<figure class="highlight go"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//slice操作符s[i:j]</span></span><br><span class="line"><span class="comment">//数据结构如下</span></span><br><span class="line"><span class="comment">// src/runtime/slice.go(go.19.1)</span></span><br><span class="line"><span class="keyword">type</span> slice <span class="keyword">struct</span>{</span><br><span class="line"> array unsafe.Pointer <span class="comment">//指向底层数组的指针</span></span><br><span class="line"> <span class="built_in">len</span> <span class="keyword">int</span> <span class="comment">//slice元素数量</span></span><br><span class="line"> <span class="built_in">cap</span> <span class="keyword">int</span> <span class="comment">//底层数组的容量</span></span><br><span class="line">}</span><br></pre></td></tr></table></div></figure>
<ol>
<li><p>如果slice的引用超过了被引用对象的容量,即cap(s),那么会导致程序宕机;但是如果slice的引用超出了被引用对象的长度,即len(s),那么最终slice会比原slice长。</p>
</li>
<li><p>和数组不同的是,slice无法作比较,因此不能用 == 来检测两个slice是否含有相同的元素。</p>
</li>
<li><p>slice需要做深度比较,因此不能用slice作为map的键。</p>
</li>
<li><p>slice唯一允许的比较操作是和nil做比较。slice类型的零值是nil。值为nil的slice没有对应的底层数组。值得注意的是:值为nil的slice长度和容量都是零,但是也有非nil的slice长度和容量也是零,例如[]int{}或者make([]int,3)[3:0]。</p>
</li>
</ol></div><div class="post-readmore"><a class="post-readmore__link" href="/2021/02/21/golang/bases/note/"><span class="post-readmore__text">阅读全文</span><span class="post-readmore__icon"><i class="fas fa-long-arrow-alt-right"></i></span></a></div></div></article><article class="postlist-item post"><header class="post-header"><h1 class="post-title"><a class="post-title__link" href="/2020/12/31/Nginx/note/">Nginx详解</a></h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">发表于</span><span class="post-meta-item__value">2020-12-31</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">更新于</span><span class="post-meta-item__value">2020-12-31</span></span></div></header><div class="post-body"><div class="post-excerpt"></div></div></article><article class="postlist-item post"><header class="post-header"><h1 class="post-title"><a class="post-title__link" href="/2020/12/31/Linux/pthread/">Linux线程知识</a></h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">发表于</span><span class="post-meta-item__value">2020-12-31</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">更新于</span><span class="post-meta-item__value">2020-12-31</span></span></div></header><div class="post-body"><div class="post-excerpt"><ul>
<li>pthread_attr_setstacksize</li>
</ul>
<p><strong>函数原型</strong></p>
<figure class="highlight c"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><pthread.h></span></span></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">pthread_attr_setstacksize</span><span class="params">(<span class="keyword">pthread_attr_t</span> *attr, <span class="keyword">size_t</span> stacksize)</span></span>;</span><br></pre></td></tr></table></div></figure>
<p>attr 是线程属性变量;stacksize 则是设置的堆栈大小。 返回值0,-1分别表示成功与失败。</p>
<p><strong>功能</strong>: 重新设置堆栈大小</p>
<p>pthread_create 创建线程时,若不指定分配堆栈大小,系统会分配默认值,查看默认值方法如下:</p>
<figure class="highlight shell"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#</span><span class="bash"> <span class="built_in">ulimit</span> -s</span></span><br><span class="line">8192</span><br><span class="line"><span class="meta">#</span></span><br><span class="line">上述表示为8M;单位为KB。</span><br><span class="line">也可以通过</span><br><span class="line"><span class="meta">#</span><span class="bash"> <span class="built_in">ulimit</span> -a </span></span><br><span class="line">其中 stack size 项也表示堆栈大小。ulimit -s value 用来重新设置stack 大小。</span><br></pre></td></tr></table></div></figure>
<p>嵌入式中内存不是很大,若采用默认值的话,会导致出现问题,若内存不足,则 pthread_create 会返回 12,定义如下:</p>
<figure class="highlight c"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">define</span> EAGAIN 11</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> ENOMEM 12 <span class="comment">/* Out of memory*/</span></span></span><br></pre></td></tr></table></div></figure>
</div></div></article><article class="postlist-item post"><header class="post-header"><h1 class="post-title"><a class="post-title__link" href="/2020/11/10/oop/OOP/">面向对象编程思想总结</a></h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">发表于</span><span class="post-meta-item__value">2020-11-10</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">更新于</span><span class="post-meta-item__value">2021-02-21</span></span></div></header><div class="post-body"><div class="post-excerpt"><p>[TOC]</p>
<h1 id="面向对象编程思想总结" >
<a href="#面向对象编程思想总结" class="heading-link"><i class="fas fa-link"></i></a><a href="#面向对象编程思想总结" class="headerlink" title="面向对象编程思想总结"></a>面向对象编程思想总结</h1>
<h2 id="一、面向对象编程思想简介" >
<a href="#一、面向对象编程思想简介" class="heading-link"><i class="fas fa-link"></i></a><a href="#一、面向对象编程思想简介" class="headerlink" title="一、面向对象编程思想简介"></a>一、面向对象编程思想简介</h2>
<h4 id="什么是面向对象?" >
<a href="#什么是面向对象?" class="heading-link"><i class="fas fa-link"></i></a><a href="#什么是面向对象?" class="headerlink" title="什么是面向对象?"></a>什么是面向对象?</h4>
<p>面向对象是一种编程思想,把具有相同属性和动作的实体抽象成为一个类(集合)、统称。类似于现实世界中对物品、动物等进行分类。这个类的实体具有相同的属性和相同的行为。</p>
<h4 id="什么是面向对象编程?" >
<a href="#什么是面向对象编程?" class="heading-link"><i class="fas fa-link"></i></a><a href="#什么是面向对象编程?" class="headerlink" title="什么是面向对象编程?"></a>什么是面向对象编程?</h4>
<p>面向对象编程(Object Oriented Programming)是基于类和对象,在这一基础上进行编程的程序设计思想。程序就是一系列对象的集合,程序负责控制调度这些对象交互从而完成最终任务。</p>
<p>举例:把大象装入冰箱要几步?</p>
<p>面向过程思想:</p>
<ol>
<li><p>打开冰箱</p>
</li>
<li><p>装入大象</p>
</li>
<li><p>关闭冰箱</p>
</li>
</ol>
<p>面向对象思想:</p>
<p>设计一个具备装大象功能的对象,让这个对象去完成这个工作。</p>
<p>其核心是思维的转变:面向对象中,程序员从具体的操作者变成了指挥者。</p>
<h4 id="优缺点如何?" >
<a href="#优缺点如何?" class="heading-link"><i class="fas fa-link"></i></a><a href="#优缺点如何?" class="headerlink" title="优缺点如何?"></a>优缺点如何?</h4>
<p>优点:</p>
<ol>
<li>扩展性强(对象增加减少不影响其他对象运行)</li>
<li>灵活性高</li>
<li>可重用性高</li>
</ol>
<p>缺点:</p>
<ol>
<li>程序的复杂度提高了</li>
<li>无法准确预知结果,分析问题的时候也不像面向过程那样简便。</li>
</ol>
<h2 id="二、四大基本特征" >
<a href="#二、四大基本特征" class="heading-link"><i class="fas fa-link"></i></a><a href="#二、四大基本特征" class="headerlink" title="二、四大基本特征"></a>二、四大基本特征</h2>
<h4 id="抽象" >
<a href="#抽象" class="heading-link"><i class="fas fa-link"></i></a><a href="#抽象" class="headerlink" title="抽象"></a>抽象</h4>
<p>抽象是提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物中不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为类,通过对类进行实例化得到具体的对象。</p>
<h4 id="封装" >
<a href="#封装" class="heading-link"><i class="fas fa-link"></i></a><a href="#封装" class="headerlink" title="封装"></a>封装</h4>
<p>封装可以使类具有独立性和隔离性,从而保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。</p>
<h4 id="继承" >
<a href="#继承" class="heading-link"><i class="fas fa-link"></i></a><a href="#继承" class="headerlink" title="继承"></a>继承</h4>
<p>继承是对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含类的继承和接口的实现。常见的继承方法有共有继承、私有继承、多重继承、多层继承。</p>
<h4 id="多态" >
<a href="#多态" class="heading-link"><i class="fas fa-link"></i></a><a href="#多态" class="headerlink" title="多态"></a>多态</h4>
<p>多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类的对象。父类引用指向不同的子类对象时,<strong>调用相同的方法,呈现出不同的行为;就是类的多态性</strong>。多态还可分为编译时多态(静态多态性)和运行时多态(动态多态性)。另外类的函数重载、运算符重载,也可算为多态的特性。</p></div><div class="post-readmore"><a class="post-readmore__link" href="/2020/11/10/oop/OOP/"><span class="post-readmore__text">阅读全文</span><span class="post-readmore__icon"><i class="fas fa-long-arrow-alt-right"></i></span></a></div></div></article><article class="postlist-item post"><header class="post-header"><h1 class="post-title"><a class="post-title__link" href="/2020/08/09/network/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E7%AC%94%E8%AE%B0%E4%B8%8E%E6%80%9D%E8%80%83/">计算机网络笔记与思考</a></h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">发表于</span><span class="post-meta-item__value">2020-08-09</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">更新于</span><span class="post-meta-item__value">2020-12-29</span></span></div></header><div class="post-body"><div class="post-excerpt">
<h2 id="什么是因特网?" >
<a href="#什么是因特网?" class="heading-link"><i class="fas fa-link"></i></a><a href="#什么是因特网?" class="headerlink" title="什么是因特网?"></a>什么是因特网?</h2>
<p>对于这个问题,<em>《计算机网络自顶向下方法》</em>一书中给出了如下两种回答该问题的方式:</p>
<p><em>“其一,我们能够描述因特网的具体构成,即构成因特网的基本硬件和软件组件。”</em></p>
<p><em>“其二,我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。”</em></p>
<h2 id="网络的网络" >
<a href="#网络的网络" class="heading-link"><i class="fas fa-link"></i></a><a href="#网络的网络" class="headerlink" title="网络的网络"></a>网络的网络</h2>
<p>构成因特网的“网络的网络”已经演化成了一个非常复杂的结构。这部分内容以逐步递进的方式建造了一系列的网络结构,这部分讲解使得我们可以从宏观上认识网络的组成结构。</p>
<p><strong>网络结构1</strong>,用单一的全球传输ISP互联所有接入ISP。假想的全球传输ISP是一个路由器和通信链路构成的网络,该网络不仅跨越全球,而且至少具有一台路由器靠近数十万接入ISP中的每一个。显然,这是一个耗资巨大的网络。为了有利可图,自然要向每个接入进来的ISP收费,其价格反映一个接入ISP经过全球ISP交换的流量大小。</p>
<p><strong>网络结构2</strong>,很显然一个可赢利的全球传输ISP,其他公司建立自己的全球传输ISP并与最初的全球传输ISP竞争则是一件自然的事情。这导致了网络结构2,它由数十万个接入ISP和多个全球传输ISP组成。这些全球传输ISP必须是互联的,不然的话,与某个全球传输ISP连接的接入ISP将不能与连接到其他全球传输ISP的接入ISP进行通信。网络结构2是一种两层的等级结构,其中全球传输提供商位于顶层,而接入ISP位于底层。</p>
<p><strong>网络结构3</strong>,网络结构3在等级结构中加入了区域ISP一层,现在不仅有多个竞争的第一层ISP,而且在一个区域可能有多个竞争的区域ISP,在这样的等级结构中,每个接入ISP向其连接的区域ISP支付费用,并且每个区域ISP向它连接的第一层ISP支付费用(一个接入ISP也能直接与第一层ISP连接,这样它就向第一层ISP付费)。因此,在这个等级结构中的每一层,都有客户-提供商关系。一个现实的例子,在中国,每个城市有接入ISP,它们与省级ISP相连接,省级ISP又与国家级ISP连接,国家级ISP最终与第一层ISP连接。网络结构3粗略近似于今天的因特网。</p>
<p><strong>网络结构4</strong>,网络结构4在等级化网络结构3上增加了存在点(Point of Presence,PoP)、多宿、对等和因特网交换点。PoP存在于等级结构的所有层次,除了底层(接入ISP)等级。一个PoP只是提供商网络中的一台或多台路由器群主,其中客户ISP能够与提供商ISP连接。对于要与提供商PoP连接的客户网络,它能从第三方电信提供商租用高速链路将它的路由器之一直接连接到位于该PoP的一台路由器。任何ISP(除了第一层ISP)可以选择多宿(multi-home),即可以与两个或更多个提供商ISP连接。客户ISP为了减少支付给提供商ISP的流量费用,可以直接将它们的网络连接在一起,不通过上游的中间ISP传输。这种相同等级结构层次的一对ISP直连称为对等(peer)。类似的,第三方公司能够创建一个因特网交换点(Internet Exchange Point,IXP),IXP是一个汇合点,多个ISP能够在这里一起对等。IXP通常位于一个有自己的交换机的独立建筑物中。现在我们可以看到,网络结构4变得复杂起来了,它由接入ISP、区域ISP、第一层ISP、PoP、多宿、对等和IXP组成。</p>
<p><strong>网络结构5</strong>,如今的因特网结构就是网络结构5所描述的结构。它通过在网络结构4顶部增加内容提供商网络(content provider network)构建而成。谷歌是当前这样的内容提供商网络的一个突出例子。谷歌专用网络通过与较低层的ISP对等,尝试绕过因特网的较高层,采用的方式可以是直接与它们连接。通过创建自己的网络,内容提供商不仅减少了向顶层ISP支付的费用,而且对其服务最终如何交付给端用户有了更多的控制。</p>
</div></div></article></section><nav class="paginator"><div class="paginator-inner"><span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><a class="page-number" href="/page/3/">3</a><a class="extend next" rel="next" href="/page/2/"><i class="fas fa-angle-right"></i></a></div></nav></div></div><div class="sidebar-wrap" id="sidebar-wrap"><aside class="sidebar" id="sidebar"><section class="sidebar-toc hide"></section><!-- ov = overview--><section class="sidebar-ov"><div class="sidebar-ov-author"><div class="sidebar-ov-author__avatar"><img class="sidebar-ov-author__avatar_img" src="/images/icons/touxiang.jpeg" alt="avatar"></div><p class="sidebar-ov-author__text">快乐学习,学习快乐</p></div><div class="sidebar-ov-state"><a class="sidebar-ov-state-item sidebar-ov-state-item--posts" href="/archives/"><div class="sidebar-ov-state-item__count">13</div><div class="sidebar-ov-state-item__name">归档</div></a><a class="sidebar-ov-state-item sidebar-ov-state-item--categories" href="/categories/"><div class="sidebar-ov-state-item__count">16</div><div class="sidebar-ov-state-item__name">分类</div></a><a class="sidebar-ov-state-item sidebar-ov-state-item--tags" href="/tags/"><div class="sidebar-ov-state-item__count">13</div><div class="sidebar-ov-state-item__name">标签</div></a></div><div class="sidebar-ov-cc"><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en" target="_blank" rel="noopener" data-popover="知识共享许可协议" data-popover-pos="up"><img src="/images/cc-by-nc-sa.svg"></a></div></section></aside></div><div class="clearfix"></div></div></main><footer class="footer" id="footer"><div class="footer-inner"><div><span>Copyright © 2021</span><span class="footer__icon"><i class="fas fa-heart"></i></span><span>zxr</span></div><div><span>由 <a href="http://hexo.io/" title="Hexo" target="_blank" rel="noopener">Hexo</a> 强力驱动</span><span> v4.2.1</span><span class="footer__devider">|</span><span>主题 - <a href="https://github.com/liuyib/hexo-theme-stun/" title="Stun" target="_blank" rel="noopener">Stun</a></span><span> v2.6.2</span></div></div></footer><div class="loading-bar" id="loading-bar"><div class="loading-bar__progress"></div></div><div class="back2top" id="back2top"><span class="back2top__icon"><i class="fas fa-rocket"></i></span></div></div><script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/npm/[email protected]/velocity.min.js"></script><script src="https://cdn.jsdelivr.net/npm/[email protected]/velocity.ui.min.js"></script><script src="/js/utils.js?v=2.6.2"></script><script src="/js/stun-boot.js?v=2.6.2"></script><script src="/js/scroll.js?v=2.6.2"></script><script src="/js/header.js?v=2.6.2"></script><script src="/js/sidebar.js?v=2.6.2"></script></body></html>