-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
433 lines (311 loc) · 24 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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hexo</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta property="og:type" content="website">
<meta property="og:title" content="Hexo">
<meta property="og:url" content="http://jazzylol.github.io/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:locale" content="en_US">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
<link rel="alternate" href="/atom.xml" title="Hexo" type="application/atom+xml">
<link rel="icon" href="/favicon.png">
<link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="/css/style.css">
<meta name="generator" content="Hexo 4.2.1"></head>
<body>
<div id="container">
<div id="wrap">
<header id="header">
<div id="banner"></div>
<div id="header-outer" class="outer">
<div id="header-title" class="inner">
<h1 id="logo-wrap">
<a href="/" id="logo">Hexo</a>
</h1>
</div>
<div id="header-inner" class="inner">
<nav id="main-nav">
<a id="main-nav-toggle" class="nav-icon"></a>
<a class="main-nav-link" href="/">Home</a>
<a class="main-nav-link" href="/archives">Archives</a>
</nav>
<nav id="sub-nav">
<a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
<a id="nav-search-btn" class="nav-icon" title="Search"></a>
</nav>
<div id="search-form-wrap">
<form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit"></button><input type="hidden" name="sitesearch" value="http://jazzylol.github.io"></form>
</div>
</div>
</div>
</header>
<div class="outer">
<section id="main">
<article id="post-透视HTTP协议/HTTP请求报文" class="article article-type-post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2020/08/10/%E9%80%8F%E8%A7%86HTTP%E5%8D%8F%E8%AE%AE/HTTP%E8%AF%B7%E6%B1%82%E6%8A%A5%E6%96%87/" class="article-date">
<time datetime="2020-08-10T02:37:22.963Z" itemprop="datePublished">2020-08-10</time>
</a>
</div>
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2020/08/10/%E9%80%8F%E8%A7%86HTTP%E5%8D%8F%E8%AE%AE/HTTP%E8%AF%B7%E6%B1%82%E6%8A%A5%E6%96%87/">透视HTTP协议/HTTP请求报文</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<h3 id="HTTP请求过程示意图"><a href="#HTTP请求过程示意图" class="headerlink" title="HTTP请求过程示意图"></a>HTTP请求过程示意图</h3><img src="https://static001.geekbang.org/resource/image/8a/19/8a5bddd3d8046daf7032c7d60a3d1a19.png" alt="img" style="zoom:20%;" />
<p>再简要叙述一下这次最简单的浏览器 HTTP 请求过程:</p>
<ul>
<li>浏览器从地址栏的输入中获得服务器的 IP 地址和端口号;</li>
<li>浏览器用 TCP 的三次握手与服务器建立连接;</li>
<li>浏览器向服务器发送拼好的报文;</li>
<li>服务器收到报文后处理请求,同样拼好报文再发给浏览器;</li>
<li>浏览器解析报文,渲染输出页面。</li>
</ul>
<h3 id="HTTP报文"><a href="#HTTP报文" class="headerlink" title="HTTP报文"></a>HTTP报文</h3><p>HTTP 协议的请求报文和响应报文的结构基本相同,由三大部分组成:</p>
<ul>
<li>起始行(start line):描述请求或响应的基本信息;</li>
<li>头部字段集合(header):使用 key-value 形式更详细地说明报文;</li>
<li>消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。</li>
</ul>
<p>这其中前两部分起始行和头部字段经常又合称为“请求头”或“响应头”,消息正文又称为“实体”,但与“header”对应,很多时候就直接称为“body”。</p>
<p>HTTP 协议规定报文必须有 header,但可以没有 body,而且在 header 之后必须要有一个“空行”,也就是“CRLF”,十六进制的“0D0A”。所以,一个完整的 HTTP 报文就像是下图的这个样子,注意在 header 和 body 之间有一个“空行”。</p>
<img src="https://static001.geekbang.org/resource/image/62/3c/62e061618977565c22c2cf09930e1d3c.png" alt="img" style="zoom:20%;" />
<h4 id="请求行"><a href="#请求行" class="headerlink" title="请求行"></a>请求行</h4><p>请求行由三部分构成:</p>
<ul>
<li>请求方法:是一个动词,如 GET/POST,表示对资源的操作;</li>
<li>请求目标:通常是一个 URI,标记了请求方法要操作的资源;</li>
<li>版本号:表示报文使用的 HTTP 协议版本。</li>
</ul>
<p>这三个部分通常使用空格(space)来分隔,最后要用 CRLF 换行表示结束。</p>
<img src="https://static001.geekbang.org/resource/image/36/b9/36108959084392065f36dff3e12967b9.png" alt="img" style="zoom:20%;" />
<h4 id="状态行"><a href="#状态行" class="headerlink" title="状态行"></a>状态行</h4><p>“状态行”(status line),意思是服务器响应的状态。</p>
<p>由三部分构成:</p>
<ul>
<li>版本号:表示报文使用的 HTTP 协议版本;</li>
<li>状态码:一个三位数,用代码的形式表示处理的结果,比如 200 是成功,500 是服务器错误;</li>
<li>原因:作为数字状态码补充,是更详细的解释文字,帮助人理解原因。</li>
</ul>
<img src="https://static001.geekbang.org/resource/image/a1/00/a1477b903cd4d5a69686683c0dbc3300.png" alt="img" style="zoom:20%;" />
<h4 id="头部字段"><a href="#头部字段" class="headerlink" title="头部字段"></a>头部字段</h4><p>请求</p>
<img src="https://static001.geekbang.org/resource/image/1f/ea/1fe4c1121c50abcf571cebd677a8bdea.png" alt="img" style="zoom: 20%;" />
<p>响应</p>
<img src="https://static001.geekbang.org/resource/image/1f/ea/1fe4c1121c50abcf571cebd677a8bdea.png" alt="img" style="zoom: 20%;" />
<p>头部字段是 key-value 的形式,key 和 value 之间用“:”分隔,最后用 CRLF 换行表示字段结束。</p>
<p>比如在“Host: 127.0.0.1”这一行里 key 就是“Host”,value 就是“127.0.0.1”。HTTP 头字段非常灵活,不仅可以使用标准里的 Host、Connection 等已有头,也可以任意添加自定义头,这就给 HTTP 协议带来了无限的扩展可能。</p>
<ul>
<li>不过使用头字段需要注意下面几点:</li>
<li>字段名不区分大小写,例如“Host”也可以写成“host”,但首字母大写的可读性更好;</li>
<li>字段名里不允许出现空格,可以使用连字符“-”,但不能使用下划线“_”。例如,“test-name”是合法的字段名,而“test name”“test_name”是不正确的字段名;</li>
<li>字段名后面必须紧接着“:”,不能有空格,而“:”后的字段值前可以有多个空格;</li>
<li>字段的顺序是没有意义的,可以任意排列不影响语义;</li>
<li>字段原则上不能重复,除非这个字段本身的语义允许,例如 Set-Cookie。</li>
</ul>
<h4 id="HTTP头字段"><a href="#HTTP头字段" class="headerlink" title="HTTP头字段"></a>HTTP头字段</h4><p>常用头字段HTTP 协议规定了非常多的头部字段,实现各种各样的功能,但基本上可以分为四大类:</p>
<ul>
<li>通用字段:在请求头和响应头里都可以出现;</li>
<li>请求字段:仅能出现在请求头里,进一步说明请求信息或者额外的附加条件;</li>
<li>响应字段:仅能出现在响应头里,补充说明响应报文的信息;</li>
<li>实体字段:它实际上属于通用字段,但专门描述 body 的额外信息。</li>
</ul>
</div>
<footer class="article-footer">
<a data-url="http://jazzylol.github.io/2020/08/10/%E9%80%8F%E8%A7%86HTTP%E5%8D%8F%E8%AE%AE/HTTP%E8%AF%B7%E6%B1%82%E6%8A%A5%E6%96%87/" data-id="ckdnwo3760001jmi366283xdu" class="article-share-link">Share</a>
</footer>
</div>
</article>
<article id="post-hello-world" class="article article-type-post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2020/08/03/hello-world/" class="article-date">
<time datetime="2020-08-02T16:25:30.006Z" itemprop="datePublished">2020-08-03</time>
</a>
</div>
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2020/08/03/hello-world/">hello-world</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<p>hello world</p>
</div>
<footer class="article-footer">
<a data-url="http://jazzylol.github.io/2020/08/03/hello-world/" data-id="ckdnwo3690000jmi33m6vbenb" class="article-share-link">Share</a>
</footer>
</div>
</article>
<article id="post-透视HTTP协议/HTTP发展历史及其特点" class="article article-type-post" itemscope itemprop="blogPost">
<div class="article-meta">
<a href="/2020/08/03/%E9%80%8F%E8%A7%86HTTP%E5%8D%8F%E8%AE%AE/HTTP%E5%8F%91%E5%B1%95%E5%8E%86%E5%8F%B2%E5%8F%8A%E5%85%B6%E7%89%B9%E7%82%B9/" class="article-date">
<time datetime="2020-08-02T16:20:11.876Z" itemprop="datePublished">2020-08-03</time>
</a>
</div>
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2020/08/03/%E9%80%8F%E8%A7%86HTTP%E5%8D%8F%E8%AE%AE/HTTP%E5%8F%91%E5%B1%95%E5%8E%86%E5%8F%B2%E5%8F%8A%E5%85%B6%E7%89%B9%E7%82%B9/">透视HTTP协议/HTTP发展历史及其特点</a>
</h1>
</header>
<div class="article-entry" itemprop="articleBody">
<h3 id="发展历史"><a href="#发展历史" class="headerlink" title="发展历史"></a>发展历史</h3><ul>
<li><p>1960s美国国防部高等研究计划署(ARPA)建立了 ARPA 网,它有四个分布在各地的节点,被认为是如今互联网的”始祖”。</p>
</li>
<li><p>1970s研究员基于对ARPA的思考提出了TCP/IP协议</p>
</li>
<li><p>1980s TCP/IP协议进入unix系统内核</p>
</li>
<li><p>1989年任职于欧洲核子研究中心(CERN)的蒂姆·伯纳斯 - 李(Tim Berners-Lee)发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。这篇论文中他确立了三项关键技术。</p>
<p>1) URI:即统一资源标识符,作为互联网上资源的唯一身份;</p>
<p>2) HTML:即超文本标记语言,描述超文本文档;</p>
<p>3) HTTP:即超文本传输协议,用来传输超文本。</p>
</li>
</ul>
<p>所以http协议诞生于1989年</p>
<h3 id="协议版本"><a href="#协议版本" class="headerlink" title="协议版本"></a>协议版本</h3><h4 id="HTTP-0-9"><a href="#HTTP-0-9" class="headerlink" title="HTTP/0.9"></a>HTTP/0.9</h4><ul>
<li>结构简单,只可以获取服务器资源(只读),从服务器上只读HTML文档。</li>
<li>服务端响应后会立刻关闭连接,</li>
<li>版本号是后来加的主要是为了区别HTTP/1.0。</li>
</ul>
<h4 id="HTTP-1-0"><a href="#HTTP-1-0" class="headerlink" title="HTTP/1.0"></a>HTTP/1.0</h4><p> 1996年发布,但是依旧是非标准协议,仅仅是参考文档,相对于0.9 比较重要的改进</p>
<ul>
<li>增加了多个方法,例如 POST,HEAD</li>
<li>增加了HTTP响应码</li>
<li>引入了协议版本号概念,为了区别,之前的协议就叫HTTP/0.9</li>
<li>引入了HTTP header概念</li>
<li>传输内容不再仅限于文本</li>
</ul>
<h4 id="HTTP-1-1"><a href="#HTTP-1-1" class="headerlink" title="HTTP/1.1"></a>HTTP/1.1</h4><p> 1999年发布,得益于浏览器大战有了长足的发展,奠定了互联网基础协议的地位。RFC文档编号2616。从参考文档变成了标准协议,相对于HTTP/1.0主要有以下改进</p>
<ul>
<li>增加了PUT,DELETE新方法</li>
<li>增加了缓存管理和控制</li>
<li>明确了链接管理,允许持久链接</li>
<li>允许响应数据分块(chunked),利于大文件传输</li>
<li>强制要求host头,让互联网主机托管成为可能</li>
</ul>
<h4 id="HTTP-2"><a href="#HTTP-2" class="headerlink" title="HTTP/2"></a>HTTP/2</h4><p> http/1.1 存在很多问题,例如连接慢,不稳定等,google推出了chrome浏览器,并且内置了spdy协议,互联网标准化组织以SPDY协议为基础起草HTTP2。2015年发布,RFC7540。相对HTTP/1.1 有以下特点:</p>
<ul>
<li>二进制协议,不再是纯文本</li>
<li>可发起多个请求,废弃1.1里的管道</li>
<li>使用专用算法压缩header,减少数据传输</li>
<li>允许服务器向客户端推送数据</li>
<li>增强了安全性,默认通信加密</li>
</ul>
<h4 id="HTTP-3"><a href="#HTTP-3" class="headerlink" title="HTTP/3"></a>HTTP/3</h4><p> http2基于TPC,TPC有阻塞,所以HTTP/2需要继续优化。chrome推送QUIC协议,内置chrome,IETF推送HTTP2升级,HTTP OVER QUIC,更名HTTP/3,还未发布。</p>
<h3 id="HTTP特点"><a href="#HTTP特点" class="headerlink" title="HTTP特点"></a>HTTP特点</h3><p>HTTP全称超文本传输协议,HyperText Transfer Protocol 。</p>
<p>HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。</p>
<p>HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。</p>
<p>HTTP 专门用来在两点之间传输数据,不能用于广播、寻址或路由。</p>
<p>HTTP 传输的是文字、图片、音频、视频等超文本数据。</p>
<p>HTTP 是构建互联网的重要基础技术,它没有实体,依赖许多其他的技术来实现,但同时许多技术也都依赖于它。</p>
<p>把这些综合起来,使用递归缩写方式(模仿 PHP),我们可以把 HTTP 定义为“与 HTTP 协议相关的所有应用层技术的总和”。</p>
<h3 id="TCP-IP"><a href="#TCP-IP" class="headerlink" title="TCP/IP"></a>TCP/IP</h3><p>TCP/IP 协议是目前网络上 ‘事实’上的标准通信协议,是一系列协议的总称,其中最著名的是TPC和IP协议,其他的还有UDP、ICMP、ARP等。</p>
<p>TCP: Transmission Control Protocol </p>
<p>IP:Internet Protocol</p>
<h3 id="DNS"><a href="#DNS" class="headerlink" title="DNS"></a>DNS</h3><p>Domain Name System </p>
<p>在 TCP/IP 协议中使用 IP 地址来标识计算机,DNS用有意义的名字来作为 IP 地址的等价替代</p>
<h3 id="URL-URI"><a href="#URL-URI" class="headerlink" title="URL/URI"></a>URL/URI</h3><p>URI(Uniform Resource Identifier),统一资源标识符</p>
<p>URL(Uniform Resource Locator), 统一资源定位符</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://nginx.org/en/download.html</span><br></pre></td></tr></table></figure>
<ul>
<li>协议名:即访问该资源应当使用的协议,在这里是“http”;</li>
<li>主机名:即互联网上主机的标记,可以是域名或 IP 地址,在这里是“nginx.org”;</li>
<li>路径:即资源在主机上的位置,使用“/”分隔多级目录,在这里是“/en/download.html”。</li>
</ul>
<h3 id="HTTPS"><a href="#HTTPS" class="headerlink" title="HTTPS"></a>HTTPS</h3><p>HTTP over SSL/TLS ,运行在SSL/TLS上的HTTP协议,</p>
<p>SSL:Secure Socket Layer</p>
<p>TLS:Transport Layer Security</p>
<p>SSL 使用了许多密码学最先进的研究成果,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术,能够在不安全的环境中为通信的双方创建出一个秘密的、安全的传输通道</p>
<h3 id="Proxy"><a href="#Proxy" class="headerlink" title="Proxy"></a>Proxy</h3><p>代理(Proxy)是 HTTP 协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答。</p>
<ul>
<li>匿名代理:完全“隐匿”了被代理的机器,外界看到的只是代理服务器;</li>
<li>透明代理:顾名思义,它在传输过程中是“透明开放”的,外界既知道代理,也知道客户端;</li>
<li>正向代理:靠近客户端,代表客户端向服务器发送请求;</li>
<li>反向代理:靠近服务器端,代表服务器响应客户端的请求;</li>
</ul>
<h3 id="TCP-IP-网络分层模型"><a href="#TCP-IP-网络分层模型" class="headerlink" title="TCP/IP 网络分层模型"></a>TCP/IP 网络分层模型</h3><p><img src="https://static001.geekbang.org/resource/image/2b/03/2b8fee82b58cc8da88c74a33f2146703.png" alt="img"></p>
<h5 id="链接层-link-layer"><a href="#链接层-link-layer" class="headerlink" title="链接层(link layer)"></a>链接层(link layer)</h5><p>负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层。</p>
<h5 id="网际层(internet-layer)"><a href="#网际层(internet-layer)" class="headerlink" title="网际层(internet layer)"></a>网际层(internet layer)</h5><p>IP 协议就处在这一层。因为 IP 协议定义了“IP 地址”的概念,所以就可以在“链接层”的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了</p>
<h5 id="传输层(transport-layer)"><a href="#传输层(transport-layer)" class="headerlink" title="传输层(transport layer)"></a>传输层(transport layer)</h5><p>这个层次协议的职责是保证数据在 IP 地址标记的两点之间“可靠”地传输,是 TCP 协议工作的层次,另外还有它的一个“小伙伴”UDP。</p>
<p>TCP 是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。而 UDP 则比较简单,它无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方。两个协议的另一个重要区别在于数据的形式。TCP 的数据是连续的“字节流”,有先后顺序,而 UDP 则是分散的小数据包,是顺序发,乱序收。</p>
<h5 id="应用层(application-layer)"><a href="#应用层(application-layer)" class="headerlink" title="应用层(application layer)"></a>应用层(application layer)</h5><p>由于下面的三层把基础打得非常好,所以在这一层就“百花齐放”了,有各种面向具体应用的协议。例如 Telnet、SSH、FTP、SMTP 等等,当然还有 HTTP。</p>
<p>MAC 层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。</p>
<h3 id="OSI-网络分层模型"><a href="#OSI-网络分层模型" class="headerlink" title="OSI 网络分层模型"></a>OSI 网络分层模型</h3><p>Open System Interconnection Reference Model 开放式系统互联通信参考模型</p>
<p><img src="https://static001.geekbang.org/resource/image/3a/dc/3abcf1462621ff86758a8d9571c07cdc.png" alt="img"></p>
<ul>
<li>第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;</li>
<li>第二层:数据链路层,它基本相当于 TCP/IP 的链接层;</li>
<li>第三层:网络层,相当于 TCP/IP 里的网际层;</li>
<li>第四层:传输层,相当于 TCP/IP 里的传输层;</li>
<li>第五层:会话层,维护网络中的连接状态,即保持会话和同步;</li>
<li>第六层:表示层,把数据转换为合适、可理解的语法和语义;</li>
<li>第七层:应用层,面向具体的应用传输数据。</li>
</ul>
<p>OSI 模型也是有优点的。对比一下就可以看出,TCP/IP 是一个纯软件的栈,没有网络应有的最根基的电缆、网卡等物理设备的位置。而 OSI 则补足了这个缺失,在理论层面上描述网络更加完整。</p>
<p>还有一个重要的形式上的优点:OSI 为每一层标记了明确了编号,最底层是一层,最上层是七层,而 TCP/IP 的层次从来只有名字而没有编号。显然,在交流的时候说“七层”要比“应用层”更简单快捷,特别是英文,对比一下“Layer seven”与“application layer”。综合以上几点,在 OSI 模型之后,“四层”“七层”这样的说法就逐渐流行开了。不过在实际工作中你一定要注意,这种说法只是“理论上”的层次,并不是与现实完全对应。</p>
<h3 id="TCP-IP-模型和OSI网络模型映射关系"><a href="#TCP-IP-模型和OSI网络模型映射关系" class="headerlink" title="TCP/IP 模型和OSI网络模型映射关系"></a>TCP/IP 模型和OSI网络模型映射关系</h3><p><img src="https://static001.geekbang.org/resource/image/9d/94/9d9b3c9274465c94e223676b6d434194.png" alt="img"></p>
<ul>
<li>第一层:物理层,TCP/IP 里无对应;</li>
<li>第二层:数据链路层,对应 TCP/IP 的链接层;</li>
<li>第三层:网络层,对应 TCP/IP 的网际层;</li>
<li>第四层:传输层,对应 TCP/IP 的传输层;</li>
<li>第五、六、七层:统一对应到 TCP/IP 的应用层。</li>
</ul>
<h3 id="TCP-IP-协议栈的工作方式"><a href="#TCP-IP-协议栈的工作方式" class="headerlink" title="TCP/IP 协议栈的工作方式"></a>TCP/IP 协议栈的工作方式</h3><p>TCP/IP 协议的工作流程如下图</p>
<p><img src="https://static001.geekbang.org/resource/image/70/6f/70bc19acacf2245fa841349f15cb7a6f.png" alt="img"></p>
</div>
<footer class="article-footer">
<a data-url="http://jazzylol.github.io/2020/08/03/%E9%80%8F%E8%A7%86HTTP%E5%8D%8F%E8%AE%AE/HTTP%E5%8F%91%E5%B1%95%E5%8E%86%E5%8F%B2%E5%8F%8A%E5%85%B6%E7%89%B9%E7%82%B9/" data-id="ckdnwo3790002jmi3bk4j68vd" class="article-share-link">Share</a>
</footer>
</div>
</article>
</section>
<aside id="sidebar">
<div class="widget-wrap">
<h3 class="widget-title">Archives</h3>
<div class="widget">
<ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/08/">August 2020</a></li></ul>
</div>
</div>
<div class="widget-wrap">
<h3 class="widget-title">Recent Posts</h3>
<div class="widget">
<ul>
<li>
<a href="/2020/08/10/%E9%80%8F%E8%A7%86HTTP%E5%8D%8F%E8%AE%AE/HTTP%E8%AF%B7%E6%B1%82%E6%8A%A5%E6%96%87/">透视HTTP协议/HTTP请求报文</a>
</li>
<li>
<a href="/2020/08/03/hello-world/">hello-world</a>
</li>
<li>
<a href="/2020/08/03/%E9%80%8F%E8%A7%86HTTP%E5%8D%8F%E8%AE%AE/HTTP%E5%8F%91%E5%B1%95%E5%8E%86%E5%8F%B2%E5%8F%8A%E5%85%B6%E7%89%B9%E7%82%B9/">透视HTTP协议/HTTP发展历史及其特点</a>
</li>
</ul>
</div>
</div>
</aside>
</div>
<footer id="footer">
<div class="outer">
<div id="footer-info" class="inner">
© 2020 John Doe<br>
Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
</div>
</div>
</footer>
</div>
<nav id="mobile-nav">
<a href="/" class="mobile-nav-link">Home</a>
<a href="/archives" class="mobile-nav-link">Archives</a>
</nav>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css">
<script src="/fancybox/jquery.fancybox.pack.js"></script>
<script src="/js/script.js"></script>
</div>
</body>
</html>