-
Notifications
You must be signed in to change notification settings - Fork 0
/
第5讲讲从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?.html
457 lines (375 loc) · 49.9 KB
/
第5讲讲从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?.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
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport"
content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,viewport-fit=cover">
<meta name="format-detection" content="telephone=no">
<style type="text/css">
#watermark {
position: relative;
overflow: hidden;
}
#watermark .x {
position: absolute;
top: 800;
left: 400;
color: #3300ff;
font-size: 50px;
pointer-events: none;
opacity:0.5;
filter:Alpha(opacity=50);
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
}
</style>
<style type="text/css">
html{color:#333;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;text-rendering:optimizelegibility;font-family:Helvetica Neue,PingFang SC,Verdana,Microsoft Yahei,Hiragino Sans GB,Microsoft Sans Serif,WenQuanYi Micro Hei,sans-serif}html.borderbox *,html.borderbox :after,html.borderbox :before{box-sizing:border-box}article,aside,blockquote,body,button,code,dd,details,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hr,input,legend,li,menu,nav,ol,p,pre,section,td,textarea,th,ul{margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,menu,nav,section{display:block}audio,canvas,video{display:inline-block}body,button,input,select,textarea{font:300 1em/1.8 PingFang SC,Lantinghei SC,Microsoft Yahei,Hiragino Sans GB,Microsoft Sans Serif,WenQuanYi Micro Hei,Helvetica,sans-serif}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}blockquote{position:relative;color:#999;font-weight:400;border-left:1px solid #1abc9c;padding-left:1em;margin:1em 3em 1em 2em}@media only screen and (max-width:640px){blockquote{margin:1em 0}}abbr,acronym{border-bottom:1px dotted;font-variant:normal}abbr{cursor:help}del{text-decoration:line-through}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:400}ol,ul{list-style:none}caption,th{text-align:left}q:after,q:before{content:""}sub,sup{font-size:75%;line-height:0;position:relative}:root sub,:root sup{vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}a{color:#1abc9c}a:hover{text-decoration:underline}.typo a{border-bottom:1px solid #1abc9c}.typo a:hover{border-bottom-color:#555;color:#555}.typo a:hover,a,ins{text-decoration:none}.typo-u,u{text-decoration:underline}mark{background:#fffdd1;border-bottom:1px solid #ffedce;padding:2px;margin:0 5px}code,pre,pre tt{font-family:Courier,Courier New,monospace}pre{background:hsla(0,0%,97%,.7);border:1px solid #ddd;padding:1em 1.5em;display:block;-webkit-overflow-scrolling:touch}hr{border:none;border-bottom:1px solid #cfcfcf;margin-bottom:.8em;height:10px}.typo-small,figcaption,small{font-size:.9em;color:#888}b,strong{font-weight:700;color:#000}[draggable]{cursor:move}.clearfix:after,.clearfix:before{content:"";display:table}.clearfix:after{clear:both}.clearfix{zoom:1}.textwrap,.textwrap td,.textwrap th{word-wrap:break-word;word-break:break-all}.textwrap-table{table-layout:fixed}.serif{font-family:Palatino,Optima,Georgia,serif}.typo-dl,.typo-form,.typo-hr,.typo-ol,.typo-p,.typo-pre,.typo-table,.typo-ul,.typo dl,.typo form,.typo hr,.typo ol,.typo p,.typo pre,.typo table,.typo ul,blockquote{margin-bottom:1rem}h1,h2,h3,h4,h5,h6{font-family:PingFang SC,Helvetica Neue,Verdana,Microsoft Yahei,Hiragino Sans GB,Microsoft Sans Serif,WenQuanYi Micro Hei,sans-serif;color:#000;line-height:1.35}.typo-h1,.typo-h2,.typo-h3,.typo-h4,.typo-h5,.typo-h6,.typo h1,.typo h2,.typo h3,.typo h4,.typo h5,.typo h6{margin-top:1.2em;margin-bottom:.6em;line-height:1.35}.typo-h1,.typo h1{font-size:2em}.typo-h2,.typo h2{font-size:1.8em}.typo-h3,.typo h3{font-size:1.6em}.typo-h4,.typo h4{font-size:1.4em}.typo-h5,.typo-h6,.typo h5,.typo h6{font-size:1.2em}.typo-ul,.typo ul{margin-left:1.3em;list-style:disc}.typo-ol,.typo ol{list-style:decimal;margin-left:1.9em}.typo-ol ol,.typo-ol ul,.typo-ul ol,.typo-ul ul,.typo li ol,.typo li ul{margin-bottom:.8em;margin-left:2em}.typo-ol ul,.typo-ul ul,.typo li ul{list-style:circle}.typo-table td,.typo-table th,.typo table caption,.typo table td,.typo table th{border:1px solid #ddd;padding:.5em 1em;color:#666}.typo-table th,.typo table th{background:#fbfbfb}.typo-table thead th,.typo table thead th{background:hsla(0,0%,95%,.7)}.typo table caption{border-bottom:none}.typo-input,.typo-textarea{-webkit-appearance:none;border-radius:0}.typo-em,.typo em,caption,legend{color:#000;font-weight:inherit}.typo-em{position:relative}.typo-em:after{position:absolute;top:.65em;left:0;width:100%;overflow:hidden;white-space:nowrap;content:"\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB\30FB"}.typo img{max-width:100%}.common-content{font-weight:400;color:#353535;line-height:1.75rem;white-space:normal;word-break:normal;font-size:1rem}.common-content img{display:block;max-width:100%;background-color:#eee}.common-content audio,.common-content video{width:100%;background-color:#eee}.common-content center,.common-content font{margin-top:1rem;display:inline-block}.common-content center{width:100%}.common-content pre{margin-top:1rem;padding-left:0;padding-right:0;position:relative;overflow:hidden}.common-content pre code{font-size:.8rem;font-family:Consolas,Liberation Mono,Menlo,monospace,Courier;display:block;width:100%;box-sizing:border-box;padding-left:1rem;padding-right:1rem;overflow-x:auto}.common-content hr{border:none;margin-top:1.5rem;margin-bottom:1.5rem;border-top:1px solid #f5f5f5;height:1px;background:none}.common-content b,.common-content h1,.common-content h2,.common-content h3,.common-content h4,.common-content h5,.common-content strong{font-weight:700}.common-content h1,.common-content h2{font-size:1.125rem;margin-bottom:.45rem}.common-content h3,.common-content h4,.common-content h5{font-size:1rem;margin-bottom:.45rem}.common-content p{font-weight:400;color:#353535;margin-top:.15rem}.common-content .orange{color:#ff5a05}.common-content .reference{font-size:1rem;color:#888}.custom-rich-content h1{margin-top:0;font-weight:400;font-size:15.25px;border-bottom:1px solid #eee;line-height:2.8}.custom-rich-content li,.custom-rich-content p{font-size:14px;color:#888;line-height:1.6}table.hljs-ln{margin-bottom:0;border-spacing:0;border-collapse:collapse}table.hljs-ln,table.hljs-ln tbody,table.hljs-ln td,table.hljs-ln tr{box-sizing:border-box}table.hljs-ln td{padding:0;border:0}table.hljs-ln td.hljs-ln-numbers{min-width:15px;color:rgba(27,31,35,.3);text-align:right;white-space:nowrap;cursor:pointer;user-select:none}table.hljs-ln td.hljs-ln-code,table.hljs-ln td.hljs-ln-numbers{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px;line-height:20px;vertical-align:top}table.hljs-ln td.hljs-ln-code{position:relative;padding-right:10px;padding-left:10px;overflow:visible;color:#24292e;word-wrap:normal;white-space:pre}video::-webkit-media-controls{overflow:hidden!important}video::-webkit-media-controls-enclosure{width:calc(100% + 32px);margin-left:auto}.button-cancel{color:#888;border:1px solid #888;border-radius:3px;margin-right:12px}.button-cancel,.button-primary{-ms-flex-positive:1;flex-grow:1;height:35px;display:inline-block;font-size:15px;text-align:center;line-height:36px}.button-primary{color:#fff;background-color:#ff5a05;border-radius:3px}@font-face{font-family:iconfont;src:url(//at.alicdn.com/t/font_372689_bwwwtosxtzp.eot);src:url(//at.alicdn.com/t/font_372689_bwwwtosxtzp.eot#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/font_372689_bwwwtosxtzp.woff) format("woff"),url(//at.alicdn.com/t/font_372689_bwwwtosxtzp.ttf) format("truetype"),url(//at.alicdn.com/t/font_372689_bwwwtosxtzp.svg#iconfont) format("svg")}@font-face{font-family:player-font;src:url(//at.alicdn.com/t/font_509397_1cyjv4o90qiod2t9.eot);src:url(//at.alicdn.com/t/font_509397_1cyjv4o90qiod2t9.eot#iefix) format("embedded-opentype"),url(//at.alicdn.com/t/font_509397_1cyjv4o90qiod2t9.woff) format("woff"),url(//at.alicdn.com/t/font_509397_1cyjv4o90qiod2t9.ttf) format("truetype"),url(//at.alicdn.com/t/font_509397_1cyjv4o90qiod2t9.svg#player-font) format("svg")}.iconfont{font-family:iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}html{background:#fff;min-height:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{width:100%}body.fixed{overflow:hidden;position:fixed;width:100vw;height:100vh}i{font-style:normal}a{word-wrap:break-word;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:hover{text-decoration:none}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter,.fade-leave-to{opacity:0}.MathJax,.MathJax_CHTML,.MathJax_MathContainer,.MathJax_MathML,.MathJax_PHTML,.MathJax_PlainSource,.MathJax_SVG{outline:0}.ios-app-switch .js-audit{display:none}._loading_wrap_{position:fixed;width:100vw;height:100vh;top:50%;left:50%;transform:translate(-50%,-50%);z-index:999}._loading_div_class_,._loading_wrap_{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}._loading_div_class_{word-wrap:break-word;padding:.5rem .75rem;text-align:center;z-index:9999;font-size:.6rem;max-width:60%;color:#fff;border-radius:.25rem;-ms-flex-direction:column;flex-direction:column}._loading_div_class_ .message{color:#353535;font-size:16px;line-height:3}.spinner{animation:circle-rotator 1.4s linear infinite}.spinner *{line-height:0;box-sizing:border-box}@keyframes circle-rotator{0%{transform:rotate(0deg)}to{transform:rotate(270deg)}}.path{stroke-dasharray:187;stroke-dashoffset:0;transform-origin:center;animation:circle-dash 1.4s ease-in-out infinite,circle-colors 5.6s ease-in-out infinite}@keyframes circle-colors{0%{stroke:#ff5a05}to{stroke:#ff5a05}}@keyframes circle-dash{0%{stroke-dashoffset:187}50%{stroke-dashoffset:46.75;transform:rotate(135deg)}to{stroke-dashoffset:187;transform:rotate(450deg)}}.confirm-box-wrapper,.confirm-box-wrapper .mask{position:absolute;top:0;left:0;right:0;bottom:0}.confirm-box-wrapper .mask{background:rgba(0,0,0,.6)}.confirm-box-wrapper .confirm-box{position:fixed;top:50%;left:50%;width:267px;background:#fff;transform:translate(-50%,-50%);border-radius:7px}.confirm-box-wrapper .confirm-box .head{margin:0 18px;font-size:18px;text-align:center;line-height:65px;border-bottom:1px solid #d9d9d9}.confirm-box-wrapper .confirm-box .body{padding:18px;padding-bottom:0;color:#353535;font-size:12.5px;max-height:150px;overflow:auto}.confirm-box-wrapper .confirm-box .foot{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:18px}.confirm-box-wrapper .confirm-box .foot .button-cancel{border:1px solid #d9d9d9}.hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}
</style>
<style type="text/css">
.button-cancel[data-v-87ffcada]{color:#888;border:1px solid #888;border-radius:3px;margin-right:12px}.button-cancel[data-v-87ffcada],.button-primary[data-v-87ffcada]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;height:35px;display:inline-block;font-size:15px;text-align:center;line-height:36px}.button-primary[data-v-87ffcada]{color:#fff;background-color:#ff5a05;border-radius:3px}.pd[data-v-87ffcada]{padding-left:1.375rem;padding-right:1.375rem}.article[data-v-87ffcada]{max-width:70rem;margin:0 auto}.article .article-unavailable[data-v-87ffcada]{color:#fa8919;font-size:15px;font-weight:600;line-height:24px;border-radius:5px;padding:12px;background-color:#f6f7fb;margin-top:20px}.article .article-unavailable .iconfont[data-v-87ffcada]{font-size:12px}.article .main[data-v-87ffcada]{padding:1.25rem 0;margin-bottom:52px}.article-title[data-v-87ffcada]{color:#353535;font-weight:400;line-height:1.65rem;font-size:1.34375rem}.article-info[data-v-87ffcada]{color:#888;font-size:.9375rem;margin-top:1.0625rem}.article-content[data-v-87ffcada]{margin-top:1.0625rem}.article-content.android video[data-v-87ffcada]::-webkit-media-controls-fullscreen-button{display:none}.copyright[data-v-87ffcada]{color:#b2b2b2;padding-bottom:20px;margin-top:20px;font-size:13px}.audio-player[data-v-87ffcada]{width:100%;margin:20px 0}.to-comment[data-v-87ffcada]{overflow:hidden;padding-top:10px;margin-bottom:-30px}.to-comment a.button-primary[data-v-87ffcada]{float:right;height:20px;font-size:12px;line-height:20px;padding:4px 8px;cursor:pointer}.article-comments[data-v-87ffcada]{margin-top:2rem}.article-comments h2[data-v-87ffcada]{text-align:center;color:#888;position:relative;z-index:1;margin-bottom:1rem}.article-comments h2[data-v-87ffcada]:before{border-top:1px dotted #888;content:"";position:absolute;top:56%;left:0;width:100%;z-index:-1}.article-comments h2 span[data-v-87ffcada]{font-size:15.25px;font-weight:400;padding:0 1rem;background:#fff;display:inline-block}.article-sub-bottom[data-v-87ffcada]{z-index:10;cursor:pointer}.switch-btns[data-v-87ffcada]{height:76px;cursor:pointer;padding-top:24px;padding-bottom:24px;border-bottom:10px solid #f6f7fb;position:relative}.switch-btns[data-v-87ffcada]:before{content:" ";height:1px;background:#e8e8e8;position:absolute;top:0;left:0;-webkit-box-sizing:border-box;box-sizing:border-box;left:1.375rem;right:1.375rem}.switch-btns .btn[data-v-87ffcada]{height:38px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.switch-btns .btn .tag[data-v-87ffcada]{-webkit-box-flex:0;-ms-flex:0 0 62px;flex:0 0 62px;text-align:center;color:#888;font-size:14px;border-radius:10px;height:22px;line-height:22px;background:#f6f7fb;font-weight:400}.switch-btns .btn .txt[data-v-87ffcada]{margin-left:10px;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;color:#888;font-size:15px;height:22px;line-height:22px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400}@media (max-width:769px){.article .breadcrumb[data-v-87ffcada]{padding-top:10px;padding-bottom:10px}}
</style>
<style type="text/css">
.comment-item{list-style-position:inside;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin-bottom:1rem}.comment-item a{border-bottom:none}.comment-item .avatar{width:2.625rem;height:2.625rem;-ms-flex-negative:0;flex-shrink:0;border-radius:50%}.comment-item .info{margin-left:.5rem;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.comment-item .info .hd{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.comment-item .info .hd .username{color:#888;font-size:15.25px;font-weight:400;line-height:1.2}.comment-item .info .hd .control{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.comment-item .info .hd .control .btn-share{color:#888;font-size:.75rem;margin-right:1rem}.comment-item .info .hd .control .btn-praise{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:15.25px;text-decoration:none}.comment-item .info .hd .control .btn-praise i{color:#888;display:inline-block;font-size:.75rem;margin-right:.3rem;margin-top:-.01rem}.comment-item .info .hd .control .btn-praise i.on,.comment-item .info .hd .control .btn-praise span{color:#ff5a05}.comment-item .info .bd{color:#353535;font-size:15.25px;font-weight:400;white-space:normal;word-break:break-all;line-height:1.6}.comment-item .info .time{color:#888;font-size:9px;line-height:1}.comment-item .info .reply .reply-hd{font-size:15.25px}.comment-item .info .reply .reply-hd span{margin-left:-12px;color:#888;font-weight:400}.comment-item .info .reply .reply-hd i{color:#ff5a05;font-size:15.25px}.comment-item .info .reply .reply-content{color:#353535;font-size:15.25px;font-weight:400;white-space:normal;word-break:break-all}.comment-item .info .reply .reply-time{color:#888;font-size:9px}
</style>
</head>
<body>
<div id="app">
<div data-v-87ffcada="" class="article" id="watermark">
<div data-v-87ffcada="" class="main main-app">
<h1 data-v-87ffcada="" class="article-title pd">
第5讲讲从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?
</h1>
<div data-v-87ffcada="" class="article-content typo common-content pd"><img data-v-87ffcada=""
src="https://static001.geekbang.org/resource/image/12/64/12c36878454816bf9ab83355bfd02164.jpg">
<div data-v-87ffcada="" id="article-content" class="">
<div class="text">
<p>上一节,我们见证了IP地址的诞生,或者说是整个操作系统的诞生。一旦机器有了IP,就可以在网络的环境里和其他的机器展开沟通了。</p>
<p>故事就从我的大学宿舍开始讲起吧。作为一个八零后,我要暴露年龄了。</p>
<p>我们宿舍四个人,大一的时候学校不让上网,不给开通网络。但是,宿舍有一个人比较有钱,率先买了一台电脑。那买了电脑干什么呢?</p>
<p>首先,有单机游戏可以打,比如说《拳皇》。两个人用一个键盘,照样打得火热。后来有第二个人买了电脑,那两台电脑能不能连接起来呢?你会说,当然能啊,买个路由器不就行了。</p>
<p>现在一台家用路由器非常便宜,一百多块的事情。那时候路由器绝对是奢侈品。一直到大四,我们宿舍都没有买路由器。可能是因为那时候技术没有现在这么发达,导致我对网络技术的认知是逐渐深入的,而且每一层都是实实在在接触到的。</p>
<h2 id="-">第一层(物理层)</h2>
<p>使用路由器,是在第三层上。我们先从第一层物理层开始说。</p>
<p>物理层能折腾啥?现在的同学可能想不到,我们当时去学校配电脑的地方买网线,卖网线的师傅都会问,你的网线是要电脑连电脑啊,还是电脑连网口啊?</p>
<p>我们要的是电脑连电脑。这种方式就是一根网线,有两个头。一头插在一台电脑的网卡上,另一头插在另一台电脑的网卡上。但是在当时,普通的网线这样是通不了的,所以水晶头要做交叉线,用的就是所谓的<strong>1-3</strong>、<strong>2-6交叉接法</strong>。</p>
<p>水晶头的第1、2和第3、6脚,它们分别起着收、发信号的作用。将一端的1号和3号线、2号和6号线互换一下位置,就能够在物理层实现一端发送的信号,另一端能收到。</p>
<p>当然电脑连电脑,除了网线要交叉,还需要配置这两台电脑的IP地址、子网掩码和默认网关。这三个概念上一节详细描述过了。要想两台电脑能够通信,这三项必须配置成为一个网络,可以一个是192.168.0.1/24,另一个是192.168.0.2/24,否则是不通的。</p>
<p>这里我想问你一个问题,两台电脑之间的网络包,包含MAC层吗?当然包含,要完整。IP层要封装了MAC层才能将包放入物理层。</p>
<p>到此为止,两台电脑已经构成了一个最小的<strong>局域网</strong>,也即<strong>LAN。</strong>可以玩联机局域网游戏啦!</p>
<p>等到第三个哥们也买了一台电脑,怎么把三台电脑连在一起呢?</p>
<!-- [[[read_end]]] -->
<p>先别说交换机,当时交换机也贵。有一个叫作<strong>Hub</strong>的东西,也就是<strong>集线器</strong>。这种设备有多个口,可以将宿舍里的多台电脑连接起来。但是,和交换机不同,集线器没有大脑,它完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。这是第一层物理层联通的方案。</p>
<h2 id="-">第二层(数据链路层)</h2>
<p>你可能已经发现问题了。Hub采取的是广播的模式,如果每一台电脑发出的包,宿舍的每个电脑都能收到,那就麻烦了。这就需要解决几个问题:</p>
<ol>
<li>这个包是发给谁的?谁应该接收?</li>
<li>大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?</li>
<li>如果发送的时候出现了错误,怎么办?</li>
</ol>
<p>这几个问题,都是第二层,数据链路层,也即MAC层要解决的问题。<strong>MAC</strong>的全称是<strong>Medium Access Control</strong>,即<strong>媒体访问控制。</strong>控制什么呢?其实就是控制在往媒体上发数据的时候,谁先发、谁后发的问题。防止发生混乱。这解决的是第二个问题。这个问题中的规则,学名叫<strong>多路访问</strong>。有很多算法可以解决这个问题。就像车管所管束马路上跑的车,能想的办法都想过了。</p>
<p>比如接下来这三种方式:</p>
<ul>
<li><p>方式一:分多个车道。每个车一个车道,你走你的,我走我的。这在计算机网络里叫作<strong>信道划分;</strong></p>
</li>
<li><p>方式二:今天单号出行,明天双号出行,轮着来。这在计算机网络里叫作<strong>轮流协议;</strong></p>
</li>
<li><p>方式三:不管三七二十一,有事儿先出门,发现特堵,就回去。错过高峰再出。我们叫作<strong>随机接入协议。</strong>著名的以太网,用的就是这个方式。</p>
</li>
</ul>
<p>解决了第二个问题,就是解决了媒体接入控制的问题,MAC的问题也就解决好了。这和MAC地址没什么关系。</p>
<p>接下来要解决第一个问题:发给谁,谁接收?这里用到一个物理地址,叫作<strong>链路层地址。</strong>但是因为第二层主要解决媒体接入控制的问题,所以它常被称为<strong>MAC地址</strong>。</p>
<p>解决第一个问题就牵扯到第二层的网络包<strong>格式</strong>。对于以太网,第二层的最开始,就是目标的MAC地址和源的MAC地址。</p>
<p><img src="https://static001.geekbang.org/resource/image/ce/ed/cef93d665ca863fef40f7f854d5d33ed.jpg" alt=""></p>
<p>接下来是<strong>类型</strong>,大部分的类型是IP数据包,然后IP里面包含TCP、UDP,以及HTTP等,这都是里层封装的事情。</p>
<p>有了这个目标MAC地址,数据包在链路上广播,MAC的网卡才能发现,这个包是给它的。MAC的网卡把包收进来,然后打开IP包,发现IP地址也是自己的,再打开TCP包,发现端口是自己,也就是80,而nginx就是监听80。</p>
<p>于是将请求提交给nginx,nginx返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最后到MAC层。因为来的时候有源MAC地址,返回的时候,源MAC就变成了目标MAC,再返给请求的机器。</p>
<p>对于以太网,第二层的最后面是<strong>CRC</strong>,也就是<strong>循环冗余检测</strong>。通过XOR异或的算法,来计算整个包是否在发送的过程中出现了错误,主要解决第三个问题。</p>
<p>这里还有一个没有解决的问题,当源机器知道目标机器的时候,可以将目标地址放入包里面,如果不知道呢?一个广播的网络里面接入了N台机器,我怎么知道每个MAC地址是谁呢?这就是<strong>ARP协议</strong>,也就是已知IP地址,求MAC地址的协议。</p>
<p><img src="https://static001.geekbang.org/resource/image/17/3d/17ac2f46ef531e2b4380300f10267e3d.jpg" alt=""></p>
<p>在一个局域网里面,当知道了IP地址,不知道MAC怎么办呢?靠“吼”。</p>
<p><img src="https://static001.geekbang.org/resource/image/5f/68/5fe88a40a8b5d507601968efb50ac668.jpg" alt=""></p>
<p>广而告之,发送一个广播包,谁是这个IP谁来回答。具体询问和回答的报文就像下面这样:</p>
<p><img src="https://static001.geekbang.org/resource/image/2b/2f/2bc53afb25515e96d0e646e297b1ce2f.jpg" alt=""></p>
<p>为了避免每次都用ARP请求,机器本地也会进行ARP缓存。当然机器会不断地上线下线,IP也可能会变,所以ARP的MAC地址缓存过一段时间就会过期。</p>
<h2 id="-">局域网</h2>
<p>好了,至此我们宿舍四个电脑就组成了一个局域网。用Hub连接起来,就可以玩局域网版的《魔兽争霸》了。</p>
<p><img src="https://static001.geekbang.org/resource/image/33/ac/33d180e376439ca10e3f126eb2e36bac.jpg" alt=""></p>
<p>打开游戏,进入“局域网选项”,选择一张地图,点击“创建游戏”,就可以进入这张地图的房间中。等同一个局域网里的其他小伙伴加入后,游戏就可以开始了。</p>
<p>这种组网的方法,对一个宿舍来说没有问题,但是一旦机器数目增多,问题就出现了。因为Hub是广播的,不管某个接口是否需要,所有的Bit都会被发送出去,然后让主机来判断是不是需要。这种方式路上的车少就没问题,车一多,产生冲突的概率就提高了。而且把不需要的包转发过去,纯属浪费。看来Hub这种不管三七二十一都转发的设备是不行了,需要点儿智能的。因为每个口都只连接一台电脑,这台电脑又不怎么换IP和MAC地址,只要记住这台电脑的MAC地址,如果目标MAC地址不是这台电脑的,这个口就不用转发了。</p>
<p>谁能知道目标MAC地址是否就是连接某个口的电脑的MAC地址呢?这就需要一个能把MAC头拿下来,检查一下目标MAC地址,然后根据策略转发的设备,按第二节课中讲过的,这个设备显然是个二层设备,我们称为<strong>交换机</strong>。</p>
<p>交换机怎么知道每个口的电脑的MAC地址呢?这需要交换机会学习。</p>
<p>一台MAC1电脑将一个包发送给另一台MAC2电脑,当这个包到达交换机的时候,一开始交换机也不知道MAC2的电脑在哪个口,所以没办法,它只能将包转发给除了来的那个口之外的其他所有的口。但是,这个时候,交换机会干一件非常聪明的事情,就是交换机会记住,MAC1是来自一个明确的口。以后有包的目的地址是MAC1的,直接发送到这个口就可以了。</p>
<p>当交换机作为一个关卡一样,过了一段时间之后,就有了整个网络的一个结构了,这个时候,基本上不用广播了,全部可以准确转发。当然,每个机器的IP地址会变,所在的口也会变,因而交换机上的学习的结果,我们称为<strong>转发表</strong>,是有一个过期时间的。</p>
<p>有了交换机,一般来说,你接个几十台、上百台机器打游戏,应该没啥问题。你可以组个战队了。能上网了,就可以玩网游了。</p>
<p>这里,给你推荐一个课程,极客时间新上线了<strong><span class="orange">《从0开始学游戏开发》</span></strong>,由原网易游戏引擎架构师、资深底层技术专家蔡能老师,手把手带你梳理游戏开发的流程和细节,为你剖析热门游戏的成功之道。帮助普通程序员成为游戏开发工程师,步入游戏开发之路。<strong><span class="orange">你可以点击文末的图片进入课程。</strong></span></p>
<h2 id="-">小结</h2>
<p>好了,今天的内容差不多了,我们来总结一下,有三个重点需要你记住:</p>
<p>第一,MAC层是用来解决多路访问的堵车问题的;</p>
<p>第二,ARP是通过吼的方式来寻找目标MAC地址的,吼完之后记住一段时间,这个叫作缓存;</p>
<p>第三,交换机是有MAC地址学习能力的,学完了它就知道谁在哪儿了,不用广播了。</p>
<p>最后,给你留两个思考题吧。</p>
<ol>
<li>在二层中我们讲了ARP协议,即已知IP地址求MAC;还有一种RARP协议,即已知MAC求IP的,你知道它可以用来干什么吗?</li>
<li>如果一个局域网里面有多个交换机,ARP广播的模式会出现什么问题呢?</li>
</ol>
<p>欢迎你留言和我讨论。趣谈网络协议,我们下期见!</p>
<p><a href="https://time.geekbang.org/column/intro/87?utm_source=artibanner&utm_medium=87&utm_campaign=87-presell&utm_content=banner"><img src="https://static001.geekbang.org/resource/image/fa/02/fa3c88ecc84cba79aa2228a70fca5502.jpg" alt=""></a></p>
</div>
</div>
</div>
<div data-v-87ffcada="" class="article-comments pd"><h2 data-v-87ffcada=""><span
data-v-87ffcada="">精选留言</span></h2>
<ul data-v-87ffcada="">
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/10/d6/42/bafec9b7.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">盖</span>
</div>
<div class="bd">ARP广播时,交换机会将一个端口收到的包转发到其它所有的端口上。<br>比如数据包经过交换机A到达交换机B,交换机B又将包复制为多份广播出去。<br>如果整个局域网存在一个环路,使得数据包又重新回到了最开始的交换机A,这个包又会被A再次复制多份广播出去。<br>如此循环,数据包会不停得转发,而且越来越多,最终占满带宽,或者使解析协议的硬件过载,行成广播风暴。 <br></div>
<span class="time">2018-05-29 17:46</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">赞</p>
<p class="reply-time">2018-05-29 18:58</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/0f/fe/8f/466f880d.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">没心没肺</span>
</div>
<div class="bd">Hub:<br>1.一个广播域,一个冲突域。<br>2.传输数据的过程中易产生冲突,带宽利用率不高<br>Switch:<br>1.在划分vlan的前提下可以实现多个广播域,每个接口都是一个单独的冲突域<br>2.通过自我学习的方法可以构建出CAM表,并基于CAM进行转发数据。<br>3.支持生成树算法。可以构建出物理有环,逻辑无环的网络,网络冗余和数据传输效率都甩Hub好几条街。SW是目前组网的基本设备之一。 <br></div>
<span class="time">2018-05-28 09:56</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">赞</p>
<p class="reply-time">2018-05-28 13:48</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/11/6a/06/66831563.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">阡陌</span>
</div>
<div class="bd">不得不说,看留言也能学到很多东西 <br></div>
<span class="time">2018-05-30 08:32</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">高手还是很多的</p>
<p class="reply-time">2018-05-30 10:28</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/10/d6/42/bafec9b7.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">盖</span>
</div>
<div class="bd">之前有无盘工作站,即没有硬盘的机器,无法持久化ip地址到本地,但有网卡,所以可以用RARP协议来获取IP地址。RARP可以用于局域网管理员想指定机器IP(与机器绑定,不可变),又不想每台机器去设置静态IP的情况,可以在RARP服务器上配置MAC和IP对应的ARP表,不过获取每台机器的MAC地址,好像也挺麻烦的。这个协议现在应该用得不多了吧,都用BOOTP或者DHCP了。 <br></div>
<span class="time">2018-05-29 11:11</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">对的,赞</p>
<p class="reply-time">2018-05-29 11:36</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/11/47/90/6828af58.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">田豪杰</span>
</div>
<div class="bd">一直坚持看到第五讲,我理解能力太差了,感觉还是一头雾水唉…… <br></div>
<span class="time">2018-05-29 20:18</span>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/0f/42/45/cdfe6842.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">Z3</span>
</div>
<div class="bd">当年玩魔兽经常出现他建房我看不见,我建房他能看见之类的问题。 这些可能是应用层的问题吗?<br> <br></div>
<span class="time">2018-05-30 15:12</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">这个,场景不在了,很难分析</p>
<p class="reply-time">2018-05-30 17:57</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/11/69/df/71563d52.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">戴劼 DAI JIE</span>
</div>
<div class="bd">当年上课学习记住了交叉线和直连线的区别,工作后有一次两台机器对拷,发现网卡能自适应直连线,懵逼了。 <br></div>
<span class="time">2018-06-07 01:37</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">是的,现在自适应了</p>
<p class="reply-time">2018-06-07 13:21</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/0f/fa/33/0eb31e67.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">Amorfati</span>
</div>
<div class="bd">1. rarp 除了通过mac地址去向dhcp之类服务要一个IP,其他没有想到有什么用,按照我的理解,如果非直联同一交换机,一个设备去找另一个设备,知道其mac地址而不知其ip,说不通<br><br>2. 多个交换机,若pc1所连交换机为A,pc2,pc3所连交换机为B,AB直连,pc1找pc2的时候A会把直连B的端口缓存为pc2的mac地址,在过期时间内,pc1都没有办法找到pc3<br><br>这个就是我的理解,如有误还请老师指正<br> <br></div>
<span class="time">2018-05-28 11:03</span>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/10/74/ea/c9c4318a.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">kivensu</span>
</div>
<div class="bd">是不是可以理解成交换机是具备学习功能的hub <br></div>
<span class="time">2018-08-25 16:43</span>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/0f/8d/a6/a28e6110.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">楊_宵夜</span>
</div>
<div class="bd">连续看了好几篇!真的是大道至简!逻辑无比清晰!细节的深度刚刚好!赞!以太网也是个很有趣的东西,记得在知乎上看到过,最离奇的Bug都有哪些。其中一个关于以太网的是说,某个大学因为建筑施工,挖掘机的声波频率影响了光纤电缆中的信号传输,导致信号最多只能传输520多公里哈哈哈,也就是说520公里以外的服务器都访问不到了。<br>这里细节肯定记错了,抛个砖,有兴趣的各位可以在知乎搜搜 <br></div>
<span class="time">2018-06-08 13:13</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">谢谢啦</p>
<p class="reply-time">2018-06-08 16:29</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/11/21/02/fff4409b.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">采菇凉的小</span>
</div>
<div class="bd">能说一下XOR异或具体操作什么吗?以及如何通过操作进行检验的 <br></div>
<span class="time">2018-10-26 18:48</span>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/11/46/00/51f09059.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">hujunr</span>
</div>
<div class="bd">当时用的交换机,把一条网线的2端同时接到交换机了,结果所有电脑都连不上网了,这是为什么? <br></div>
<span class="time">2018-07-30 14:46</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">arp广播塞满了</p>
<p class="reply-time">2018-07-31 20:23</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/0f/df/38/3552c2ae.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">匿名用户</span>
</div>
<div class="bd">为了避免每次都用 ARP 请求,机器本地也会进行 ARP 缓存。当然机器会不断地上线下线,IP 也可能会变,所以 ARP 的 MAC 地址缓存过一段时间就会过期。这就是路由表存在的意义?这里应该提一下啊… <br></div>
<span class="time">2018-06-03 07:18</span>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/11/43/90/167a13fa.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">徐良红</span>
</div>
<div class="bd">rarp现网似乎很少见,理论上应该是根据mac去查询对应的ip。<br>一个局域网如果没有划分vlan,广播报文会传播到整个网内所有主机。<br><br>请老师指正 <br></div>
<span class="time">2018-05-28 23:47</span>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="" class="avatar">
<div class="info">
<div class="hd"><span class="username">MrGuo</span>
</div>
<div class="bd">老师 mac缓存这些有个有效时间 如果有效时间还没到 但是局域网有其他设备改变了ip mac,这时缓存的mac不就不对了吗 <br></div>
<span class="time">2018-11-23 09:24</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">是的,这个时候会发送不成功,会刷新</p>
<p class="reply-time">2018-11-23 12:27</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="" class="avatar">
<div class="info">
<div class="hd"><span class="username">wrzgeek</span>
</div>
<div class="bd">网络小白,终于知道交换机和集线器的区别了,每天进步一点点,很开心 <br></div>
<span class="time">2018-09-16 14:00</span>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/12/6a/03/7fa5ad1a.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">远心</span>
</div>
<div class="bd">用网线直接连接两台计算机的方式,如何知道另一台计算机的 MAC 地址?使用 ARP 协议吗?也就是说其实每一台计算机都安装着 ARP Client/Server 吗? <br></div>
<span class="time">2018-09-15 18:46</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">是arp,内核里面就有这部分逻辑</p>
<p class="reply-time">2018-09-15 21:40</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="" class="avatar">
<div class="info">
<div class="hd"><span class="username">天天向</span>
</div>
<div class="bd">老师,一直没明白你说的mac层是什么?是物理层吗?还是数据链路层? <br></div>
<span class="time">2018-07-12 15:27</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">链路层,后面也解释了尴尬的叫法,但是约定俗成</p>
<p class="reply-time">2018-07-12 20:11</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/0f/ed/4d/1d1a1a00.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">magict4</span>
</div>
<div class="bd">两台电脑直连的情况下,谁是网关呢?电脑可以充当网关吗? <br></div>
<span class="time">2018-06-18 07:41</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">不用配置网关就能通</p>
<p class="reply-time">2018-06-18 14:57</p>
</div>
</div>
</li>
<li data-v-87ffcada="" class="comment-item"><img
src="https://static001.geekbang.org/account/avatar/00/10/52/bb/084faf32.jpg" class="avatar">
<div class="info">
<div class="hd"><span class="username">hunterlodge</span>
</div>
<div class="bd">交换机学习后如果把两个网口的线互换会出现什么情况呢?交换机能识别出错误更新配置吗? <br></div>
<span class="time">2018-06-15 18:23</span>
<div class="reply">
<div class="reply-hd"><span>作者回复</span></div>
<p class="reply-content">会有超时时间,也会重新学习</p>
<p class="reply-time">2018-06-15 19:37</p>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</body>
</html>