diff --git a/docs/.vuepress/dist/404.html b/docs/.vuepress/dist/404.html new file mode 100644 index 0000000..a5e3fe2 --- /dev/null +++ b/docs/.vuepress/dist/404.html @@ -0,0 +1,15 @@ + + + + + + + Coz的学习笔记 + + + + +

404

There's nothing here.
回到首页
+ + + diff --git a/docs/.vuepress/dist/assets/css/634.styles.ee6a060d.css b/docs/.vuepress/dist/assets/css/634.styles.ee6a060d.css new file mode 100644 index 0000000..c5e4563 --- /dev/null +++ b/docs/.vuepress/dist/assets/css/634.styles.ee6a060d.css @@ -0,0 +1 @@ +iframe{border:2px solid #3eaf7c;width:100%;height:500px} diff --git a/docs/.vuepress/dist/assets/css/styles.792c48da.css b/docs/.vuepress/dist/assets/css/styles.792c48da.css new file mode 100644 index 0000000..bc9d040 --- /dev/null +++ b/docs/.vuepress/dist/assets/css/styles.792c48da.css @@ -0,0 +1,10 @@ +.icon.outbound{position:relative;display:inline-block;color:#aaa;vertical-align:middle;top:-1px} +:root{--c-brand:#3eaf7c;--c-brand-light:#4abf8a;--c-bg:#ffffff;--c-bg-light:#f3f4f5;--c-bg-lighter:#eeeeee;--c-bg-navbar:var(--c-bg);--c-bg-sidebar:var(--c-bg);--c-bg-arrow:#cccccc;--c-text:#2c3e50;--c-text-accent:var(--c-brand);--c-text-light:#3a5169;--c-text-lighter:#4e6e8e;--c-text-lightest:#6a8bad;--c-text-quote:#999999;--c-border:#eaecef;--c-border-dark:#dfe2e5;--c-tip:#42b983;--c-tip-bg:var(--c-bg-light);--c-tip-title:var(--c-text);--c-tip-text:var(--c-text);--c-tip-text-accent:var(--c-text-accent);--c-warning:#e7c000;--c-warning-bg:#fffae3;--c-warning-title:#ad9000;--c-warning-text:#746000;--c-warning-text-accent:var(--c-text);--c-danger:#cc0000;--c-danger-bg:#ffe0e0;--c-danger-title:#990000;--c-danger-text:#660000;--c-danger-text-accent:var(--c-text);--c-details-bg:#eeeeee;--c-badge-tip:var(--c-tip);--c-badge-warning:var(--c-warning);--c-badge-danger:var(--c-danger);--t-color:0.3s ease;--t-transform:0.3s ease;--code-bg-color:#282c34;--code-hl-bg-color:rgba(0, 0, 0, 0.66);--code-ln-color:#9e9e9e;--code-ln-wrapper-width:3.5rem;--font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code:Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height:3.6rem;--navbar-padding-v:0.7rem;--navbar-padding-h:1.5rem;--sidebar-width:20rem;--sidebar-width-mobile:calc(var(--sidebar-width) * 0.82);--content-width:740px;--homepage-width:960px}.back-to-top{--back-to-top-color:var(--c-brand);--back-to-top-color-hover:var(--c-brand-light)}.DocSearch{--docsearch-primary-color:var(--c-brand);--docsearch-text-color:var(--c-text);--docsearch-highlight-color:var(--c-brand);--docsearch-muted-color:var(--c-text-quote);--docsearch-container-background:rgba(9, 10, 17, 0.8);--docsearch-modal-background:var(--c-bg-light);--docsearch-searchbox-background:var(--c-bg-lighter);--docsearch-searchbox-focus-background:var(--c-bg);--docsearch-searchbox-shadow:inset 0 0 0 2px var(--c-brand);--docsearch-hit-color:var(--c-text-light);--docsearch-hit-active-color:var(--c-bg);--docsearch-hit-background:var(--c-bg);--docsearch-hit-shadow:0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background:var(--c-bg)}.medium-zoom-overlay{--medium-zoom-bg-color:var(--c-bg)}#nprogress{--nprogress-color:var(--c-brand)}.pwa-popup{--pwa-popup-text-color:var(--c-text);--pwa-popup-bg-color:var(--c-bg);--pwa-popup-border-color:var(--c-brand);--pwa-popup-shadow:0 4px 16px var(--c-brand);--pwa-popup-btn-text-color:var(--c-bg);--pwa-popup-btn-bg-color:var(--c-brand);--pwa-popup-btn-hover-bg-color:var(--c-brand-light)}.search-box{--search-bg-color:var(--c-bg);--search-accent-color:var(--c-brand);--search-text-color:var(--c-text);--search-border-color:var(--c-border);--search-item-text-color:var(--c-text-lighter);--search-item-focus-bg-color:var(--c-bg-light)}html.dark{--c-brand:#3aa675;--c-brand-light:#349469;--c-bg:#22272e;--c-bg-light:#2b313a;--c-bg-lighter:#262c34;--c-text:#adbac7;--c-text-light:#96a7b7;--c-text-lighter:#8b9eb0;--c-text-lightest:#8094a8;--c-border:#3e4c5a;--c-border-dark:#34404c;--c-tip:#318a62;--c-warning:#ceab00;--c-warning-bg:#7e755b;--c-warning-title:#ceac03;--c-warning-text:#362e00;--c-danger:#940000;--c-danger-bg:#806161;--c-danger-title:#610000;--c-danger-text:#3a0000;--c-details-bg:#323843;--code-hl-bg-color:#363b46;color-scheme:dark}html.dark .DocSearch{--docsearch-logo-color:var(--c-text);--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow:inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, 0.3);--docsearch-key-gradient:linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73, 76, 106, 0.5), 0 -4px 8px 0 rgba(0, 0, 0, 0.2)}body,html{padding:0;margin:0;background-color:var(--c-bg);transition:background-color var(--t-color)}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:var(--c-text)}a,p a code{color:var(--c-text-accent)}a{font-weight:500;overflow-wrap:break-word}p a code{font-weight:400}code,kbd{font-family:var(--font-family-code)}kbd{background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{color:var(--c-text-lighter);padding:.25rem .5rem;font-size:.85em;background-color:var(--c-bg-light);border-radius:3px;overflow-wrap:break-word;transition:background-color var(--t-color),color var(--t-color)}blockquote{color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p,code{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}blockquote,h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a,a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid var(--c-border)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid var(--c-border-dark)}tr:nth-child(2n){background-color:var(--c-bg-light)}td,th{border:1px solid var(--c-border-dark);padding:.6em 1em}.arrow,.badge{display:inline-block}.arrow{width:0;height:0}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.up{border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-top:6px solid var(--c-bg-arrow)}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.right{border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-right:6px solid var(--c-bg-arrow)}.badge{font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top;transition:color var(--t-color),background-color var(--t-color)}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning)}.badge.danger{background-color:var(--c-badge-danger)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:0 0;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent;border-radius:0;overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]::before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:0 0!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line::before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers .line-number,div[class*=language-].line-numbers-mode .line-numbers br{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;font-size:.85em}div[class*=language-].line-numbers-mode::after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}div[class*=language-].ext-c:before{content:"c"}div[class*=language-].ext-cpp:before{content:"cpp"}div[class*=language-].ext-cs:before{content:"cs"}div[class*=language-].ext-css:before{content:"css"}div[class*=language-].ext-dart:before{content:"dart"}div[class*=language-].ext-docker:before{content:"docker"}div[class*=language-].ext-fs:before{content:"fs"}div[class*=language-].ext-go:before{content:"go"}div[class*=language-].ext-html:before{content:"html"}div[class*=language-].ext-java:before{content:"java"}div[class*=language-].ext-js:before{content:"js"}div[class*=language-].ext-json:before{content:"json"}div[class*=language-].ext-kt:before{content:"kt"}div[class*=language-].ext-less:before{content:"less"}div[class*=language-].ext-makefile:before{content:"makefile"}div[class*=language-].ext-md:before{content:"md"}div[class*=language-].ext-php:before{content:"php"}div[class*=language-].ext-py:before{content:"py"}div[class*=language-].ext-rb:before{content:"rb"}div[class*=language-].ext-rs:before{content:"rs"}div[class*=language-].ext-sass:before{content:"sass"}div[class*=language-].ext-scss:before{content:"scss"}div[class*=language-].ext-sh:before{content:"sh"}div[class*=language-].ext-styl:before{content:"styl"}div[class*=language-].ext-ts:before{content:"ts"}div[class*=language-].ext-toml:before{content:"toml"}div[class*=language-].ext-vue:before{content:"vue"}div[class*=language-].ext-yml:before{content:"yml"}@media (max-width:419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:rgba(255,255,255,.9);font-weight:600}.code-group__nav-tab:focus{outline:0}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width:419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item,.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle>a.router-link-active::after{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container{transition:color var(--t-color),border-color var(--t-color),background-color var(--t-color)}.custom-container .custom-container-title{font-weight:600;margin-bottom:-.4rem}.custom-container.danger,.custom-container.tip,.custom-container.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:0;cursor:pointer}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:0 0;border:0;font-weight:500;color:var(--c-text)}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600;font-size:inherit}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title:hover{color:var(--c-text-accent)}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle>a{font-weight:inherit}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover,.navbar-links a.router-link-active,.navbar-links a:hover{color:var(--c-text-accent)}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active::after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child .dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title,.dropdown-wrapper.open .mobile-dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0;font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item>a{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:720px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .actions,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color var(--t-color);box-sizing:border-box}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p,.home .footer{color:var(--c-text-lighter)}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center;transition:border-color var(--t-color)}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .actions,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.theme-default-content:not(.custom){max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar,.sidebar{position:fixed;left:0;box-sizing:border-box}.navbar{z-index:20;top:0;right:0;height:var(--navbar-height);border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar);transition:background-color var(--t-color),border-color var(--t-color)}.sidebar{font-size:16px;width:var(--sidebar-width);z-index:10;margin:0;top:var(--navbar-height);bottom:0;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar);transition:transform var(--t-transform),background-color var(--t-color),border-color var(--t-color)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1),.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-container,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-container,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-container,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-container,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-container,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-container,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}.theme-default-content:not(.custom){padding-top:0}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}@media (max-width:959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width:719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translateX(-100%)}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height:calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-links-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-links-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.navbar-links,.navbar-links a{display:inline-block}.navbar-links a{line-height:1.4rem;color:inherit}.navbar-links .navbar-links-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-links .navbar-links-item:first-child{margin-left:0}@media (max-width:719px){.navbar-links .navbar-links-item{margin-left:0}}@media (min-width:719px){.navbar-links a.router-link-active,.navbar-links a:hover{color:var(--c-text)}.navbar-links-item>a:not(.external).router-link-active,.navbar-links-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:flex;flex-direction:column;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;cursor:inherit}.toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--c-text);transition:transform var(--t-transform)}.toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}@media screen and (max-width:719px){.toggle-sidebar-button{display:block}}.toggle-dark-button{display:flex;margin:auto;margin-left:1rem;border:0;background:0 0;color:var(--c-text);opacity:.8;cursor:pointer}.toggle-dark-button:hover{opacity:1}.toggle-dark-button .icon{width:1.25rem;height:1.25rem}.page-meta,.page-nav{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-meta,.page-nav{padding:2rem}}@media (max-width:419px){.page-meta,.page-nav{padding:1.5rem}}.page{padding-bottom:2rem;display:block}.page-meta{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}.page-meta .last-updated{float:right}@media (max-width:719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding-top:1rem;overflow:auto}.page-nav .next{float:right}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-links{display:none;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color);padding:.5rem 0 .75rem}.sidebar .navbar-links a{font-weight:600}.sidebar .navbar-links .navbar-links-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar .sidebar-links{padding:1.5rem 0}.sidebar .sidebar-links>li:not(:first-child),.sidebar-links>.sidebar-item:not(.sidebar-heading):not(:first-child){margin-top:.75rem}.sidebar .sidebar-links .sidebar-sub-items{padding-left:1rem;font-size:.95em}@media (max-width:719px){.sidebar .navbar-links{display:block}.sidebar .navbar-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active::after{top:calc(1rem - 2px)}.sidebar .sidebar-links{padding:1rem 0}}.sidebar-heading{color:var(--c-text);transition:color .15s ease;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-item:not(.sidebar-heading){font-size:1em;font-weight:400;display:inline-block;color:var(--c-text);border-left:.25rem solid transparent;margin:0;padding:.35rem 1rem .35rem 2rem;line-height:1.4;width:100%;box-sizing:border-box}.sidebar-sub-items .sidebar-item:not(.sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.sidebar-item{cursor:default}a.sidebar-item{cursor:pointer}a.sidebar-item.active,a.sidebar-item:hover{color:var(--c-text-accent)}a.sidebar-item.active{font-weight:600;border-left-color:var(--c-text-accent)}a.sidebar-item.sidebar-heading.active{font-weight:700;border-left-color:transparent}.sidebar-sub-items a.sidebar-item.active{font-weight:500;border-left-color:transparent}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.table-of-contents .badge{vertical-align:middle}.fade-slide-y-enter-active{transition:all .3s ease}.fade-slide-y-leave-active{transition:all .3s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0} +:root{--medium-zoom-z-index:100;--medium-zoom-bg-color:#ffffff;--medium-zoom-opacity:1} +.medium-zoom-overlay{background-color:var(--medium-zoom-bg-color)!important;z-index:var(--medium-zoom-z-index)}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)} +:root{--search-bg-color:#ffffff;--search-accent-color:#3eaf7c;--search-text-color:#2c3e50;--search-border-color:#eaecef;--search-item-text-color:#5d81a5;--search-item-focus-bg-color:#f3f4f5;--search-input-width:8rem;--search-result-width:20rem} +.search-box{display:inline-block;position:relative;margin-left:1rem}.search-box input{cursor:text;width:var(--search-input-width);height:2rem;color:var(--search-text-color);display:inline-block;border:1px solid var(--search-border-color);border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:0;transition:all ease .3s;background:var(--search-bg-color) url(/assets/img/search.b017a09f.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:var(--search-accent-color)}.search-box .suggestions{background:var(--search-bg-color);width:var(--search-result-width);position:absolute;top:2rem;right:0;border:1px solid var(--search-border-color);border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion.focus{background-color:var(--search-item-focus-bg-color)}.search-box .suggestion.focus a{color:var(--search-accent-color)}.search-box .suggestion a{white-space:normal;color:var(--search-item-text-color)}.search-box .suggestion .page-title{font-weight:600}.search-box .suggestion .page-header{font-size:.9em;margin-left:.25em}@media (max-width:720px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (max-width:420px){.search-box input:focus{width:8rem}.search-box .suggestions{width:calc(100vw - 4rem);right:-.5rem}} +:root{--back-to-top-z-index:5;--back-to-top-color:#3eaf7c;--back-to-top-color-hover:#71cda3} +.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/assets/img/back-to-top.8b37f773.svg) no-repeat;mask:url(/assets/img/back-to-top.8b37f773.svg) no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width:959px){.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0} +:root{--nprogress-color:#29d;--nprogress-z-index:1031} +#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px var(--nprogress-color),0 0 5px var(--nprogress-color);opacity:1;transform:rotate(3deg) translate(0,-4px)} diff --git a/docs/.vuepress/dist/assets/img/1-3_基于ISP的多层结构的互联网的概念示意图.91b2932e.svg b/docs/.vuepress/dist/assets/img/1-3_基于ISP的多层结构的互联网的概念示意图.91b2932e.svg new file mode 100644 index 0000000..41b4d9b --- /dev/null +++ b/docs/.vuepress/dist/assets/img/1-3_基于ISP的多层结构的互联网的概念示意图.91b2932e.svg @@ -0,0 +1,4 @@ + + + +
主机A
主机A
本地ISP
本地ISP
地区ISP
地区ISP
主干ISP
主干ISP
地区ISP
地区ISP
主机B
主机B
本地ISP
本地ISP
主干ISP
主干ISP
主干ISP
主干ISP
主干ISP
主干ISP
地区ISP
地区ISP
地区ISP
地区ISP
地区ISP
地区ISP
地区ISP
地区ISP
图1-3 基于ISP的多层结构的互联网的概念示意图
图1-3 基于ISP的多层结构的互联网的概念示意图
本地ISP
本地ISP
本地ISP
本地ISP
本地ISP
本地ISP
本地ISP
本地ISP
本地ISP
本地ISP
本地ISP
本地ISP
本地ISP
本地ISP
大公司
大公司
校园网
校园网
校园网
校园网
公司
公司
A
A
···
···
···
···
···
···
B
B
···
···
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/docs/.vuepress/dist/assets/img/back-to-top.8b37f773.svg b/docs/.vuepress/dist/assets/img/back-to-top.8b37f773.svg new file mode 100644 index 0000000..8323678 --- /dev/null +++ b/docs/.vuepress/dist/assets/img/back-to-top.8b37f773.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/img/day1-How-the-Web-server-works.200e1050.svg b/docs/.vuepress/dist/assets/img/day1-How-the-Web-server-works.200e1050.svg new file mode 100644 index 0000000..e005beb --- /dev/null +++ b/docs/.vuepress/dist/assets/img/day1-How-the-Web-server-works.200e1050.svg @@ -0,0 +1,4 @@ + + + +
浏览器
浏览器
Web服务器
Web服务器
监听客户端请求
监听客户端请求
获取请求方法、
解析URL
获取请求方法、 解析URL
响应客户端请求
(静态、动态)
响应客户端请求 (静态、动态)
响应返回给用户
响应返回给用户
Web服务器工作原理
Web服务器工作原理
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/docs/.vuepress/dist/assets/img/day10-conf-image.07fa24a3.png b/docs/.vuepress/dist/assets/img/day10-conf-image.07fa24a3.png new file mode 100644 index 0000000..d6be5dc Binary files /dev/null and b/docs/.vuepress/dist/assets/img/day10-conf-image.07fa24a3.png differ diff --git a/docs/.vuepress/dist/assets/img/day2-HTTP-request-message.ac379a72.png b/docs/.vuepress/dist/assets/img/day2-HTTP-request-message.ac379a72.png new file mode 100644 index 0000000..9224bfb Binary files /dev/null and b/docs/.vuepress/dist/assets/img/day2-HTTP-request-message.ac379a72.png differ diff --git a/docs/.vuepress/dist/assets/img/day2-World-Wide-Web-shortcut.ae1b396c.png b/docs/.vuepress/dist/assets/img/day2-World-Wide-Web-shortcut.ae1b396c.png new file mode 100644 index 0000000..79b495e Binary files /dev/null and b/docs/.vuepress/dist/assets/img/day2-World-Wide-Web-shortcut.ae1b396c.png differ diff --git a/docs/.vuepress/dist/assets/img/day2-trace-tcp-stream.69b2b430.png b/docs/.vuepress/dist/assets/img/day2-trace-tcp-stream.69b2b430.png new file mode 100644 index 0000000..4a6f324 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/day2-trace-tcp-stream.69b2b430.png differ diff --git a/docs/.vuepress/dist/assets/img/day2-wireshark.bc4bb754.png b/docs/.vuepress/dist/assets/img/day2-wireshark.bc4bb754.png new file mode 100644 index 0000000..73fb211 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/day2-wireshark.bc4bb754.png differ diff --git a/docs/.vuepress/dist/assets/img/day4-the-workflow-of-connection-oriented-sockets.81b480c8.png b/docs/.vuepress/dist/assets/img/day4-the-workflow-of-connection-oriented-sockets.81b480c8.png new file mode 100644 index 0000000..471c86c Binary files /dev/null and b/docs/.vuepress/dist/assets/img/day4-the-workflow-of-connection-oriented-sockets.81b480c8.png differ diff --git a/docs/.vuepress/dist/assets/img/search.b017a09f.svg b/docs/.vuepress/dist/assets/img/search.b017a09f.svg new file mode 100644 index 0000000..03d8391 --- /dev/null +++ b/docs/.vuepress/dist/assets/img/search.b017a09f.svg @@ -0,0 +1 @@ + diff --git a/docs/.vuepress/dist/assets/img/图1-10_电路交换的用户始终占用端到端的通信资源.b8328caf.png b/docs/.vuepress/dist/assets/img/图1-10_电路交换的用户始终占用端到端的通信资源.b8328caf.png new file mode 100644 index 0000000..20786f7 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/图1-10_电路交换的用户始终占用端到端的通信资源.b8328caf.png differ diff --git a/docs/.vuepress/dist/assets/img/图1-11_以分组为基本单位在网络中传送.9b952e52.png b/docs/.vuepress/dist/assets/img/图1-11_以分组为基本单位在网络中传送.9b952e52.png new file mode 100644 index 0000000..6b70618 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/图1-11_以分组为基本单位在网络中传送.9b952e52.png differ diff --git a/docs/.vuepress/dist/assets/img/图1-13_三种交换的比较。电路交换;报文交换;分组交换,P1~P4表示4个分组.8e8a9640.png b/docs/.vuepress/dist/assets/img/图1-13_三种交换的比较。电路交换;报文交换;分组交换,P1~P4表示4个分组.8e8a9640.png new file mode 100644 index 0000000..f7ca67b Binary files /dev/null and b/docs/.vuepress/dist/assets/img/图1-13_三种交换的比较。电路交换;报文交换;分组交换,P1~P4表示4个分组.8e8a9640.png differ diff --git a/docs/.vuepress/dist/assets/img/图1-6_互联网的边缘部分与核心部分.68ffbb7b.png b/docs/.vuepress/dist/assets/img/图1-6_互联网的边缘部分与核心部分.68ffbb7b.png new file mode 100644 index 0000000..e932b60 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/图1-6_互联网的边缘部分与核心部分.68ffbb7b.png differ diff --git a/docs/.vuepress/dist/assets/img/图1-7_客户-服务器工作方式.35994256.png b/docs/.vuepress/dist/assets/img/图1-7_客户-服务器工作方式.35994256.png new file mode 100644 index 0000000..c812615 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/图1-7_客户-服务器工作方式.35994256.png differ diff --git a/docs/.vuepress/dist/assets/img/图1-8_对等连接工作方式(P2P方式).2b4fff05.png b/docs/.vuepress/dist/assets/img/图1-8_对等连接工作方式(P2P方式).2b4fff05.png new file mode 100644 index 0000000..7a76c86 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/图1-8_对等连接工作方式(P2P方式).2b4fff05.png differ diff --git a/docs/.vuepress/dist/assets/img/图1-9_电话机的不同连接方法.ec043257.png b/docs/.vuepress/dist/assets/img/图1-9_电话机的不同连接方法.ec043257.png new file mode 100644 index 0000000..6f3aab1 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/图1-9_电话机的不同连接方法.ec043257.png differ diff --git a/docs/.vuepress/dist/assets/js/293.f4cccc85.js b/docs/.vuepress/dist/assets/js/293.f4cccc85.js new file mode 100644 index 0000000..1ffde7a --- /dev/null +++ b/docs/.vuepress/dist/assets/js/293.f4cccc85.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkvuepress=self.webpackChunkvuepress||[]).push([[293],{3293:(e,l,t)=>{t.r(l),t.d(l,{default:()=>_e});var a=t(6252),n=t(3577),i=t(2262),u=t(9963),s=t(7621),r=t(2119),o=t(480);const c=["href","rel","target","aria-label"],v=(0,a.aZ)({inheritAttrs:!1}),d=(0,a.aZ)({...v,props:{item:{type:Object,required:!0}},setup:function(e){const l=e,t=(0,r.yj)(),u=(0,s.WF)(),{item:v}=(0,i.BK)(l),d=(0,i.Fl)((()=>(0,o.ak)(v.value.link))),p=(0,i.Fl)((()=>(0,o.B2)(v.value.link)||(0,o.R5)(v.value.link))),h=(0,i.Fl)((()=>{if(!p.value)return v.value.target?v.value.target:d.value?"_blank":void 0})),g=(0,i.Fl)((()=>"_blank"===h.value)),m=(0,i.Fl)((()=>!d.value&&!p.value&&!g.value)),k=(0,i.Fl)((()=>{if(!p.value)return v.value.rel?v.value.rel:g.value?"noopener noreferrer":void 0})),b=(0,i.Fl)((()=>v.value.ariaLabel||v.value.text)),w=(0,i.Fl)((()=>{const e=Object.keys(u.value.locales);return e.length?!e.some((e=>e===v.value.link)):"/"!==v.value.link})),f=(0,i.Fl)((()=>!!w.value&&t.path.startsWith(v.value.link))),U=(0,i.Fl)((()=>!!m.value&&(v.value.activeMatch?new RegExp(v.value.activeMatch).test(t.path):f.value)));return(e,l)=>{const t=(0,a.up)("RouterLink"),u=(0,a.up)("OutboundLink");return(0,i.SU)(m)?((0,a.wg)(),(0,a.j4)(t,(0,a.dG)({key:0,class:["nav-link",{"router-link-active":(0,i.SU)(U)}],to:(0,i.SU)(v).link,"aria-label":(0,i.SU)(b)},e.$attrs),{default:(0,a.w5)((()=>[(0,a.WI)(e.$slots,"before"),(0,a.Uk)(" "+(0,n.zw)((0,i.SU)(v).text)+" ",1),(0,a.WI)(e.$slots,"after")])),_:3},16,["class","to","aria-label"])):((0,a.wg)(),(0,a.iD)("a",(0,a.dG)({key:1,class:"nav-link external",href:(0,i.SU)(v).link,rel:(0,i.SU)(k),target:(0,i.SU)(h),"aria-label":(0,i.SU)(b)},e.$attrs),[(0,a.WI)(e.$slots,"before"),(0,a.Uk)(" "+(0,n.zw)((0,i.SU)(v).text)+" ",1),(0,i.SU)(g)?((0,a.wg)(),(0,a.j4)(u,{key:0})):(0,a.kq)("",!0),(0,a.WI)(e.$slots,"after")],16,c))}}}),p=["aria-labelledby"],h={class:"hero"},g=["src","alt"],m={key:1,id:"main-title"},k={key:2,class:"description"},b={key:3,class:"actions"},w={key:0,class:"features"},f={class:"theme-default-content custom"},U=["innerHTML"],S=["textContent"],y=(0,a.aZ)({setup(e){const l=(0,s.I2)(),t=(0,s.I5)(),u=(0,i.Fl)((()=>l.value.heroImage?(0,s.pJ)(l.value.heroImage):null)),r=(0,i.Fl)((()=>null===l.value.heroText?null:l.value.heroText||t.value.title||"Hello")),c=(0,i.Fl)((()=>l.value.heroAlt||r.value||"hero")),v=(0,i.Fl)((()=>null===l.value.tagline?null:l.value.tagline||t.value.description||"Welcome to your VuePress site")),y=(0,i.Fl)((()=>(0,o.kJ)(l.value.actions)?l.value.actions.map((({text:e,link:l,type:t="primary"})=>({text:e,link:l,type:t}))):[])),D=(0,i.Fl)((()=>(0,o.kJ)(l.value.features)?l.value.features:[])),F=(0,i.Fl)((()=>l.value.footer)),_=(0,i.Fl)((()=>l.value.footerHtml));return(e,l)=>{const t=(0,a.up)("Content");return(0,a.wg)(),(0,a.iD)("main",{class:"home","aria-labelledby":(0,i.SU)(r)?"main-title":void 0},[(0,a._)("header",h,[(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("img",{key:0,src:(0,i.SU)(u),alt:(0,i.SU)(c)},null,8,g)):(0,a.kq)("",!0),(0,i.SU)(r)?((0,a.wg)(),(0,a.iD)("h1",m,(0,n.zw)((0,i.SU)(r)),1)):(0,a.kq)("",!0),(0,i.SU)(v)?((0,a.wg)(),(0,a.iD)("p",k,(0,n.zw)((0,i.SU)(v)),1)):(0,a.kq)("",!0),(0,i.SU)(y).length?((0,a.wg)(),(0,a.iD)("p",b,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(y),(e=>((0,a.wg)(),(0,a.j4)(d,{key:e.text,class:(0,n.C_)(["action-button",[e.type]]),item:e},null,8,["class","item"])))),128))])):(0,a.kq)("",!0)]),(0,i.SU)(D).length?((0,a.wg)(),(0,a.iD)("div",w,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(D),(e=>((0,a.wg)(),(0,a.iD)("div",{key:e.title,class:"feature"},[(0,a._)("h2",null,(0,n.zw)(e.title),1),(0,a._)("p",null,(0,n.zw)(e.details),1)])))),128))])):(0,a.kq)("",!0),(0,a._)("div",f,[(0,a.Wm)(t)]),(0,i.SU)(F)?((0,a.wg)(),(0,a.iD)(a.HY,{key:1},[(0,i.SU)(_)?((0,a.wg)(),(0,a.iD)("div",{key:0,class:"footer",innerHTML:(0,i.SU)(F)},null,8,U)):((0,a.wg)(),(0,a.iD)("div",{key:1,class:"footer",textContent:(0,n.zw)((0,i.SU)(F))},null,8,S))],64)):(0,a.kq)("",!0)],8,p)}}});var D=t(2791);const F=e=>!(0,o.ak)(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,_={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},W=(0,a.aZ)({setup(e){const l=e=>{e.style.height=e.scrollHeight+"px"},t=e=>{e.style.height=""};return(e,n)=>((0,a.wg)(),(0,a.j4)(u.uT,{name:"dropdown",onEnter:l,onAfterEnter:t,onBeforeLeave:l},{default:(0,a.w5)((()=>[(0,a.WI)(e.$slots,"default")])),_:3}))}}),x=["aria-label"],I={class:"title"},$=(0,a._)("span",{class:"arrow down"},null,-1),C=["aria-label"],L={class:"title"},z={class:"nav-dropdown"},H={class:"dropdown-subtitle"},j={key:1},q={class:"dropdown-subitem-wrapper"},M=(0,a.aZ)({props:{item:{type:Object,required:!0}},setup(e){const l=e,{item:t}=(0,i.BK)(l),s=(0,i.Fl)((()=>t.value.ariaLabel||t.value.text)),o=(0,i.iH)(!1),c=(0,r.yj)();(0,a.YP)((()=>c.path),(()=>{o.value=!1}));const v=e=>{const l=0===e.detail;o.value=!!l&&!o.value},p=(e,l)=>l[l.length-1]===e;return(e,l)=>((0,a.wg)(),(0,a.iD)("div",{class:(0,n.C_)(["dropdown-wrapper",{open:o.value}])},[(0,a._)("button",{class:"dropdown-title",type:"button","aria-label":(0,i.SU)(s),onClick:v},[(0,a._)("span",I,(0,n.zw)((0,i.SU)(t).text),1),$],8,x),(0,a._)("button",{class:"mobile-dropdown-title",type:"button","aria-label":(0,i.SU)(s),onClick:l[0]||(l[0]=e=>o.value=!o.value)},[(0,a._)("span",L,(0,n.zw)((0,i.SU)(t).text),1),(0,a._)("span",{class:(0,n.C_)(["arrow",o.value?"down":"right"])},null,2)],8,C),(0,a.Wm)(W,null,{default:(0,a.w5)((()=>[(0,a.wy)((0,a._)("ul",z,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(t).children,((e,l)=>((0,a.wg)(),(0,a.iD)("li",{key:e.link||l,class:"dropdown-item"},[e.children?((0,a.wg)(),(0,a.iD)(a.HY,{key:0},[(0,a._)("h4",H,[e.link?((0,a.wg)(),(0,a.j4)(d,{key:0,item:e,onFocusout:l=>p(e,(0,i.SU)(t).children)&&0===e.children.length&&(o.value=!1)},null,8,["item","onFocusout"])):((0,a.wg)(),(0,a.iD)("span",j,(0,n.zw)(e.text),1))]),(0,a._)("ul",q,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)(e.children,(l=>((0,a.wg)(),(0,a.iD)("li",{key:l.link,class:"dropdown-subitem"},[(0,a.Wm)(d,{item:l,onFocusout:a=>p(l,e.children)&&p(e,(0,i.SU)(t).children)&&(o.value=!1)},null,8,["item","onFocusout"])])))),128))])],64)):((0,a.wg)(),(0,a.j4)(d,{key:1,item:e,onFocusout:l=>p(e,(0,i.SU)(t).children)&&(o.value=!1)},null,8,["item","onFocusout"]))])))),128))],512),[[u.F8,o.value]])])),_:1})],2))}}),T={key:0,class:"navbar-links"},B=(0,a.aZ)({setup(e){const l=e=>(0,o.HD)(e)?(0,D.sC)(e):e.children?{...e,children:e.children.map(l)}:e,t=(()=>{const e=(0,D.X6)();return(0,i.Fl)((()=>(e.value.navbar||[]).map(l)))})(),n=(()=>{const e=(0,r.tv)(),l=(0,s.I)(),t=(0,s.I5)(),a=(0,D.X6)();return(0,i.Fl)((()=>{var n,i;const u=Object.keys(t.value.locales);if(u.length<2)return[];const s=e.currentRoute.value.path,r=e.currentRoute.value.fullPath;return[{text:null!=(n=a.value.selectLanguageText)?n:"unkown language",ariaLabel:null!=(i=a.value.selectLanguageAriaLabel)?i:"unkown language",children:u.map((n=>{var i,u,o,c,v,d;const p=null!=(u=null==(i=t.value.locales)?void 0:i[n])?u:{},h=null!=(c=null==(o=a.value.locales)?void 0:o[n])?c:{},g=`${p.lang}`,m=null!=(v=h.selectLanguageName)?v:g;let k;if(g===t.value.lang)k=r;else{const t=s.replace(l.value,n);k=e.getRoutes().some((e=>e.path===t))?t:null!=(d=h.home)?d:n}return{text:m,link:k}}))}]}))})(),u=(()=>{const e=(0,D.X6)(),l=(0,i.Fl)((()=>e.value.repo)),t=(0,i.Fl)((()=>l.value?F(l.value):null)),a=(0,i.Fl)((()=>l.value&&!(0,o.ak)(l.value)?`https://github.com/${l.value}`:l.value)),n=(0,i.Fl)((()=>a.value?e.value.repoLabel?e.value.repoLabel:null===t.value?"Source":t.value:null));return(0,i.Fl)((()=>a.value&&n.value?[{text:n.value,link:a.value}]:[]))})(),c=(0,i.Fl)((()=>[...t.value,...n.value,...u.value]));return(e,l)=>(0,i.SU)(c).length?((0,a.wg)(),(0,a.iD)("nav",T,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(c),(e=>((0,a.wg)(),(0,a.iD)("div",{key:e.text,class:"navbar-links-item"},[e.children?((0,a.wg)(),(0,a.j4)(M,{key:0,item:e},null,8,["item"])):((0,a.wg)(),(0,a.j4)(d,{key:1,item:e},null,8,["item"]))])))),128))])):(0,a.kq)("",!0)}}),R=["title"],Y={class:"icon",focusable:"false",viewBox:"0 0 32 32"},Z=[(0,a.uE)('',9)],X={class:"icon",focusable:"false",viewBox:"0 0 32 32"},P=[(0,a._)("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1)],E=(0,a.aZ)({setup(e){const l=(0,D.X6)(),t=(0,D.vs)(),n=()=>{t.value=!t.value};return(e,s)=>((0,a.wg)(),(0,a.iD)("button",{class:"toggle-dark-button",title:(0,i.SU)(l).toggleDarkMode,onClick:n},[(0,a.wy)(((0,a.wg)(),(0,a.iD)("svg",Y,Z,512)),[[u.F8,!(0,i.SU)(t)]]),(0,a.wy)(((0,a.wg)(),(0,a.iD)("svg",X,P,512)),[[u.F8,(0,i.SU)(t)]])],8,R))}}),K=["title"],V=[(0,a._)("div",{class:"icon","aria-hidden":"true"},[(0,a._)("span"),(0,a._)("span"),(0,a._)("span")],-1)],G=(0,a.aZ)({emits:["toggle"],setup(e){const l=(0,D.X6)();return(e,t)=>((0,a.wg)(),(0,a.iD)("div",{class:"toggle-sidebar-button",title:(0,i.SU)(l).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:t[0]||(t[0]=l=>e.$emit("toggle"))},V,8,K))}}),N=["src","alt"],O=(0,a.aZ)({emits:["toggle-sidebar"],setup(e){const l=(0,s.I)(),t=(0,s.I5)(),u=(0,D.X6)(),r=(0,D.vs)(),o=(0,i.iH)(null),c=(0,i.iH)(null),v=(0,i.Fl)((()=>u.value.home||l.value)),d=(0,i.Fl)((()=>r.value&&void 0!==u.value.logoDark?u.value.logoDark:u.value.logo)),p=(0,i.Fl)((()=>t.value.title)),h=(0,i.iH)(0),g=(0,i.Fl)((()=>h.value?{maxWidth:h.value+"px"}:{})),m=(0,i.Fl)((()=>u.value.darkMode));function k(e,l){var t,a,n;const i=null==(n=null==(a=null==(t=null==e?void 0:e.ownerDocument)?void 0:t.defaultView)?void 0:a.getComputedStyle(e,null))?void 0:n[l],u=Number.parseInt(i,10);return Number.isNaN(u)?0:u}return(0,a.bv)((()=>{const e=k(o.value,"paddingLeft")+k(o.value,"paddingRight"),l=()=>{var l;window.innerWidth<=719?h.value=0:h.value=o.value.offsetWidth-e-((null==(l=c.value)?void 0:l.offsetWidth)||0)};l(),window.addEventListener("resize",l,!1),window.addEventListener("orientationchange",l,!1)})),(e,l)=>{const t=(0,a.up)("ClientOnly"),u=(0,a.up)("RouterLink"),r=(0,a.up)("NavbarSearch");return(0,a.wg)(),(0,a.iD)("header",{ref:(e,l)=>{l.navbar=e,o.value=e},class:"navbar"},[(0,a.Wm)(G,{onToggle:l[0]||(l[0]=l=>e.$emit("toggle-sidebar"))}),(0,a._)("span",{ref:(e,l)=>{l.siteBrand=e,c.value=e}},[(0,a.Wm)(u,{to:(0,i.SU)(v)},{default:(0,a.w5)((()=>[(0,a.Wm)(t,null,{default:(0,a.w5)((()=>[(0,i.SU)(d)?((0,a.wg)(),(0,a.iD)("img",{key:0,class:"logo",src:(0,i.SU)(s.pJ)((0,i.SU)(d)),alt:(0,i.SU)(p)},null,8,N)):(0,a.kq)("",!0)])),_:1}),(0,i.SU)(p)?((0,a.wg)(),(0,a.iD)("span",{key:0,class:(0,n.C_)(["site-name",{"can-hide":(0,i.SU)(d)}])},(0,n.zw)((0,i.SU)(p)),3)):(0,a.kq)("",!0)])),_:1},8,["to"])],512),(0,a._)("div",{class:"navbar-links-wrapper",style:(0,n.j5)((0,i.SU)(g))},[(0,a.WI)(e.$slots,"before"),(0,a.Wm)(B,{class:"can-hide"}),(0,a.WI)(e.$slots,"after"),(0,i.SU)(m)?((0,a.wg)(),(0,a.j4)(E,{key:0})):(0,a.kq)("",!0),(0,a.Wm)(r)],4)],512)}}}),A={class:"page-meta"},J={key:0,class:"meta-item edit-link"},Q={key:1,class:"meta-item last-updated"},ee={class:"meta-item-label"},le={class:"meta-item-info"},te={key:2,class:"meta-item contributors"},ae={class:"meta-item-label"},ne={class:"meta-item-info"},ie=["title"],ue=(0,a.Uk)(", "),se=(0,a.aZ)({setup(e){const l=(0,D.X6)(),t=(()=>{const e=(0,D.X6)(),l=(0,s.Vi)(),t=(0,s.I2)();return(0,i.Fl)((()=>{var a,n,i;if(null!=(n=null!=(a=t.value.editLink)?a:e.value.editLink)&&!n)return null;const{repo:u,docsRepo:s=u,docsBranch:r="main",docsDir:c="",editLinkText:v}=e.value;if(!s)return null;const d=(({docsRepo:e,docsBranch:l,docsDir:t,filePathRelative:a,editLinkPattern:n})=>{const i=F(e);let u;return n?u=n:null!==i&&(u=_[i]),u?u.replace(/:repo/,(0,o.ak)(e)?e:`https://github.com/${e}`).replace(/:branch/,l).replace(/:path/,(0,o.FY)(`${(0,o.U1)(t)}/${a}`)):null})({docsRepo:s,docsBranch:r,docsDir:c,filePathRelative:l.value.filePathRelative,editLinkPattern:null!=(i=t.value.editLinkPattern)?i:e.value.editLinkPattern});return d?{text:null!=v?v:"Edit this page",link:d}:null}))})(),u=(()=>{const e=(0,s.I5)(),l=(0,D.X6)(),t=(0,s.Vi)(),a=(0,s.I2)();return(0,i.Fl)((()=>{var n,i,u,s;return(null==(i=null!=(n=a.value.lastUpdated)?n:l.value.lastUpdated)||i)&&(null==(u=t.value.git)?void 0:u.updatedTime)?new Date(null==(s=t.value.git)?void 0:s.updatedTime).toLocaleString(e.value.lang):null}))})(),r=(()=>{const e=(0,D.X6)(),l=(0,s.Vi)(),t=(0,s.I2)();return(0,i.Fl)((()=>{var a,n,i,u;return null!=(n=null!=(a=t.value.contributors)?a:e.value.contributors)&&!n||null==(u=null==(i=l.value.git)?void 0:i.contributors)?null:u}))})();return(e,s)=>((0,a.wg)(),(0,a.iD)("footer",A,[(0,i.SU)(t)?((0,a.wg)(),(0,a.iD)("div",J,[(0,a.Wm)(d,{class:"meta-item-label",item:(0,i.SU)(t)},null,8,["item"])])):(0,a.kq)("",!0),(0,i.SU)(u)?((0,a.wg)(),(0,a.iD)("div",Q,[(0,a._)("span",ee,(0,n.zw)((0,i.SU)(l).lastUpdatedText)+": ",1),(0,a._)("span",le,(0,n.zw)((0,i.SU)(u)),1)])):(0,a.kq)("",!0),(0,i.SU)(r)&&(0,i.SU)(r).length?((0,a.wg)(),(0,a.iD)("div",te,[(0,a._)("span",ae,(0,n.zw)((0,i.SU)(l).contributorsText)+": ",1),(0,a._)("span",ne,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(r),((e,l)=>((0,a.wg)(),(0,a.iD)(a.HY,{key:l},[(0,a._)("span",{class:"contributor",title:`email: ${e.email}`},(0,n.zw)(e.name),9,ie),l!==(0,i.SU)(r).length-1?((0,a.wg)(),(0,a.iD)(a.HY,{key:0},[ue],64)):(0,a.kq)("",!0)],64)))),128))])])):(0,a.kq)("",!0)]))}}),re={key:0,class:"page-nav"},oe={class:"inner"},ce={key:0,class:"prev"},ve=(0,a.Uk)(" ← "),de={key:1,class:"next"},pe=(0,a.Uk)(" → "),he=(0,a.aZ)({setup(e){const l=e=>!1===e?null:(0,o.HD)(e)?(0,D.sC)(e):!!(0,o.PO)(e)&&e,t=(e,l,a)=>{const n=e.findIndex((e=>e.link===l));if(-1!==n){const l=e[n+a];return(null==l?void 0:l.link)?l:null}for(const n of e)if(n.children){const e=t(n.children,l,a);if(e)return e}return null},n=(0,s.I2)(),u=(0,D.VU)(),c=(0,r.yj)(),v=(0,i.Fl)((()=>{const e=l(n.value.prev);return!1!==e?e:t(u.value,c.path,-1)})),p=(0,i.Fl)((()=>{const e=l(n.value.next);return!1!==e?e:t(u.value,c.path,1)}));return(e,l)=>(0,i.SU)(v)||(0,i.SU)(p)?((0,a.wg)(),(0,a.iD)("nav",re,[(0,a._)("p",oe,[(0,i.SU)(v)?((0,a.wg)(),(0,a.iD)("span",ce,[ve,(0,a.Wm)(d,{item:(0,i.SU)(v)},null,8,["item"])])):(0,a.kq)("",!0),(0,i.SU)(p)?((0,a.wg)(),(0,a.iD)("span",de,[(0,a.Wm)(d,{item:(0,i.SU)(p)},null,8,["item"]),pe])):(0,a.kq)("",!0)])])):(0,a.kq)("",!0)}}),ge={class:"page"},me={class:"theme-default-content"},ke=(0,a.aZ)({setup:e=>(e,l)=>{const t=(0,a.up)("Content");return(0,a.wg)(),(0,a.iD)("main",ge,[(0,a.WI)(e.$slots,"top"),(0,a._)("div",me,[(0,a.Wm)(t)]),(0,a.Wm)(se),(0,a.Wm)(he),(0,a.WI)(e.$slots,"bottom")])}}),be=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),we=(e,l)=>!!((e,l)=>void 0!==l&&(e.hash===l||be(e.path)===be(l)))(e,l.link)||!!l.children&&l.children.some((l=>we(e,l))),fe=(e,l)=>e.link?(0,a.h)(d,{...l,item:e}):(0,a.h)("p",l,e.text),Ue=(e,l)=>{var t;return(null===(t=e.children)||void 0===t?void 0:t.length)?(0,a.h)("ul",{class:{"sidebar-sub-items":l>0}},e.children.map((e=>(0,a.h)("li",(0,a.h)(Se,{item:e,depth:l+1}))))):null},Se=({item:e,depth:l=0})=>{const t=(0,r.yj)(),a=we(t,e);return[fe(e,{class:{"sidebar-heading":0===l,"sidebar-item":!0,active:a}}),Ue(e,l)]};Se.displayName="SidebarChild",Se.props={item:{type:Object,required:!0},depth:{type:Number,required:!1}};const ye={class:"sidebar"},De={class:"sidebar-links"},Fe=(0,a.aZ)({setup(e){const l=(0,D.VU)();return(e,t)=>((0,a.wg)(),(0,a.iD)("aside",ye,[(0,a.Wm)(B),(0,a.WI)(e.$slots,"top"),(0,a._)("ul",De,[((0,a.wg)(!0),(0,a.iD)(a.HY,null,(0,a.Ko)((0,i.SU)(l),(e=>((0,a.wg)(),(0,a.j4)((0,i.SU)(Se),{key:e.link||e.text,item:e},null,8,["item"])))),128))]),(0,a.WI)(e.$slots,"bottom")]))}}),_e=(0,a.aZ)({setup(e){const l=(0,s.Vi)(),t=(0,s.I2)(),o=(0,D.X6)(),c=(0,i.Fl)((()=>!1!==t.value.navbar&&!1!==o.value.navbar)),v=(0,D.VU)(),d=(0,i.iH)(!1),p=e=>{d.value="boolean"==typeof e?e:!d.value},h={x:0,y:0},g=e=>{h.x=e.changedTouches[0].clientX,h.y=e.changedTouches[0].clientY},m=e=>{const l=e.changedTouches[0].clientX-h.x,t=e.changedTouches[0].clientY-h.y;Math.abs(l)>Math.abs(t)&&Math.abs(l)>40&&(l>0&&h.x<=80?p(!0):p(!1))},k=(0,i.Fl)((()=>[{"no-navbar":!c.value,"no-sidebar":!v.value.length,"sidebar-open":d.value},t.value.pageClass]));let b;(0,a.bv)((()=>{const e=(0,r.tv)();b=e.afterEach((()=>{p(!1)}))})),(0,a.Ah)((()=>{b()}));const w=(0,D.P$)(),f=w.resolve,U=w.pending;return(e,s)=>((0,a.wg)(),(0,a.iD)("div",{class:(0,n.C_)(["theme-container",(0,i.SU)(k)]),onTouchstart:g,onTouchend:m},[(0,a.WI)(e.$slots,"navbar",{},(()=>[(0,i.SU)(c)?((0,a.wg)(),(0,a.j4)(O,{key:0,onToggleSidebar:p},{before:(0,a.w5)((()=>[(0,a.WI)(e.$slots,"navbar-before")])),after:(0,a.w5)((()=>[(0,a.WI)(e.$slots,"navbar-after")])),_:3})):(0,a.kq)("",!0)])),(0,a._)("div",{class:"sidebar-mask",onClick:s[0]||(s[0]=e=>p(!1))}),(0,a.WI)(e.$slots,"sidebar",{},(()=>[(0,a.Wm)(Fe,null,{top:(0,a.w5)((()=>[(0,a.WI)(e.$slots,"sidebar-top")])),bottom:(0,a.w5)((()=>[(0,a.WI)(e.$slots,"sidebar-bottom")])),_:3})])),(0,a.WI)(e.$slots,"page",{},(()=>[(0,i.SU)(t).home?((0,a.wg)(),(0,a.j4)(y,{key:0})):((0,a.wg)(),(0,a.j4)(u.uT,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:(0,i.SU)(f),onBeforeLeave:(0,i.SU)(U)},{default:(0,a.w5)((()=>[(0,a.Wm)(ke,{key:(0,i.SU)(l).path},{top:(0,a.w5)((()=>[(0,a.WI)(e.$slots,"page-top")])),bottom:(0,a.w5)((()=>[(0,a.WI)(e.$slots,"page-bottom")])),_:3})])),_:3},8,["onBeforeEnter","onBeforeLeave"]))]))],34))}})}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/491.e62e5555.js b/docs/.vuepress/dist/assets/js/491.e62e5555.js new file mode 100644 index 0000000..8e41df1 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/491.e62e5555.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkvuepress=self.webpackChunkvuepress||[]).push([[491],{8491:(e,t,u)=>{u.r(t),u.d(t,{default:()=>v});var l=u(6252),n=u(3577),o=u(2262),a=u(7621),s=u(2791);const r={class:"theme-container"},c={class:"theme-default-content"},h=(0,l._)("h1",null,"404",-1),v=(0,l.aZ)({setup(e){var t,u,v;const d=(0,a.I)(),k=(0,s.X6)(),m=null!=(t=k.value.notFound)?t:["Not Found"],p=null!=(u=k.value.home)?u:d.value,f=null!=(v=k.value.backToHome)?v:"Back to home";return(e,t)=>{const u=(0,l.up)("RouterLink");return(0,l.wg)(),(0,l.iD)("div",r,[(0,l._)("div",c,[h,(0,l._)("blockquote",null,(0,n.zw)(m[Math.floor(Math.random()*m.length)]),1),(0,l.Wm)(u,{to:(0,o.SU)(p)},{default:(0,l.w5)((()=>[(0,l.Uk)((0,n.zw)((0,o.SU)(f)),1)])),_:1},8,["to"])])])}}})}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/567.6fcf9384.js b/docs/.vuepress/dist/assets/js/567.6fcf9384.js new file mode 100644 index 0000000..89b1fce --- /dev/null +++ b/docs/.vuepress/dist/assets/js/567.6fcf9384.js @@ -0,0 +1,2 @@ +/*! For license information please see 567.6fcf9384.js.LICENSE.txt */ +(self.webpackChunkvuepress=self.webpackChunkvuepress||[]).push([[567],{2262:(e,t,n)=>{"use strict";n.d(t,{Bj:()=>i,qq:()=>b,Fl:()=>Ne,nZ:()=>l,X3:()=>Oe,PG:()=>be,dq:()=>Pe,Xl:()=>ke,EB:()=>a,Jd:()=>k,WL:()=>Fe,qj:()=>me,OT:()=>ge,iH:()=>xe,lk:()=>S,Um:()=>ve,XI:()=>Ie,IU:()=>_e,BK:()=>ze,j:()=>E,X$:()=>P,SU:()=>Te});var o=n(3577);let r;const s=[];class i{constructor(e=!1){this.active=!0,this.effects=[],this.cleanups=[],!e&&r&&(this.parent=r,this.index=(r.scopes||(r.scopes=[])).push(this)-1)}run(e){if(this.active)try{return this.on(),e()}finally{this.off()}}on(){this.active&&(s.push(this),r=this)}off(){this.active&&(s.pop(),r=s[s.length-1])}stop(e){if(this.active){if(this.effects.forEach((e=>e.stop())),this.cleanups.forEach((e=>e())),this.scopes&&this.scopes.forEach((e=>e.stop(!0))),this.parent&&!e){const e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.active=!1}}}function l(){return r}function a(e){r&&r.cleanups.push(e)}const c=e=>{const t=new Set(e);return t.w=0,t.n=0,t},u=e=>(e.w&h)>0,p=e=>(e.n&h)>0,d=new WeakMap;let f=0,h=1;const m=[];let v;const g=Symbol(""),y=Symbol("");class b{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],function(e,t){(t=t||r)&&t.active&&t.effects.push(e)}(this,n)}run(){if(!this.active)return this.fn();if(!m.includes(this))try{return m.push(v=this),_.push(O),O=!0,h=1<<++f,f<=30?(({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let o=0;o0?m[e-1]:void 0}}stop(){this.active&&(w(this),this.onStop&&this.onStop(),this.active=!1)}}function w(e){const{deps:t}=e;if(t.length){for(let n=0;n{("length"===t||t>=r)&&a.push(e)}));else switch(void 0!==n&&a.push(l.get(n)),t){case"add":(0,o.kJ)(e)?(0,o.S0)(n)&&a.push(l.get("length")):(a.push(l.get(g)),(0,o._N)(e)&&a.push(l.get(y)));break;case"delete":(0,o.kJ)(e)||(a.push(l.get(g)),(0,o._N)(e)&&a.push(l.get(y)));break;case"set":(0,o._N)(e)&&a.push(l.get(g))}if(1===a.length)a[0]&&x(a[0]);else{const e=[];for(const t of a)t&&e.push(...t);x(c(e))}}function x(e,t){for(const t of(0,o.kJ)(e)?e:[...e])(t!==v||t.allowRecurse)&&(t.scheduler?t.scheduler():t.run())}const I=(0,o.fY)("__proto__,__v_isRef,__isVue"),A=new Set(Object.getOwnPropertyNames(Symbol).map((e=>Symbol[e])).filter(o.yk)),R=H(),T=H(!1,!0),L=H(!0),F=z();function z(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=_e(this);for(let e=0,t=this.length;e{e[t]=function(...e){k();const n=_e(this)[t].apply(this,e);return S(),n}})),e}function H(e=!1,t=!1){return function(n,r,s){if("__v_isReactive"===r)return!e;if("__v_isReadonly"===r)return e;if("__v_raw"===r&&s===(e?t?he:fe:t?de:pe).get(n))return n;const i=(0,o.kJ)(n);if(!e&&i&&(0,o.RI)(F,r))return Reflect.get(F,r,s);const l=Reflect.get(n,r,s);return((0,o.yk)(r)?A.has(r):I(r))?l:(e||E(n,0,r),t?l:Pe(l)?i&&(0,o.S0)(r)?l:l.value:(0,o.Kn)(l)?e?ge(l):me(l):l)}}const $=N(),M=N(!0);function N(e=!1){return function(t,n,r,s){let i=t[n];if(!e&&!we(r)&&(r=_e(r),i=_e(i),!(0,o.kJ)(t)&&Pe(i)&&!Pe(r)))return i.value=r,!0;const l=(0,o.kJ)(t)&&(0,o.S0)(n)?Number(n)!0,deleteProperty:(e,t)=>!0},B=(0,o.l7)({},D,{get:T,set:M}),J=e=>e,q=e=>Reflect.getPrototypeOf(e);function V(e,t,n=!1,o=!1){const r=_e(e=e.__v_raw),s=_e(t);t!==s&&!n&&E(r,0,t),!n&&E(r,0,s);const{has:i}=q(r),l=o?J:n?Ee:Se;return i.call(r,t)?l(e.get(t)):i.call(r,s)?l(e.get(s)):void(e!==r&&e.get(t))}function W(e,t=!1){const n=this.__v_raw,o=_e(n),r=_e(e);return e!==r&&!t&&E(o,0,e),!t&&E(o,0,r),e===r?n.has(e):n.has(e)||n.has(r)}function G(e,t=!1){return e=e.__v_raw,!t&&E(_e(e),0,g),Reflect.get(e,"size",e)}function K(e){e=_e(e);const t=_e(this);return q(t).has.call(t,e)||(t.add(e),P(t,"add",e,e)),this}function Z(e,t){t=_e(t);const n=_e(this),{has:r,get:s}=q(n);let i=r.call(n,e);i||(e=_e(e),i=r.call(n,e));const l=s.call(n,e);return n.set(e,t),i?(0,o.aU)(t,l)&&P(n,"set",e,t):P(n,"add",e,t),this}function X(e){const t=_e(this),{has:n,get:o}=q(t);let r=n.call(t,e);r||(e=_e(e),r=n.call(t,e)),o&&o.call(t,e);const s=t.delete(e);return r&&P(t,"delete",e,void 0),s}function Y(){const e=_e(this),t=0!==e.size,n=e.clear();return t&&P(e,"clear",void 0,void 0),n}function Q(e,t){return function(n,o){const r=this,s=r.__v_raw,i=_e(s),l=t?J:e?Ee:Se;return!e&&E(i,0,g),s.forEach(((e,t)=>n.call(o,l(e),l(t),r)))}}function ee(e,t,n){return function(...r){const s=this.__v_raw,i=_e(s),l=(0,o._N)(i),a="entries"===e||e===Symbol.iterator&&l,c="keys"===e&&l,u=s[e](...r),p=n?J:t?Ee:Se;return!t&&E(i,0,c?y:g),{next(){const{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:a?[p(e[0]),p(e[1])]:p(e),done:t}},[Symbol.iterator](){return this}}}}function te(e){return function(...t){return"delete"!==e&&this}}function ne(){const e={get(e){return V(this,e)},get size(){return G(this)},has:W,add:K,set:Z,delete:X,clear:Y,forEach:Q(!1,!1)},t={get(e){return V(this,e,!1,!0)},get size(){return G(this)},has:W,add:K,set:Z,delete:X,clear:Y,forEach:Q(!1,!0)},n={get(e){return V(this,e,!0)},get size(){return G(this,!0)},has(e){return W.call(this,e,!0)},add:te("add"),set:te("set"),delete:te("delete"),clear:te("clear"),forEach:Q(!0,!1)},o={get(e){return V(this,e,!0,!0)},get size(){return G(this,!0)},has(e){return W.call(this,e,!0)},add:te("add"),set:te("set"),delete:te("delete"),clear:te("clear"),forEach:Q(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((r=>{e[r]=ee(r,!1,!1),n[r]=ee(r,!0,!1),t[r]=ee(r,!1,!0),o[r]=ee(r,!0,!0)})),[e,n,t,o]}const[oe,re,se,ie]=ne();function le(e,t){const n=t?e?ie:se:e?re:oe;return(t,r,s)=>"__v_isReactive"===r?!e:"__v_isReadonly"===r?e:"__v_raw"===r?t:Reflect.get((0,o.RI)(n,r)&&r in t?n:t,r,s)}const ae={get:le(!1,!1)},ce={get:le(!1,!0)},ue={get:le(!0,!1)},pe=new WeakMap,de=new WeakMap,fe=new WeakMap,he=new WeakMap;function me(e){return e&&e.__v_isReadonly?e:ye(e,!1,D,ae,pe)}function ve(e){return ye(e,!1,B,ce,de)}function ge(e){return ye(e,!0,U,ue,fe)}function ye(e,t,n,r,s){if(!(0,o.Kn)(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=s.get(e);if(i)return i;const l=(a=e).__v_skip||!Object.isExtensible(a)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((0,o.W7)(a));var a;if(0===l)return e;const c=new Proxy(e,2===l?r:n);return s.set(e,c),c}function be(e){return we(e)?be(e.__v_raw):!(!e||!e.__v_isReactive)}function we(e){return!(!e||!e.__v_isReadonly)}function Oe(e){return be(e)||we(e)}function _e(e){const t=e&&e.__v_raw;return t?_e(t):e}function ke(e){return(0,o.Nj)(e,"__v_skip",!0),e}const Se=e=>(0,o.Kn)(e)?me(e):e,Ee=e=>(0,o.Kn)(e)?ge(e):e;function Ce(e){C()&&((e=_e(e)).dep||(e.dep=c()),j(e.dep))}function je(e,t){(e=_e(e)).dep&&x(e.dep)}function Pe(e){return Boolean(e&&!0===e.__v_isRef)}function xe(e){return Ae(e,!1)}function Ie(e){return Ae(e,!0)}function Ae(e,t){return Pe(e)?e:new Re(e,t)}class Re{constructor(e,t){this._shallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:_e(e),this._value=t?e:Se(e)}get value(){return Ce(this),this._value}set value(e){e=this._shallow?e:_e(e),(0,o.aU)(e,this._rawValue)&&(this._rawValue=e,this._value=this._shallow?e:Se(e),je(this))}}function Te(e){return Pe(e)?e.value:e}const Le={get:(e,t,n)=>Te(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Pe(r)&&!Pe(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function Fe(e){return be(e)?e:new Proxy(e,Le)}function ze(e){const t=(0,o.kJ)(e)?new Array(e.length):{};for(const n in e)t[n]=$e(e,n);return t}class He{constructor(e,t){this._object=e,this._key=t,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(e){this._object[this._key]=e}}function $e(e,t){const n=e[t];return Pe(n)?n:new He(e,t)}class Me{constructor(e,t,n){this._setter=t,this.dep=void 0,this._dirty=!0,this.__v_isRef=!0,this.effect=new b(e,(()=>{this._dirty||(this._dirty=!0,je(this))})),this.__v_isReadonly=n}get value(){const e=_e(this);return Ce(e),e._dirty&&(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}function Ne(e,t){let n,r;const s=(0,o.mf)(e);return s?(n=e,r=o.dG):(n=e.get,r=e.set),new Me(n,r,s||!r)}Promise.resolve()},6252:(e,t,n)=>{"use strict";n.d(t,{nZ:()=>o.nZ,EB:()=>o.EB,iH:()=>o.iH,XI:()=>o.XI,SU:()=>o.SU,P$:()=>O,HY:()=>Fe,$d:()=>Ct,j4:()=>Ve,kq:()=>ot,iD:()=>qe,_:()=>Ye,Eo:()=>je,uE:()=>nt,Uk:()=>tt,Wm:()=>Qe,RC:()=>I,aZ:()=>P,FN:()=>gt,Q6:()=>j,h:()=>tn,f3:()=>y,dG:()=>lt,Y3:()=>Dt,Jd:()=>B,bv:()=>N,Ah:()=>J,ic:()=>U,wg:()=>De,JJ:()=>g,Ko:()=>at,WI:()=>ct,up:()=>Re,U2:()=>k,nK:()=>C,Y8:()=>b,YP:()=>Zt,w5:()=>p,wy:()=>ge});var o=n(2262),r=n(3577);function s(e,t,...n){const o=e.vnode.props||r.kT;let s=n;const i=t.startsWith("update:"),l=i&&t.slice(7);if(l&&l in o){const e=`${"modelValue"===l?"model":l}Modifiers`,{number:t,trim:i}=o[e]||r.kT;i?s=n.map((e=>e.trim())):t&&(s=n.map(r.He))}let a,c=o[a=(0,r.hR)(t)]||o[a=(0,r.hR)((0,r._A)(t))];!c&&i&&(c=o[a=(0,r.hR)((0,r.rs)(t))]),c&&Ct(c,e,6,s);const u=o[a+"Once"];if(u){if(e.emitted){if(e.emitted[a])return}else e.emitted={};e.emitted[a]=!0,Ct(u,e,6,s)}}function i(e,t,n=!1){const o=t.emitsCache,s=o.get(e);if(void 0!==s)return s;const l=e.emits;let a={},c=!1;if(!(0,r.mf)(e)){const o=e=>{const n=i(e,t,!0);n&&(c=!0,(0,r.l7)(a,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return l||c?((0,r.kJ)(l)?l.forEach((e=>a[e]=null)):(0,r.l7)(a,l),o.set(e,a),a):(o.set(e,null),null)}function l(e,t){return!(!e||!(0,r.F7)(t))&&(t=t.slice(2).replace(/Once$/,""),(0,r.RI)(e,t[0].toLowerCase()+t.slice(1))||(0,r.RI)(e,(0,r.rs)(t))||(0,r.RI)(e,t))}new Set,new Map;let a=null,c=null;function u(e){const t=a;return a=e,c=e&&e.type.__scopeId||null,t}function p(e,t=a,n){if(!t)return e;if(e._n)return e;const o=(...n)=>{o._d&&Be(-1);const r=u(t),s=e(...n);return u(r),o._d&&Be(1),s};return o._n=!0,o._c=!0,o._d=!0,o}function d(e){const{type:t,vnode:n,proxy:o,withProxy:s,props:i,propsOptions:[l],slots:a,attrs:c,emit:p,render:d,renderCache:m,data:v,setupState:g,ctx:y,inheritAttrs:b}=e;let w,O;const _=u(e);try{if(4&n.shapeFlag){const e=s||o;w=rt(d.call(e,e,m,i,g,v,y)),O=c}else{const e=t;w=rt(e.length>1?e(i,{attrs:c,slots:a,emit:p}):e(i,null)),O=t.props?c:f(c)}}catch(t){Me.length=0,jt(t,e,1),w=Qe(He)}let k=w;if(O&&!1!==b){const e=Object.keys(O),{shapeFlag:t}=k;e.length&&7&t&&(l&&e.some(r.tR)&&(O=h(O,l)),k=et(k,O))}return n.dirs&&(k.dirs=k.dirs?k.dirs.concat(n.dirs):n.dirs),n.transition&&(k.transition=n.transition),w=k,u(_),w}const f=e=>{let t;for(const n in e)("class"===n||"style"===n||(0,r.F7)(n))&&((t||(t={}))[n]=e[n]);return t},h=(e,t)=>{const n={};for(const o in e)(0,r.tR)(o)&&o.slice(9)in t||(n[o]=e[o]);return n};function m(e,t,n){const o=Object.keys(t);if(o.length!==Object.keys(e).length)return!0;for(let r=0;r1)return n&&(0,r.mf)(t)?t.call(o.proxy):t}}function b(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return N((()=>{e.isMounted=!0})),B((()=>{e.isUnmounting=!0})),e}const w=[Function,Array],O={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:w,onEnter:w,onAfterEnter:w,onEnterCancelled:w,onBeforeLeave:w,onLeave:w,onAfterLeave:w,onLeaveCancelled:w,onBeforeAppear:w,onAppear:w,onAfterAppear:w,onAppearCancelled:w},setup(e,{slots:t}){const n=gt(),r=b();let s;return()=>{const i=t.default&&j(t.default(),!0);if(!i||!i.length)return;const l=(0,o.IU)(e),{mode:a}=l,c=i[0];if(r.isLeaving)return S(c);const u=E(c);if(!u)return S(c);const p=k(u,l,r,n);C(u,p);const d=n.subTree,f=d&&E(d);let h=!1;const{getTransitionKey:m}=u.type;if(m){const e=m();void 0===s?s=e:e!==s&&(s=e,h=!0)}if(f&&f.type!==He&&(!Ge(u,f)||h)){const e=k(f,l,r,n);if(C(f,e),"out-in"===a)return r.isLeaving=!0,e.afterLeave=()=>{r.isLeaving=!1,n.update()},S(c);"in-out"===a&&u.type!==He&&(e.delayLeave=(e,t,n)=>{_(r,f)[String(f.key)]=f,e._leaveCb=()=>{t(),e._leaveCb=void 0,delete p.delayedLeave},p.delayedLeave=n})}return c}}};function _(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function k(e,t,n,o){const{appear:r,mode:s,persisted:i=!1,onBeforeEnter:l,onEnter:a,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:p,onLeave:d,onAfterLeave:f,onLeaveCancelled:h,onBeforeAppear:m,onAppear:v,onAfterAppear:g,onAppearCancelled:y}=t,b=String(e.key),w=_(n,e),O=(e,t)=>{e&&Ct(e,o,9,t)},S={mode:s,persisted:i,beforeEnter(t){let o=l;if(!n.isMounted){if(!r)return;o=m||l}t._leaveCb&&t._leaveCb(!0);const s=w[b];s&&Ge(e,s)&&s.el._leaveCb&&s.el._leaveCb(),O(o,[t])},enter(e){let t=a,o=c,s=u;if(!n.isMounted){if(!r)return;t=v||a,o=g||c,s=y||u}let i=!1;const l=e._enterCb=t=>{i||(i=!0,O(t?s:o,[e]),S.delayedLeave&&S.delayedLeave(),e._enterCb=void 0)};t?(t(e,l),t.length<=1&&l()):l()},leave(t,o){const r=String(e.key);if(t._enterCb&&t._enterCb(!0),n.isUnmounting)return o();O(p,[t]);let s=!1;const i=t._leaveCb=n=>{s||(s=!0,o(),O(n?h:f,[t]),t._leaveCb=void 0,w[r]===e&&delete w[r])};w[r]=e,d?(d(t,i),d.length<=1&&i()):i()},clone:e=>k(e,t,n,o)};return S}function S(e){if(R(e))return(e=et(e)).children=null,e}function E(e){return R(e)?e.children?e.children[0]:void 0:e}function C(e,t){6&e.shapeFlag&&e.component?C(e.component.subTree,t):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function j(e,t=!1){let n=[],o=0;for(let r=0;r1)for(let e=0;e!!e.type.__asyncLoader;function I(e){(0,r.mf)(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:i=200,timeout:l,suspensible:a=!0,onError:c}=e;let u,p=null,d=0;const f=()=>{let e;return p||(e=p=t().catch((e=>{if(e=e instanceof Error?e:new Error(String(e)),c)return new Promise(((t,n)=>{c(e,(()=>t((d++,p=null,f()))),(()=>n(e)),d+1)}));throw e})).then((t=>e!==p&&p?p:(t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),u=t,t))))};return P({name:"AsyncComponentWrapper",__asyncLoader:f,get __asyncResolved(){return u},setup(){const e=vt;if(u)return()=>A(u,e);const t=t=>{p=null,jt(t,e,13,!s)};if(a&&e.suspense||Ot)return f().then((t=>()=>A(t,e))).catch((e=>(t(e),()=>s?Qe(s,{error:e}):null)));const r=(0,o.iH)(!1),c=(0,o.iH)(),d=(0,o.iH)(!!i);return i&&setTimeout((()=>{d.value=!1}),i),null!=l&&setTimeout((()=>{if(!r.value&&!c.value){const e=new Error(`Async component timed out after ${l}ms.`);t(e),c.value=e}}),l),f().then((()=>{r.value=!0,e.parent&&R(e.parent.vnode)&&Ut(e.parent.update)})).catch((e=>{t(e),c.value=e})),()=>r.value&&u?A(u,e):c.value&&s?Qe(s,{error:c.value}):n&&!d.value?Qe(n):void 0}})}function A(e,{vnode:{ref:t,props:n,children:o}}){const r=Qe(e,n,o);return r.ref=t,r}const R=e=>e.type.__isKeepAlive;function T(e,t){F(e,"a",t)}function L(e,t){F(e,"da",t)}function F(e,t,n=vt){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(H(t,o,n),n){let e=n.parent;for(;e&&e.parent;)R(e.parent.vnode)&&z(o,t,n,e),e=e.parent}}function z(e,t,n,o){const s=H(t,e,o,!0);J((()=>{(0,r.Od)(o[t],s)}),n)}function H(e,t,n=vt,r=!1){if(n){const s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;(0,o.Jd)(),yt(n);const s=Ct(t,n,e,r);return bt(),(0,o.lk)(),s});return r?s.unshift(i):s.push(i),i}}RegExp,RegExp;const $=e=>(t,n=vt)=>(!Ot||"sp"===e)&&H(e,t,n),M=$("bm"),N=$("m"),D=$("bu"),U=$("u"),B=$("bum"),J=$("um"),q=$("sp"),V=$("rtg"),W=$("rtc");function G(e,t=vt){H("ec",e,t)}let K=!0;function Z(e,t,n){Ct((0,r.kJ)(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function X(e,t,n,o){const s=o.includes(".")?Qt(n,o):()=>n[o];if((0,r.HD)(e)){const n=t[e];(0,r.mf)(n)&&Zt(s,n)}else if((0,r.mf)(e))Zt(s,e.bind(n));else if((0,r.Kn)(e))if((0,r.kJ)(e))e.forEach((e=>X(e,t,n,o)));else{const o=(0,r.mf)(e.handler)?e.handler.bind(n):t[e.handler];(0,r.mf)(o)&&Zt(s,o,e)}}function Y(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let a;return l?a=l:r.length||n||o?(a={},r.length&&r.forEach((e=>Q(a,e,i,!0))),Q(a,t,i)):a=t,s.set(t,a),a}function Q(e,t,n,o=!1){const{mixins:r,extends:s}=t;s&&Q(e,s,n,!0),r&&r.forEach((t=>Q(e,t,n,!0)));for(const r in t)if(o&&"expose"===r);else{const o=ee[r]||n&&n[r];e[r]=o?o(e[r],t[r]):t[r]}return e}const ee={data:te,props:re,emits:re,methods:re,computed:re,beforeCreate:oe,created:oe,beforeMount:oe,mounted:oe,beforeUpdate:oe,updated:oe,beforeDestroy:oe,beforeUnmount:oe,destroyed:oe,unmounted:oe,activated:oe,deactivated:oe,errorCaptured:oe,serverPrefetch:oe,components:re,directives:re,watch:function(e,t){if(!e)return t;if(!t)return e;const n=(0,r.l7)(Object.create(null),e);for(const o in t)n[o]=oe(e[o],t[o]);return n},provide:te,inject:function(e,t){return re(ne(e),ne(t))}};function te(e,t){return t?e?function(){return(0,r.l7)((0,r.mf)(e)?e.call(this,this):e,(0,r.mf)(t)?t.call(this,this):t)}:t:e}function ne(e){if((0,r.kJ)(e)){const t={};for(let n=0;n{c=!0;const[n,o]=le(e,t,!0);(0,r.l7)(l,n),o&&a.push(...o)};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}if(!i&&!c)return o.set(e,r.Z6),r.Z6;if((0,r.kJ)(i))for(let e=0;e-1,o[1]=n<0||e-1||(0,r.RI)(o,"default"))&&a.push(t)}}}const u=[l,a];return o.set(e,u),u}function ae(e){return"$"!==e[0]}function ce(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:null===e?"null":""}function ue(e,t){return ce(e)===ce(t)}function pe(e,t){return(0,r.kJ)(t)?t.findIndex((t=>ue(t,e))):(0,r.mf)(t)&&ue(t,e)?0:-1}const de=e=>"_"===e[0]||"$stable"===e,fe=e=>(0,r.kJ)(e)?e.map(rt):[rt(e)],he=(e,t,n)=>{const o=p(((...e)=>fe(t(...e))),n);return o._c=!1,o},me=(e,t,n)=>{const o=e._ctx;for(const n in e){if(de(n))continue;const s=e[n];if((0,r.mf)(s))t[n]=he(0,s,o);else if(null!=s){const e=fe(s);t[n]=()=>e}}},ve=(e,t)=>{const n=fe(t);e.slots.default=()=>n};function ge(e,t){if(null===a)return e;const n=a.proxy,o=e.dirs||(e.dirs=[]);for(let e=0;e(i.has(e)||(e&&(0,r.mf)(e.install)?(i.add(e),e.install(a,...t)):(0,r.mf)(e)&&(i.add(e),e(a,...t))),a),mixin:e=>(s.mixins.includes(e)||s.mixins.push(e),a),component:(e,t)=>t?(s.components[e]=t,a):s.components[e],directive:(e,t)=>t?(s.directives[e]=t,a):s.directives[e],mount(r,i,c){if(!l){const u=Qe(n,o);return u.appContext=s,i&&t?t(u,r):e(u,r,c),l=!0,a._container=r,r.__vue_app__=a,St(u.component)||u.component.proxy}},unmount(){l&&(e(null,a._container),delete a._container.__vue_app__)},provide:(e,t)=>(s.provides[e]=t,a)};return a}}let _e=!1;const ke=e=>/svg/.test(e.namespaceURI)&&"foreignObject"!==e.tagName,Se=e=>8===e.nodeType;function Ee(e){const{mt:t,p:n,o:{patchProp:o,nextSibling:s,parentNode:i,remove:l,insert:a,createComment:c}}=e,u=(n,o,r,l,a,c=!1)=>{const v=Se(n)&&"["===n.data,g=()=>h(n,o,r,l,a,v),{type:y,ref:b,shapeFlag:w}=o,O=n.nodeType;o.el=n;let _=null;switch(y){case ze:3!==O?_=g():(n.data!==o.children&&(_e=!0,n.data=o.children),_=s(n));break;case He:_=8!==O||v?g():s(n);break;case $e:if(1===O){_=n;const e=!o.children.length;for(let t=0;t{a=a||!!t.dynamicChildren;const{type:c,props:u,patchFlag:p,shapeFlag:f,dirs:h}=t,m="input"===c&&h||"option"===c;if(m||-1!==p){if(h&&ye(t,null,n,"created"),u)if(m||!a||48&p)for(const t in u)(m&&t.endsWith("value")||(0,r.F7)(t)&&!(0,r.Gg)(t))&&o(e,t,null,u[t],!1,void 0,n);else u.onClick&&o(e,"onClick",null,u.onClick,!1,void 0,n);let c;if((c=u&&u.onVnodeBeforeMount)&&xe(c,n,t),h&&ye(t,null,n,"beforeMount"),((c=u&&u.onVnodeMounted)||h)&&v((()=>{c&&xe(c,n,t),h&&ye(t,null,n,"mounted")}),s),16&f&&(!u||!u.innerHTML&&!u.textContent)){let o=d(e.firstChild,t,e,n,s,i,a);for(;o;){_e=!0;const e=o;o=o.nextSibling,l(e)}}else 8&f&&e.textContent!==t.children&&(_e=!0,e.textContent=t.children)}return e.nextSibling},d=(e,t,o,r,s,i,l)=>{l=l||!!t.dynamicChildren;const a=t.children,c=a.length;for(let t=0;t{const{slotScopeIds:u}=t;u&&(r=r?r.concat(u):u);const p=i(e),f=d(s(e),t,p,n,o,r,l);return f&&Se(f)&&"]"===f.data?s(t.anchor=f):(_e=!0,a(t.anchor=c("]"),p,f),f)},h=(e,t,o,r,a,c)=>{if(_e=!0,t.el=null,c){const t=m(e);for(;;){const n=s(e);if(!n||n===t)break;l(n)}}const u=s(e),p=i(e);return l(e),n(null,t,p,u,o,r,ke(p),a),u},m=e=>{let t=0;for(;e;)if((e=s(e))&&Se(e)&&("["===e.data&&t++,"]"===e.data)){if(0===t)return s(e);t--}return e};return[(e,t)=>{if(!t.hasChildNodes())return n(null,e,t),void Vt();_e=!1,u(t.firstChild,e,null,null,null),Vt(),_e&&console.error("Hydration completed but contains mismatches.")},u]}const Ce=v;function je(e){return function(e,t){(0,r.E9)().__VUE__=!0;const{insert:n,remove:a,patchProp:c,createElement:u,createText:p,createComment:f,setText:h,setElementText:v,parentNode:g,nextSibling:y,setScopeId:b=r.dG,cloneNode:w,insertStaticContent:O}=e,_=(e,t,n,o=null,r=null,s=null,i=!1,l=null,a=!!t.dynamicChildren)=>{if(e===t)return;e&&!Ge(e,t)&&(o=X(e),V(e,r,s,!0),e=null),-2===t.patchFlag&&(a=!1,t.dynamicChildren=null);const{type:c,ref:u,shapeFlag:p}=t;switch(c){case ze:k(e,t,n,o);break;case He:S(e,t,n,o);break;case $e:null==e&&E(t,n,o,i);break;case Fe:z(e,t,n,o,r,s,i,l,a);break;default:1&p?j(e,t,n,o,r,s,i,l,a):6&p?H(e,t,n,o,r,s,i,l,a):(64&p||128&p)&&c.process(e,t,n,o,r,s,i,l,a,Q)}null!=u&&r&&Pe(u,e&&e.ref,s,t||e,!t)},k=(e,t,o,r)=>{if(null==e)n(t.el=p(t.children),o,r);else{const n=t.el=e.el;t.children!==e.children&&h(n,t.children)}},S=(e,t,o,r)=>{null==e?n(t.el=f(t.children||""),o,r):t.el=e.el},E=(e,t,n,o)=>{[e.el,e.anchor]=O(e.children,t,n,o)},C=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=y(e),a(e),e=n;a(t)},j=(e,t,n,o,r,s,i,l,a)=>{i=i||"svg"===t.type,null==e?P(t,n,o,r,s,i,l,a):T(e,t,r,s,i,l,a)},P=(e,t,o,s,i,l,a,p)=>{let d,f;const{type:h,props:m,shapeFlag:g,transition:y,patchFlag:b,dirs:O}=e;if(e.el&&void 0!==w&&-1===b)d=e.el=w(e.el);else{if(d=e.el=u(e.type,l,m&&m.is,m),8&g?v(d,e.children):16&g&&A(e.children,d,null,s,i,l&&"foreignObject"!==h,a,p),O&&ye(e,null,s,"created"),m){for(const t in m)"value"===t||(0,r.Gg)(t)||c(d,t,null,m[t],l,e.children,s,i,Z);"value"in m&&c(d,"value",null,m.value),(f=m.onVnodeBeforeMount)&&xe(f,s,e)}I(d,e,e.scopeId,a,s)}O&&ye(e,null,s,"beforeMount");const _=(!i||i&&!i.pendingBranch)&&y&&!y.persisted;_&&y.beforeEnter(d),n(d,t,o),((f=m&&m.onVnodeMounted)||_||O)&&Ce((()=>{f&&xe(f,s,e),_&&y.enter(d),O&&ye(e,null,s,"mounted")}),i)},I=(e,t,n,o,r)=>{if(n&&b(e,n),o)for(let t=0;t{for(let c=a;c{const a=t.el=e.el;let{patchFlag:u,dynamicChildren:p,dirs:d}=t;u|=16&e.patchFlag;const f=e.props||r.kT,h=t.props||r.kT;let m;(m=h.onVnodeBeforeUpdate)&&xe(m,n,t,e),d&&ye(t,e,n,"beforeUpdate");const g=s&&"foreignObject"!==t.type;if(p?L(e.dynamicChildren,p,a,n,o,g,i):l||U(e,t,a,null,n,o,g,i,!1),u>0){if(16&u)F(a,t,f,h,n,o,s);else if(2&u&&f.class!==h.class&&c(a,"class",null,h.class,s),4&u&&c(a,"style",f.style,h.style,s),8&u){const r=t.dynamicProps;for(let t=0;t{m&&xe(m,n,t,e),d&&ye(t,e,n,"updated")}),o)},L=(e,t,n,o,r,s,i)=>{for(let l=0;l{if(n!==o){for(const a in o){if((0,r.Gg)(a))continue;const u=o[a],p=n[a];u!==p&&"value"!==a&&c(e,a,p,u,l,t.children,s,i,Z)}if(n!==r.kT)for(const a in n)(0,r.Gg)(a)||a in o||c(e,a,n[a],null,l,t.children,s,i,Z);"value"in o&&c(e,"value",n.value,o.value)}},z=(e,t,o,r,s,i,l,a,c)=>{const u=t.el=e?e.el:p(""),d=t.anchor=e?e.anchor:p("");let{patchFlag:f,dynamicChildren:h,slotScopeIds:m}=t;m&&(a=a?a.concat(m):m),null==e?(n(u,o,r),n(d,o,r),A(t.children,o,d,s,i,l,a,c)):f>0&&64&f&&h&&e.dynamicChildren?(L(e.dynamicChildren,h,o,s,i,l,a),(null!=t.key||s&&t===s.subTree)&&Ie(e,t,!0)):U(e,t,o,d,s,i,l,a,c)},H=(e,t,n,o,r,s,i,l,a)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?r.ctx.activate(t,n,o,i,a):$(t,n,o,r,s,i,a):M(e,t,a)},$=(e,t,n,l,a,c,u)=>{const p=e.component=function(e,t,n){const l=e.type,a=(t?t.appContext:e.appContext)||ht,c={uid:mt++,vnode:e,type:l,parent:t,appContext:a,root:null,next:null,subTree:null,update:null,scope:new o.Bj(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(a.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:le(l,a),emitsOptions:i(l,a),emit:null,emitted:null,propsDefaults:r.kT,inheritAttrs:l.inheritAttrs,ctx:r.kT,data:r.kT,props:r.kT,attrs:r.kT,slots:r.kT,refs:r.kT,setupState:r.kT,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return c.ctx={_:c},c.root=t?t.root:c,c.emit=s.bind(null,c),e.ce&&e.ce(c),c}(e,l,a);if(R(e)&&(p.ctx.renderer=Q),function(e,t=!1){Ot=t;const{props:n,children:s}=e.vnode,i=wt(e);!function(e,t,n,s=!1){const i={},l={};(0,r.Nj)(l,Ke,1),e.propsDefaults=Object.create(null),se(e,t,i,l);for(const t in e.propsOptions[0])t in i||(i[t]=void 0);n?e.props=s?i:(0,o.Um)(i):e.type.props?e.props=i:e.props=l,e.attrs=l}(e,n,i,t),((e,t)=>{if(32&e.vnode.shapeFlag){const n=t._;n?(e.slots=(0,o.IU)(t),(0,r.Nj)(t,"_",n)):me(t,e.slots={})}else e.slots={},t&&ve(e,t);(0,r.Nj)(e.slots,Ke,1)})(e,s);const l=i?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=(0,o.Xl)(new Proxy(e.ctx,ft));const{setup:s}=n;if(s){const n=e.setupContext=s.length>1?function(e){const t=t=>{e.exposed=t||{}};let n;return{get attrs(){return n||(n=function(e){return new Proxy(e.attrs,{get:(t,n)=>((0,o.j)(e,"get","$attrs"),t[n])})}(e))},slots:e.slots,emit:e.emit,expose:t}}(e):null;yt(e),(0,o.Jd)();const i=Et(s,e,0,[e.props,n]);if((0,o.lk)(),bt(),(0,r.tI)(i)){if(i.then(bt,bt),t)return i.then((n=>{_t(e,n,t)})).catch((t=>{jt(t,e,0)}));e.asyncDep=i}else _t(e,i,t)}else kt(e,t)}(e,t):void 0;Ot=!1}(p),p.asyncDep){if(a&&a.registerDep(p,N),!e.el){const e=p.subTree=Qe(He);S(null,e,t,n)}}else N(p,e,t,n,a,c,u)},M=(e,t,n)=>{const o=t.component=e.component;if(function(e,t,n){const{props:o,children:r,component:s}=e,{props:i,children:a,patchFlag:c}=t,u=s.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!r&&!a||a&&a.$stable)||o!==i&&(o?!i||m(o,i,u):!!i);if(1024&c)return!0;if(16&c)return o?m(o,i,u):!!i;if(8&c){const e=t.dynamicProps;for(let t=0;tAt&&It.splice(t,1)}(o.update),o.update()}else t.component=e.component,t.el=e.el,o.vnode=t},N=(e,t,n,s,i,l,a)=>{const c=new o.qq((()=>{if(e.isMounted){let t,{next:n,bu:o,u:s,parent:u,vnode:p}=e,f=n;c.allowRecurse=!1,n?(n.el=p.el,D(e,n,a)):n=p,o&&(0,r.ir)(o),(t=n.props&&n.props.onVnodeBeforeUpdate)&&xe(t,u,n,p),c.allowRecurse=!0;const h=d(e),m=e.subTree;e.subTree=h,_(m,h,g(m.el),X(m),e,i,l),n.el=h.el,null===f&&function({vnode:e,parent:t},n){for(;t&&t.subTree===e;)(e=t.vnode).el=n,t=t.parent}(e,h.el),s&&Ce(s,i),(t=n.props&&n.props.onVnodeUpdated)&&Ce((()=>xe(t,u,n,p)),i)}else{let o;const{el:a,props:u}=t,{bm:p,m:f,parent:h}=e,m=x(t);if(c.allowRecurse=!1,p&&(0,r.ir)(p),!m&&(o=u&&u.onVnodeBeforeMount)&&xe(o,h,t),c.allowRecurse=!0,a&&te){const n=()=>{e.subTree=d(e),te(a,e.subTree,e,i,null)};m?t.type.__asyncLoader().then((()=>!e.isUnmounted&&n())):n()}else{const o=e.subTree=d(e);_(null,o,n,s,e,i,l),t.el=o.el}if(f&&Ce(f,i),!m&&(o=u&&u.onVnodeMounted)){const e=t;Ce((()=>xe(o,h,e)),i)}256&t.shapeFlag&&e.a&&Ce(e.a,i),e.isMounted=!0,t=n=s=null}}),(()=>Ut(e.update)),e.scope),u=e.update=c.run.bind(c);u.id=e.uid,c.allowRecurse=u.allowRecurse=!0,u()},D=(e,t,n)=>{t.component=e;const s=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,s){const{props:i,attrs:l,vnode:{patchFlag:a}}=e,c=(0,o.IU)(i),[u]=e.propsOptions;let p=!1;if(!(s||a>0)||16&a){let o;se(e,t,i,l)&&(p=!0);for(const s in c)t&&((0,r.RI)(t,s)||(o=(0,r.rs)(s))!==s&&(0,r.RI)(t,o))||(u?!n||void 0===n[s]&&void 0===n[o]||(i[s]=ie(u,c,s,void 0,e,!0)):delete i[s]);if(l!==c)for(const e in l)t&&(0,r.RI)(t,e)||(delete l[e],p=!0)}else if(8&a){const n=e.vnode.dynamicProps;for(let o=0;o{const{vnode:o,slots:s}=e;let i=!0,l=r.kT;if(32&o.shapeFlag){const e=t._;e?n&&1===e?i=!1:((0,r.l7)(s,t),n||1!==e||delete s._):(i=!t.$stable,me(t,s)),l=t}else t&&(ve(e,t),l={default:1});if(i)for(const e in s)de(e)||e in l||delete s[e]})(e,t.children,n),(0,o.Jd)(),qt(void 0,e.update),(0,o.lk)()},U=(e,t,n,o,r,s,i,l,a=!1)=>{const c=e&&e.children,u=e?e.shapeFlag:0,p=t.children,{patchFlag:d,shapeFlag:f}=t;if(d>0){if(128&d)return void J(c,p,n,o,r,s,i,l,a);if(256&d)return void B(c,p,n,o,r,s,i,l,a)}8&f?(16&u&&Z(c,r,s),p!==c&&v(n,p)):16&u?16&f?J(c,p,n,o,r,s,i,l,a):Z(c,r,s,!0):(8&u&&v(n,""),16&f&&A(p,n,o,r,s,i,l,a))},B=(e,t,n,o,s,i,l,a,c)=>{e=e||r.Z6,t=t||r.Z6;const u=e.length,p=t.length,d=Math.min(u,p);let f;for(f=0;fp?Z(e,s,i,!0,!1,d):A(t,n,o,s,i,l,a,c,d)},J=(e,t,n,o,s,i,l,a,c)=>{let u=0;const p=t.length;let d=e.length-1,f=p-1;for(;u<=d&&u<=f;){const o=e[u],r=t[u]=c?st(t[u]):rt(t[u]);if(!Ge(o,r))break;_(o,r,n,null,s,i,l,a,c),u++}for(;u<=d&&u<=f;){const o=e[d],r=t[f]=c?st(t[f]):rt(t[f]);if(!Ge(o,r))break;_(o,r,n,null,s,i,l,a,c),d--,f--}if(u>d){if(u<=f){const e=f+1,r=ef)for(;u<=d;)V(e[u],s,i,!0),u++;else{const h=u,m=u,v=new Map;for(u=m;u<=f;u++){const e=t[u]=c?st(t[u]):rt(t[u]);null!=e.key&&v.set(e.key,u)}let g,y=0;const b=f-m+1;let w=!1,O=0;const k=new Array(b);for(u=0;u=b){V(o,s,i,!0);continue}let r;if(null!=o.key)r=v.get(o.key);else for(g=m;g<=f;g++)if(0===k[g-m]&&Ge(o,t[g])){r=g;break}void 0===r?V(o,s,i,!0):(k[r-m]=u+1,r>=O?O=r:w=!0,_(o,t[r],n,null,s,i,l,a,c),y++)}const S=w?function(e){const t=e.slice(),n=[0];let o,r,s,i,l;const a=e.length;for(o=0;o>1,e[n[l]]0&&(t[o]=n[s-1]),n[s]=o)}}for(s=n.length,i=n[s-1];s-- >0;)n[s]=i,i=t[i];return n}(k):r.Z6;for(g=S.length-1,u=b-1;u>=0;u--){const e=m+u,r=t[e],d=e+1{const{el:i,type:l,transition:a,children:c,shapeFlag:u}=e;if(6&u)q(e.component.subTree,t,o,r);else if(128&u)e.suspense.move(t,o,r);else if(64&u)l.move(e,t,o,Q);else if(l!==Fe)if(l!==$e)if(2!==r&&1&u&&a)if(0===r)a.beforeEnter(i),n(i,t,o),Ce((()=>a.enter(i)),s);else{const{leave:e,delayLeave:r,afterLeave:s}=a,l=()=>n(i,t,o),c=()=>{e(i,(()=>{l(),s&&s()}))};r?r(i,l,c):c()}else n(i,t,o);else(({el:e,anchor:t},o,r)=>{let s;for(;e&&e!==t;)s=y(e),n(e,o,r),e=s;n(t,o,r)})(e,t,o);else{n(i,t,o);for(let e=0;e{const{type:s,props:i,ref:l,children:a,dynamicChildren:c,shapeFlag:u,patchFlag:p,dirs:d}=e;if(null!=l&&Pe(l,null,n,e,!0),256&u)return void t.ctx.deactivate(e);const f=1&u&&d,h=!x(e);let m;if(h&&(m=i&&i.onVnodeBeforeUnmount)&&xe(m,t,e),6&u)K(e.component,n,o);else{if(128&u)return void e.suspense.unmount(n,o);f&&ye(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,r,Q,o):c&&(s!==Fe||p>0&&64&p)?Z(c,t,n,!1,!0):(s===Fe&&384&p||!r&&16&u)&&Z(a,t,n),o&&W(e)}(h&&(m=i&&i.onVnodeUnmounted)||f)&&Ce((()=>{m&&xe(m,t,e),f&&ye(e,null,t,"unmounted")}),n)},W=e=>{const{type:t,el:n,anchor:o,transition:r}=e;if(t===Fe)return void G(n,o);if(t===$e)return void C(e);const s=()=>{a(n),r&&!r.persisted&&r.afterLeave&&r.afterLeave()};if(1&e.shapeFlag&&r&&!r.persisted){const{leave:t,delayLeave:o}=r,i=()=>t(n,s);o?o(e.el,s,i):i()}else s()},G=(e,t)=>{let n;for(;e!==t;)n=y(e),a(e),e=n;a(t)},K=(e,t,n)=>{const{bum:o,scope:s,update:i,subTree:l,um:a}=e;o&&(0,r.ir)(o),s.stop(),i&&(i.active=!1,V(l,e,t,n)),a&&Ce(a,t),Ce((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},Z=(e,t,n,o=!1,r=!1,s=0)=>{for(let i=s;i6&e.shapeFlag?X(e.component.subTree):128&e.shapeFlag?e.suspense.next():y(e.anchor||e.el),Y=(e,t,n)=>{null==e?t._vnode&&V(t._vnode,null,null,!0):_(t._vnode||null,e,t,null,null,null,n),Vt(),t._vnode=e},Q={p:_,um:V,m:q,r:W,mt:$,mc:A,pc:U,pbc:L,n:X,o:e};let ee,te;return t&&([ee,te]=t(Q)),{render:Y,hydrate:ee,createApp:Oe(Y,ee)}}(e,Ee)}function Pe(e,t,n,s,i=!1){if((0,r.kJ)(e))return void e.forEach(((e,o)=>Pe(e,t&&((0,r.kJ)(t)?t[o]:t),n,s,i)));if(x(s)&&!i)return;const l=4&s.shapeFlag?St(s.component)||s.component.proxy:s.el,a=i?null:l,{i:c,r:u}=e,p=t&&t.r,d=c.refs===r.kT?c.refs={}:c.refs,f=c.setupState;if(null!=p&&p!==u&&((0,r.HD)(p)?(d[p]=null,(0,r.RI)(f,p)&&(f[p]=null)):(0,o.dq)(p)&&(p.value=null)),(0,r.HD)(u)){const e=()=>{d[u]=a,(0,r.RI)(f,u)&&(f[u]=a)};a?(e.id=-1,Ce(e,n)):e()}else if((0,o.dq)(u)){const e=()=>{u.value=a};a?(e.id=-1,Ce(e,n)):e()}else(0,r.mf)(u)&&Et(u,c,12,[a,d])}function xe(e,t,n,o=null){Ct(e,t,7,[n,o])}function Ie(e,t,n=!1){const o=e.children,s=t.children;if((0,r.kJ)(o)&&(0,r.kJ)(s))for(let e=0;e0?Ne||r.Z6:null,Me.pop(),Ne=Me[Me.length-1]||null,Ue>0&&Ne&&Ne.push(e),e}function qe(e,t,n,o,r,s){return Je(Ye(e,t,n,o,r,s,!0))}function Ve(e,t,n,o,r){return Je(Qe(e,t,n,o,r,!0))}function We(e){return!!e&&!0===e.__v_isVNode}function Ge(e,t){return e.type===t.type&&e.key===t.key}const Ke="__vInternal",Ze=({key:e})=>null!=e?e:null,Xe=({ref:e})=>null!=e?(0,r.HD)(e)||(0,o.dq)(e)||(0,r.mf)(e)?{i:a,r:e}:e:null;function Ye(e,t=null,n=null,o=0,s=null,i=(e===Fe?0:1),l=!1,a=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ze(t),ref:t&&Xe(t),scopeId:c,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:o,dynamicProps:s,dynamicChildren:null,appContext:null};return a?(it(u,n),128&i&&e.normalize(u)):n&&(u.shapeFlag|=(0,r.HD)(n)?8:16),Ue>0&&!l&&Ne&&(u.patchFlag>0||6&i)&&32!==u.patchFlag&&Ne.push(u),u}const Qe=function(e,t=null,n=null,s=0,i=null,l=!1){if(e&&e!==Te||(e=He),We(e)){const o=et(e,t,!0);return n&&it(o,n),o}if(a=e,(0,r.mf)(a)&&"__vccOpts"in a&&(e=e.__vccOpts),t){t=function(e){return e?(0,o.X3)(e)||Ke in e?(0,r.l7)({},e):e:null}(t);let{class:e,style:n}=t;e&&!(0,r.HD)(e)&&(t.class=(0,r.C_)(e)),(0,r.Kn)(n)&&((0,o.X3)(n)&&!(0,r.kJ)(n)&&(n=(0,r.l7)({},n)),t.style=(0,r.j5)(n))}var a;return Ye(e,t,n,s,i,(0,r.HD)(e)?1:(e=>e.__isSuspense)(e)?128:(e=>e.__isTeleport)(e)?64:(0,r.Kn)(e)?4:(0,r.mf)(e)?2:0,l,!0)};function et(e,t,n=!1){const{props:o,ref:s,patchFlag:i,children:l}=e,a=t?lt(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&Ze(a),ref:t&&t.ref?n&&s?(0,r.kJ)(s)?s.concat(Xe(t)):[s,Xe(t)]:Xe(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Fe?-1===i?16:16|i:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&et(e.ssContent),ssFallback:e.ssFallback&&et(e.ssFallback),el:e.el,anchor:e.anchor}}function tt(e=" ",t=0){return Qe(ze,null,e,t)}function nt(e,t){const n=Qe($e,null,e);return n.staticCount=t,n}function ot(e="",t=!1){return t?(De(),Ve(He,null,e)):Qe(He,null,e)}function rt(e){return null==e||"boolean"==typeof e?Qe(He):(0,r.kJ)(e)?Qe(Fe,null,e.slice()):"object"==typeof e?st(e):Qe(ze,null,String(e))}function st(e){return null===e.el||e.memo?e:et(e)}function it(e,t){let n=0;const{shapeFlag:o}=e;if(null==t)t=null;else if((0,r.kJ)(t))n=16;else if("object"==typeof t){if(65&o){const n=t.default;return void(n&&(n._c&&(n._d=!1),it(e,n()),n._c&&(n._d=!0)))}{n=32;const o=t._;o||Ke in t?3===o&&a&&(1===a.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=a}}else(0,r.mf)(t)?(t={default:t,_ctx:a},n=32):(t=String(t),64&o?(n=16,t=[tt(t)]):n=8);e.children=t,e.shapeFlag|=n}function lt(...e){const t={};for(let n=0;nt(e,n,void 0,i&&i[n])));else{const n=Object.keys(e);s=new Array(n.length);for(let o=0,r=n.length;o!We(e)||e.type!==He&&!(e.type===Fe&&!ut(e.children))))?e:null}const pt=e=>e?wt(e)?St(e)||e.proxy:pt(e.parent):null,dt=(0,r.l7)(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>pt(e.parent),$root:e=>pt(e.root),$emit:e=>e.emit,$options:e=>Y(e),$forceUpdate:e=>()=>Ut(e.update),$nextTick:e=>Dt.bind(e.proxy),$watch:e=>Yt.bind(e)}),ft={get({_:e},t){const{ctx:n,setupState:s,data:i,props:l,accessCache:a,type:c,appContext:u}=e;let p;if("$"!==t[0]){const o=a[t];if(void 0!==o)switch(o){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return l[t]}else{if(s!==r.kT&&(0,r.RI)(s,t))return a[t]=1,s[t];if(i!==r.kT&&(0,r.RI)(i,t))return a[t]=2,i[t];if((p=e.propsOptions[0])&&(0,r.RI)(p,t))return a[t]=3,l[t];if(n!==r.kT&&(0,r.RI)(n,t))return a[t]=4,n[t];K&&(a[t]=0)}}const d=dt[t];let f,h;return d?("$attrs"===t&&(0,o.j)(e,"get",t),d(e)):(f=c.__cssModules)&&(f=f[t])?f:n!==r.kT&&(0,r.RI)(n,t)?(a[t]=4,n[t]):(h=u.config.globalProperties,(0,r.RI)(h,t)?h[t]:void 0)},set({_:e},t,n){const{data:o,setupState:s,ctx:i}=e;if(s!==r.kT&&(0,r.RI)(s,t))s[t]=n;else if(o!==r.kT&&(0,r.RI)(o,t))o[t]=n;else if((0,r.RI)(e.props,t))return!1;return!("$"===t[0]&&t.slice(1)in e||(i[t]=n,0))},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:s,propsOptions:i}},l){let a;return!!n[l]||e!==r.kT&&(0,r.RI)(e,l)||t!==r.kT&&(0,r.RI)(t,l)||(a=i[0])&&(0,r.RI)(a,l)||(0,r.RI)(o,l)||(0,r.RI)(dt,l)||(0,r.RI)(s.config.globalProperties,l)}},ht=be();let mt=0;let vt=null;const gt=()=>vt||a,yt=e=>{vt=e,e.scope.on()},bt=()=>{vt&&vt.scope.off(),vt=null};function wt(e){return 4&e.vnode.shapeFlag}let Ot=!1;function _t(e,t,n){(0,r.mf)(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:(0,r.Kn)(t)&&(e.setupState=(0,o.WL)(t)),kt(e,n)}function kt(e,t,n){const s=e.type;e.render||(e.render=s.render||r.dG),yt(e),(0,o.Jd)(),function(e){const t=Y(e),n=e.proxy,s=e.ctx;K=!1,t.beforeCreate&&Z(t.beforeCreate,e,"bc");const{data:i,computed:l,methods:a,watch:c,provide:u,inject:p,created:d,beforeMount:f,mounted:h,beforeUpdate:m,updated:v,activated:b,deactivated:w,beforeDestroy:O,beforeUnmount:_,destroyed:k,unmounted:S,render:E,renderTracked:C,renderTriggered:j,errorCaptured:P,serverPrefetch:x,expose:I,inheritAttrs:A,components:R,directives:F,filters:z}=t;if(p&&function(e,t,n=r.dG,s=!1){(0,r.kJ)(e)&&(e=ne(e));for(const n in e){const i=e[n];let l;l=(0,r.Kn)(i)?"default"in i?y(i.from||n,i.default,!0):y(i.from||n):y(i),(0,o.dq)(l)&&s?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>l.value,set:e=>l.value=e}):t[n]=l}}(p,s,null,e.appContext.config.unwrapInjectedRef),a)for(const e in a){const t=a[e];(0,r.mf)(t)&&(s[e]=t.bind(n))}if(i){const t=i.call(n,n);(0,r.Kn)(t)&&(e.data=(0,o.qj)(t))}if(K=!0,l)for(const e in l){const t=l[e],i=(0,r.mf)(t)?t.bind(n,n):(0,r.mf)(t.get)?t.get.bind(n,n):r.dG,a=!(0,r.mf)(t)&&(0,r.mf)(t.set)?t.set.bind(n):r.dG,c=(0,o.Fl)({get:i,set:a});Object.defineProperty(s,e,{enumerable:!0,configurable:!0,get:()=>c.value,set:e=>c.value=e})}if(c)for(const e in c)X(c[e],s,n,e);if(u){const e=(0,r.mf)(u)?u.call(n):u;Reflect.ownKeys(e).forEach((t=>{g(t,e[t])}))}function H(e,t){(0,r.kJ)(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(d&&Z(d,e,"c"),H(M,f),H(N,h),H(D,m),H(U,v),H(T,b),H(L,w),H(G,P),H(W,C),H(V,j),H(B,_),H(J,S),H(q,x),(0,r.kJ)(I))if(I.length){const t=e.exposed||(e.exposed={});I.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});E&&e.render===r.dG&&(e.render=E),null!=A&&(e.inheritAttrs=A),R&&(e.components=R),F&&(e.directives=F)}(e),(0,o.lk)(),bt()}function St(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy((0,o.WL)((0,o.Xl)(e.exposed)),{get:(t,n)=>n in t?t[n]:n in dt?dt[n](e):void 0}))}function Et(e,t,n,o){let r;try{r=o?e(...o):e()}catch(e){jt(e,t,n)}return r}function Ct(e,t,n,o){if((0,r.mf)(e)){const s=Et(e,t,n,o);return s&&(0,r.tI)(s)&&s.catch((e=>{jt(e,t,n)})),s}const s=[];for(let r=0;r>>1;Wt(It[o])Wt(e)-Wt(t))),Ht=0;Htnull==e.id?1/0:e.id;function Gt(e){xt=!1,Pt=!0,qt(e),It.sort(((e,t)=>Wt(e)-Wt(t))),r.dG;try{for(At=0;Ate.value,d=!!e._shallow):(0,o.PG)(e)?(u=()=>e,s=!0):(0,r.kJ)(e)?(f=!0,d=e.some(o.PG),u=()=>e.map((e=>(0,o.dq)(e)?e.value:(0,o.PG)(e)?en(e):(0,r.mf)(e)?Et(e,c,2):void 0))):u=(0,r.mf)(e)?t?()=>Et(e,c,2):()=>{if(!c||!c.isUnmounted)return p&&p(),Ct(e,c,3,[h])}:r.dG,t&&s){const e=u;u=()=>en(e())}let h=e=>{p=y.onStop=()=>{Et(e,c,4)}};if(Ot)return h=r.dG,t?n&&Ct(t,c,3,[u(),f?[]:void 0,h]):u(),r.dG;let m=f?[]:Kt;const v=()=>{if(y.active)if(t){const e=y.run();(s||d||(f?e.some(((e,t)=>(0,r.aU)(e,m[t]))):(0,r.aU)(e,m)))&&(p&&p(),Ct(t,c,3,[e,m===Kt?void 0:m,h]),m=e)}else y.run()};let g;v.allowRecurse=!!t,g="sync"===i?v:"post"===i?()=>Ce(v,c&&c.suspense):()=>{!c||c.isMounted?function(e){Jt(e,Tt,Rt,Lt)}(v):v()};const y=new o.qq(u,g);return t?n?v():m=y.run():"post"===i?Ce(y.run.bind(y),c&&c.suspense):y.run(),()=>{y.stop(),c&&c.scope&&(0,r.Od)(c.scope.effects,y)}}function Yt(e,t,n){const o=this.proxy,s=(0,r.HD)(e)?e.includes(".")?Qt(o,e):()=>o[e]:e.bind(o,o);let i;(0,r.mf)(t)?i=t:(i=t.handler,n=t);const l=vt;yt(this);const a=Xt(s,i.bind(o),n);return l?yt(l):bt(),a}function Qt(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e{en(e,t)}));else if((0,r.PO)(e))for(const n in e)en(e[n],t);return e}function tn(e,t,n){const o=arguments.length;return 2===o?(0,r.Kn)(t)&&!(0,r.kJ)(t)?We(t)?Qe(e,null,[t]):Qe(e,t):Qe(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):3===o&&We(n)&&(n=[n]),Qe(e,t,n))}Symbol("");const nn="3.2.23"},9963:(e,t,n)=>{"use strict";n.d(t,{nZ:()=>r.nZ,EB:()=>r.EB,iH:()=>r.iH,XI:()=>r.XI,SU:()=>r.SU,YP:()=>r.YP,uT:()=>_,vr:()=>M,F8:()=>L});var o=n(3577),r=n(6252);n(2262);const s="undefined"!=typeof document?document:null,i=new Map,l={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?s.createElementNS("http://www.w3.org/2000/svg",e):s.createElement(e,n?{is:n}:void 0);return"select"===e&&o&&null!=o.multiple&&r.setAttribute("multiple",o.multiple),r},createText:e=>s.createTextNode(e),createComment:e=>s.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>s.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,o){const r=n?n.previousSibling:t.lastChild;let l=i.get(e);if(!l){const t=s.createElement("template");if(t.innerHTML=o?`${e}`:e,l=t.content,o){const e=l.firstChild;for(;e.firstChild;)l.appendChild(e.firstChild);l.removeChild(e)}i.set(e,l)}return t.insertBefore(l.cloneNode(!0),n),[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},a=/\s*!important$/;function c(e,t,n){if((0,o.kJ)(n))n.forEach((n=>c(e,t,n)));else if(t.startsWith("--"))e.setProperty(t,n);else{const r=function(e,t){const n=p[t];if(n)return n;let r=(0,o._A)(t);if("filter"!==r&&r in e)return p[t]=r;r=(0,o.kC)(r);for(let n=0;ndocument.createEvent("Event").timeStamp&&(f=()=>performance.now());const e=navigator.userAgent.match(/firefox\/(\d+)/i);h=!!(e&&Number(e[1])<=53)}let m=0;const v=Promise.resolve(),g=()=>{m=0};const y=/(?:Once|Passive|Capture)$/,b=/^on[a-z]/;"undefined"!=typeof HTMLElement&&HTMLElement;const w="transition",O="animation",_=(e,{slots:t})=>(0,r.h)(r.P$,function(e){const t={};for(const n in e)n in k||(t[n]=e[n]);if(!1===e.css)return t;const{name:n="v",type:r,duration:s,enterFromClass:i=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=l,appearToClass:p=a,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,m=function(e){if(null==e)return null;if((0,o.Kn)(e))return[C(e.enter),C(e.leave)];{const t=C(e);return[t,t]}}(s),v=m&&m[0],g=m&&m[1],{onBeforeEnter:y,onEnter:b,onEnterCancelled:w,onLeave:O,onLeaveCancelled:_,onBeforeAppear:I=y,onAppear:R=b,onAppearCancelled:T=w}=t,L=(e,t,n)=>{P(e,t?p:a),P(e,t?u:l),n&&n()},F=(e,t)=>{P(e,h),P(e,f),t&&t()},z=e=>(t,n)=>{const o=e?R:b,s=()=>L(t,e,n);S(o,[t,s]),x((()=>{P(t,e?c:i),j(t,e?p:a),E(o)||A(t,r,v,s)}))};return(0,o.l7)(t,{onBeforeEnter(e){S(y,[e]),j(e,i),j(e,l)},onBeforeAppear(e){S(I,[e]),j(e,c),j(e,u)},onEnter:z(!1),onAppear:z(!0),onLeave(e,t){const n=()=>F(e,t);j(e,d),document.body.offsetHeight,j(e,f),x((()=>{P(e,d),j(e,h),E(O)||A(e,r,g,n)})),S(O,[e,n])},onEnterCancelled(e){L(e,!1),S(w,[e])},onAppearCancelled(e){L(e,!0),S(T,[e])},onLeaveCancelled(e){F(e),S(_,[e])}})}(e),t);_.displayName="Transition";const k={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},S=(_.props=(0,o.l7)({},r.P$.props,k),(e,t=[])=>{(0,o.kJ)(e)?e.forEach((e=>e(...t))):e&&e(...t)}),E=e=>!!e&&((0,o.kJ)(e)?e.some((e=>e.length>1)):e.length>1);function C(e){return(0,o.He)(e)}function j(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e._vtc||(e._vtc=new Set)).add(t)}function P(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function x(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let I=0;function A(e,t,n,o){const r=e._endId=++I,s=()=>{r===e._endId&&o()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=function(e,t){const n=window.getComputedStyle(e),o=e=>(n[e]||"").split(", "),r=o("transitionDelay"),s=o("transitionDuration"),i=R(r,s),l=o("animationDelay"),a=o("animationDuration"),c=R(l,a);let u=null,p=0,d=0;return t===w?i>0&&(u=w,p=i,d=s.length):t===O?c>0&&(u=O,p=c,d=a.length):(p=Math.max(i,c),u=p>0?i>c?w:O:null,d=u?u===w?s.length:a.length:0),{type:u,timeout:p,propCount:d,hasTransform:u===w&&/\b(transform|all)(,|$)/.test(n.transitionProperty)}}(e,t);if(!i)return o();const c=i+"end";let u=0;const p=()=>{e.removeEventListener(c,d),s()},d=t=>{t.target===e&&++u>=a&&p()};setTimeout((()=>{uT(t)+T(e[n]))))}function T(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}new WeakMap,new WeakMap;const L={beforeMount(e,{value:t},{transition:n}){e._vod="none"===e.style.display?"":e.style.display,n&&t?n.beforeEnter(e):F(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),F(e,!0),o.enter(e)):o.leave(e,(()=>{F(e,!1)})):F(e,t))},beforeUnmount(e,{value:t}){F(e,t)}};function F(e,t){e.style.display=t?e._vod:"none"}const z=(0,o.l7)({patchProp:(e,t,n,s,i=!1,l,a,u,p)=>{"class"===t?function(e,t,n){const o=e._vtc;o&&(t=(t?[t,...o]:[...o]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}(e,s,i):"style"===t?function(e,t,n){const r=e.style,s=(0,o.HD)(n);if(n&&!s){for(const e in n)c(r,e,n[e]);if(t&&!(0,o.HD)(t))for(const e in t)null==n[e]&&c(r,e,"")}else{const o=r.display;s?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=o)}}(e,n,s):(0,o.F7)(t)?(0,o.tR)(t)||function(e,t,n,s,i=null){const l=e._vei||(e._vei={}),a=l[t];if(s&&a)a.value=s;else{const[n,c]=function(e){let t;if(y.test(e)){let n;for(t={};n=e.match(y);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[(0,o.rs)(e.slice(2)),t]}(t);if(s){const a=l[t]=function(e,t){const n=e=>{const s=e.timeStamp||f();(h||s>=n.attached-1)&&(0,r.$d)(function(e,t){if((0,o.kJ)(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=m||(v.then(g),m=f()),n}(s,i);!function(e,t,n,o){e.addEventListener(t,n,o)}(e,n,a,c)}else a&&(function(e,t,n,o){e.removeEventListener(t,n,o)}(e,n,a,c),l[t]=void 0)}}(e,t,0,s,a):("."===t[0]?(t=t.slice(1),1):"^"===t[0]?(t=t.slice(1),0):function(e,t,n,r){return r?"innerHTML"===t||"textContent"===t||!!(t in e&&b.test(t)&&(0,o.mf)(n)):"spellcheck"!==t&&"draggable"!==t&&("form"!==t&&(("list"!==t||"INPUT"!==e.tagName)&&(("type"!==t||"TEXTAREA"!==e.tagName)&&((!b.test(t)||!(0,o.HD)(n))&&t in e))))}(e,t,s,i))?function(e,t,n,r,s,i,l){if("innerHTML"===t||"textContent"===t)return r&&l(r,s,i),void(e[t]=null==n?"":n);if("value"===t&&"PROGRESS"!==e.tagName&&!e.tagName.includes("-")){e._value=n;const o=null==n?"":n;return e.value===o&&"OPTION"!==e.tagName||(e.value=o),void(null==n&&e.removeAttribute(t))}if(""===n||null==n){const r=typeof e[t];if("boolean"===r)return void(e[t]=(0,o.yA)(n));if(null==n&&"string"===r)return e[t]="",void e.removeAttribute(t);if("number"===r){try{e[t]=0}catch(e){}return void e.removeAttribute(t)}}try{e[t]=n}catch(e){}}(e,t,s,l,a,u,p):("true-value"===t?e._trueValue=s:"false-value"===t&&(e._falseValue=s),function(e,t,n,r,s){if(r&&t.startsWith("xlink:"))null==n?e.removeAttributeNS(d,t.slice(6,t.length)):e.setAttributeNS(d,t,n);else{const r=(0,o.Pq)(t);null==n||r&&!(0,o.yA)(n)?e.removeAttribute(t):e.setAttribute(t,r?"":n)}}(e,t,s,i))}},l);let H,$=!1;const M=(...e)=>{const t=(H=$?H:(0,r.Eo)(z),$=!0,H).createApp(...e),{mount:n}=t;return t.mount=e=>{const t=function(e){if((0,o.HD)(e))return document.querySelector(e);return e}(e);if(t)return n(t,!0,t instanceof SVGElement)},t}},3577:(e,t,n)=>{"use strict";function o(e,t){const n=Object.create(null),o=e.split(",");for(let e=0;e!!n[e.toLowerCase()]:e=>!!n[e]}n.d(t,{Z6:()=>g,kT:()=>v,NO:()=>b,dG:()=>y,_A:()=>J,kC:()=>W,Nj:()=>X,l7:()=>k,E9:()=>ee,aU:()=>K,RI:()=>C,rs:()=>V,yA:()=>i,ir:()=>Z,kJ:()=>j,mf:()=>A,e1:()=>r,S0:()=>N,_N:()=>P,tR:()=>_,Kn:()=>L,F7:()=>O,PO:()=>M,tI:()=>F,Gg:()=>D,DM:()=>x,Pq:()=>s,HD:()=>R,yk:()=>T,WV:()=>d,hq:()=>f,fY:()=>o,C_:()=>p,j5:()=>l,Od:()=>S,zw:()=>h,hR:()=>G,He:()=>Y,W7:()=>$});const r=o("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt"),s=o("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function i(e){return!!e||""===e}function l(e){if(j(e)){const t={};for(let n=0;n{if(e){const n=e.split(c);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function p(e){let t="";if(R(e))t=e;else if(j(e))for(let n=0;nd(e,t)))}const h=e=>null==e?"":j(e)||L(e)&&(e.toString===z||!A(e.toString))?JSON.stringify(e,m,2):String(e),m=(e,t)=>t&&t.__v_isRef?m(e,t.value):P(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n])=>(e[`${t} =>`]=n,e)),{})}:x(t)?{[`Set(${t.size})`]:[...t.values()]}:!L(t)||j(t)||M(t)?t:String(t),v={},g=[],y=()=>{},b=()=>!1,w=/^on[^a-z]/,O=e=>w.test(e),_=e=>e.startsWith("onUpdate:"),k=Object.assign,S=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},E=Object.prototype.hasOwnProperty,C=(e,t)=>E.call(e,t),j=Array.isArray,P=e=>"[object Map]"===H(e),x=e=>"[object Set]"===H(e),I=e=>e instanceof Date,A=e=>"function"==typeof e,R=e=>"string"==typeof e,T=e=>"symbol"==typeof e,L=e=>null!==e&&"object"==typeof e,F=e=>L(e)&&A(e.then)&&A(e.catch),z=Object.prototype.toString,H=e=>z.call(e),$=e=>H(e).slice(8,-1),M=e=>"[object Object]"===H(e),N=e=>R(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,D=o(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),U=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},B=/-(\w)/g,J=U((e=>e.replace(B,((e,t)=>t?t.toUpperCase():"")))),q=/\B([A-Z])/g,V=U((e=>e.replace(q,"-$1").toLowerCase())),W=U((e=>e.charAt(0).toUpperCase()+e.slice(1))),G=U((e=>e?`on${W(e)}`:"")),K=(e,t)=>!Object.is(e,t),Z=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Y=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Q;const ee=()=>Q||(Q="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{})},5698:(e,t,n)=>{"use strict";var o=n(3131),r=n(9947),s=n(4611),i=n(6056),l=n(4634),a=n(480),c=n(9963),u=n(6252),p=n(2119),d=n(4546),f=n(2262),h=n(3447),m=n(704);const v=c.vr,g=p.PO;(async()=>{const e=v({name:"VuepressApp",setup(){(0,d.BK)();for(const e of s.l)e();return()=>[(0,u.h)(p.MA),...r.p.map((e=>(0,u.h)(e)))]}}),t=(0,p.p7)({history:g((0,a.U1)(d.HM.value.base)),routes:l.g,scrollBehavior:(e,t,n)=>n||(e.hash?{el:e.hash}:{top:0})});t.beforeResolve((async(e,t)=>{var n;e.path===t.path&&t!==p.AJ||([d.Xp.value]=await Promise.all([(0,d.C4)(e.name),null===(n=i.b[e.name])||void 0===n?void 0:n.__asyncLoader()]))})),((e,t)=>{const n=(0,f.Fl)((()=>(0,d.S)(d.HM.value.locales,t.currentRoute.value.path))),o=(0,f.Fl)((()=>(0,d.kY)(d.HM.value,n.value))),r=(0,f.Fl)((()=>(0,d.hN)(d.Xp.value))),s=(0,f.Fl)((()=>(0,d.lp)(d.Xp.value,o.value))),i=(0,f.Fl)((()=>(0,d.nl)(s.value,r.value,o.value))),l=(0,f.Fl)((()=>(0,d.Vo)(d.Xp.value)));e.provide(d.C3,n),e.provide(d.AE,o),e.provide(d.PY,r),e.provide(d.et,s),e.provide(d.VV,i),e.provide(d.b5,l),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>r.value},$headTitle:{get:()=>s.value},$lang:{get:()=>l.value},$page:{get:()=>d.Xp.value},$routeLocale:{get:()=>n.value},$site:{get:()=>d.HM.value},$siteLocale:{get:()=>o.value},$withBase:{get:()=>h.pJ}})})(e,t),(e=>{e.component("ClientOnly",m.qx),e.component("Content",m.VY),e.component("OutboundLink",m.MS)})(e);for(const n of o.g)await n({app:e,router:t,siteData:d.HM});return e.use(t),{app:e,router:t}})().then((({app:e,router:t})=>{t.isReady().then((()=>{e.mount("#app")}))}))},4802:(e,t,n)=>{"use strict";n.d(t,{Y:()=>a});var o=n(4150),r=n(480),s=n(6252),i=n(2262),l=n(4546);const a=(0,s.aZ)({name:"Vuepress",setup(){const e=(0,l.Vi)(),t=(0,i.Fl)((()=>{let t;if(e.value.path){const n=e.value.frontmatter.layout;t=(0,r.HD)(n)?n:"Layout"}else t="404";return o.Z[t]||(0,s.up)(t,!1)}));return()=>(0,s.h)(t.value)}})},704:(e,t,n)=>{"use strict";n.d(t,{qx:()=>s,VY:()=>a,MS:()=>u});var o=n(6252),r=n(2262);const s=(0,o.aZ)({setup(e,t){const n=(0,r.iH)(!1);return(0,o.bv)((()=>{n.value=!0})),()=>{var e,o;return n.value?null===(o=(e=t.slots).default)||void 0===o?void 0:o.call(e):null}}});var i=n(6056),l=n(4546);const a=e=>{let t;t=e.pageKey?e.pageKey:(0,l.Vi)().value.key;const n=i.b[t];return n?(0,o.h)(n):(0,o.h)("div","404 Not Found")};a.displayName="Content",a.props={pageKey:{type:String,required:!1}};const c=(0,o.h)("svg",{class:"icon outbound",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[(0,o.h)("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),(0,o.h)("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),u=(e,{slots:t})=>{var n;return(0,o.h)("span",[c,null===(n=t.default)||void 0===n?void 0:n.call(t)])};u.displayName="OutboundLink",n(4802)},4546:(e,t,n)=>{"use strict";n.d(t,{Xp:()=>l,PY:()=>p,VV:()=>m,et:()=>g,b5:()=>b,C4:()=>c,hN:()=>f,nl:()=>v,lp:()=>y,Vo:()=>w,S:()=>k,kY:()=>x,C3:()=>O,BK:()=>R,HM:()=>E,AE:()=>j,Vi:()=>a,I2:()=>d,I:()=>_,WF:()=>C,I5:()=>P});var o=n(2262),r=n(9706);const s=(0,o.iH)(r.T),i=(0,o.OT)({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),l=(0,o.iH)(i),a=()=>l,c=async e=>{const t=s.value[e];if(!t)return i;const n=await t();return null!=n?n:i};var u=n(6252);const p=Symbol(""),d=()=>{const e=(0,u.f3)(p);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},f=e=>e.frontmatter;var h=n(480);const m=Symbol(""),v=(e,t,n)=>{const o=(0,h.HD)(t.description)?t.description:n.description,r=[...(0,h.kJ)(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:o}]];return(0,h.H7)(r)},g=Symbol(""),y=(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,b=Symbol(""),w=e=>e.lang||"en",O=Symbol(""),_=()=>{const e=(0,u.f3)(O);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},k=(e,t)=>(0,h.gb)(e,t);var S=n(5220);const E=(0,o.iH)(S.H),C=()=>E,j=Symbol(""),P=()=>{const e=(0,u.f3)(j);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},x=(e,t)=>({...e,...e.locales[t]});var I=n(2119);const A=Symbol(""),R=()=>{const e=(0,I.yj)(),t=(()=>{const e=(0,u.f3)(m);if(!e)throw new Error("usePageHead() is called without provider.");return e})(),n=(()=>{const e=(0,u.f3)(b);if(!e)throw new Error("usePageLang() is called without provider.");return e})(),r=(0,o.iH)([]),s=()=>{document.documentElement.lang=n.value,r.value.forEach((e=>{e.parentNode===document.head&&document.head.removeChild(e)})),r.value.splice(0,r.value.length),t.value.forEach((e=>{const t=L(e);null!==t&&(document.head.appendChild(t),r.value.push(t))}))};(0,u.JJ)(A,s),(0,u.bv)((()=>{t.value.forEach((e=>{const t=T(e);t&&r.value.push(t)})),s(),(0,u.YP)((()=>e.path),(()=>s()))}))},T=([e,t,n=""])=>{const o=`head > ${e}${Object.entries(t).map((([e,t])=>(0,h.HD)(t)?`[${e}="${t}"]`:!0===t?`[${e}]`:"")).join("")}`;return Array.from(document.querySelectorAll(o)).find((e=>e.innerText===n))||null},L=([e,t,n])=>{if(!(0,h.HD)(e))return null;const o=document.createElement(e);return(0,h.PO)(t)&&Object.entries(t).forEach((([e,t])=>{(0,h.HD)(t)?o.setAttribute(e,t):!0===t&&o.setAttribute(e,"")})),(0,h.HD)(n)&&o.appendChild(document.createTextNode(n)),o}},7621:(e,t,n)=>{"use strict";n.d(t,{MS:()=>o.MS,C3:()=>r.C3,Vi:()=>r.Vi,I2:()=>r.I2,I:()=>r.I,WF:()=>r.WF,I5:()=>r.I5,vW:()=>s.vW,F2:()=>s.F2,pJ:()=>s.pJ}),n(5698);var o=n(704),r=n(4546),s=n(3447)},3447:(e,t,n)=>{"use strict";n.d(t,{vW:()=>o,F2:()=>r,pJ:()=>l});const o=e=>e,r=e=>e;var s=n(480),i=n(4546);const l=e=>(0,s.ak)(e)?e:`${(0,i.WF)().value.base}${(0,s.FY)(e)}`},1263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(7621),r=n(2938),s=n(6252),i=n(2119);const l=async(e,...t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace(...t).finally((()=>e.options.scrollBehavior=n))},a=(0,o.F2)((()=>{(({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:a=5})=>{const c=(0,i.tv)(),u=(0,o.Vi)(),p=(0,r.D)((()=>(()=>{var n,o,r,s;const i=Array.from(document.querySelectorAll(e)),u=Array.from(document.querySelectorAll(t)).filter((e=>i.some((t=>t.hash===e.hash)))),p=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),d=window.innerHeight+p,f=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),h=Math.abs(f-d)=(null!==(o=null===(n=t.parentElement)||void 0===n?void 0:n.offsetTop)&&void 0!==o?o:0)-a,m=!i||p<(null!==(s=null===(r=i.parentElement)||void 0===r?void 0:r.offsetTop)&&void 0!==s?s:0)-a;if(!(d||f&&m))continue;const v=decodeURIComponent(c.currentRoute.value.hash),g=decodeURIComponent(t.hash);if(v===g)return;if(h)for(let t=e+1;t{p(),window.addEventListener("scroll",p)})),(0,s.Jd)((()=>{window.removeEventListener("scroll",p)})),(0,s.YP)((()=>u.value.path),p)})({headerLinkSelector:"a.sidebar-item",headerAnchorSelector:".header-anchor",delay:200,offset:5})}))},3051:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(2938),r=n(6252),s=n(2262),i=n(9963);const l=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,a=()=>window.scrollTo({top:0,behavior:"smooth"}),c=(0,r.aZ)({name:"BackToTop",setup(){const e=(0,s.iH)(0),t=(0,s.Fl)((()=>e.value>300));(0,r.bv)((()=>{e.value=l(),window.addEventListener("scroll",(0,o.D)((()=>{e.value=l()}),100))}));const n=(0,r.h)("div",{class:"back-to-top",onClick:a});return()=>(0,r.h)(i.uT,{name:"back-to-top"},{default:()=>t.value?n:null})}})},6971:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var o=n(7621),r=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},o=window.Promise||function(e){function t(){}e(t,t)},s=function(e){var t=e.target;t!==R?-1!==C.indexOf(t)&&_({target:t}):O()},d=function(){if(!P&&A.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(x-e)>I.scrollOffset&&setTimeout(O,150)}},f=function(e){var t=e.key||e.keyCode;"Escape"!==t&&"Esc"!==t&&27!==t||O()},h=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e;if(e.background&&(R.style.background=e.background),e.container&&e.container instanceof Object&&(t.container=r({},I.container,e.container)),e.template){var n=i(e.template)?e.template:document.querySelector(e.template);t.template=n}return I=r({},I,t),C.forEach((function(e){e.dispatchEvent(p("medium-zoom:update",{detail:{zoom:T}}))})),T},m=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e(r({},I,t))},v=function(){for(var e=arguments.length,t=Array(e),n=0;n0?t.reduce((function(e,t){return[].concat(e,a(t))}),[]):C;return o.forEach((function(e){e.classList.remove("medium-zoom-image"),e.dispatchEvent(p("medium-zoom:detach",{detail:{zoom:T}}))})),C=C.filter((function(e){return-1===o.indexOf(e)})),T},y=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return C.forEach((function(o){o.addEventListener("medium-zoom:"+e,t,n)})),j.push({type:"medium-zoom:"+e,listener:t,options:n}),T},b=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return C.forEach((function(o){o.removeEventListener("medium-zoom:"+e,t,n)})),j=j.filter((function(n){return!(n.type==="medium-zoom:"+e&&n.listener.toString()===t.toString())})),T},w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.target,n=function(){var e={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},t=void 0,n=void 0;if(I.container)if(I.container instanceof Object)t=(e=r({},e,I.container)).width-e.left-e.right-2*I.margin,n=e.height-e.top-e.bottom-2*I.margin;else{var o=(i(I.container)?I.container:document.querySelector(I.container)).getBoundingClientRect(),s=o.width,a=o.height,c=o.left,u=o.top;e=r({},e,{width:s,height:a,left:c,top:u})}t=t||e.width-2*I.margin,n=n||e.height-2*I.margin;var p=A.zoomedHd||A.original,d=l(p)?t:p.naturalWidth||t,f=l(p)?n:p.naturalHeight||n,h=p.getBoundingClientRect(),m=h.top,v=h.left,g=h.width,y=h.height,b=Math.min(d,t)/g,w=Math.min(f,n)/y,O=Math.min(b,w),_="scale("+O+") translate3d("+((t-g)/2-v+I.margin+e.left)/O+"px, "+((n-y)/2-m+I.margin+e.top)/O+"px, 0)";A.zoomed.style.transform=_,A.zoomedHd&&(A.zoomedHd.style.transform=_)};return new o((function(e){if(t&&-1===C.indexOf(t))e(T);else if(A.zoomed)e(T);else{if(t)A.original=t;else{if(!(C.length>0))return void e(T);var o=C;A.original=o[0]}if(A.original.dispatchEvent(p("medium-zoom:open",{detail:{zoom:T}})),x=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,P=!0,A.zoomed=u(A.original),document.body.appendChild(R),I.template){var r=i(I.template)?I.template:document.querySelector(I.template);A.template=document.createElement("div"),A.template.appendChild(r.content.cloneNode(!0)),document.body.appendChild(A.template)}if(document.body.appendChild(A.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),A.original.classList.add("medium-zoom-image--hidden"),A.zoomed.classList.add("medium-zoom-image--opened"),A.zoomed.addEventListener("click",O),A.zoomed.addEventListener("transitionend",(function t(){P=!1,A.zoomed.removeEventListener("transitionend",t),A.original.dispatchEvent(p("medium-zoom:opened",{detail:{zoom:T}})),e(T)})),A.original.getAttribute("data-zoom-src")){A.zoomedHd=A.zoomed.cloneNode(),A.zoomedHd.removeAttribute("srcset"),A.zoomedHd.removeAttribute("sizes"),A.zoomedHd.src=A.zoomed.getAttribute("data-zoom-src"),A.zoomedHd.onerror=function(){clearInterval(s),console.warn("Unable to reach the zoom image target "+A.zoomedHd.src),A.zoomedHd=null,n()};var s=setInterval((function(){A.zoomedHd.complete&&(clearInterval(s),A.zoomedHd.classList.add("medium-zoom-image--opened"),A.zoomedHd.addEventListener("click",O),document.body.appendChild(A.zoomedHd),n())}),10)}else if(A.original.hasAttribute("srcset")){A.zoomedHd=A.zoomed.cloneNode(),A.zoomedHd.removeAttribute("sizes"),A.zoomedHd.removeAttribute("loading");var l=A.zoomedHd.addEventListener("load",(function(){A.zoomedHd.removeEventListener("load",l),A.zoomedHd.classList.add("medium-zoom-image--opened"),A.zoomedHd.addEventListener("click",O),document.body.appendChild(A.zoomedHd),n()}))}else n()}}))},O=function(){return new o((function(e){!P&&A.original?(P=!0,document.body.classList.remove("medium-zoom--opened"),A.zoomed.style.transform="",A.zoomedHd&&(A.zoomedHd.style.transform=""),A.template&&(A.template.style.transition="opacity 150ms",A.template.style.opacity=0),A.original.dispatchEvent(p("medium-zoom:close",{detail:{zoom:T}})),A.zoomed.addEventListener("transitionend",(function t(){A.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(A.zoomed),A.zoomedHd&&document.body.removeChild(A.zoomedHd),document.body.removeChild(R),A.zoomed.classList.remove("medium-zoom-image--opened"),A.template&&document.body.removeChild(A.template),P=!1,A.zoomed.removeEventListener("transitionend",t),A.original.dispatchEvent(p("medium-zoom:closed",{detail:{zoom:T}})),A.original=null,A.zoomed=null,A.zoomedHd=null,A.template=null,e(T)}))):e(T)}))},_=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.target;return A.original?O():w({target:t})},k=function(){return I},S=function(){return C},E=function(){return A.original},C=[],j=[],P=!1,x=0,I=n,A={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(t)?I=t:(t||"string"==typeof t)&&v(t),I=r({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},I);var R=c(I.background);document.addEventListener("click",s),document.addEventListener("keyup",f),document.addEventListener("scroll",d),window.addEventListener("resize",O);var T={open:w,close:O,toggle:_,update:h,clone:m,attach:v,detach:g,on:y,off:b,getOptions:k,getImages:S,getZoomedImage:E};return T},f=Symbol("mediumZoom"),h={},m=(0,o.vW)((({app:e,router:t})=>{const n=d(h);n.refresh=(e=".theme-default-content > img, .theme-default-content :not(a) > img")=>{n.detach(),n.attach(e)},e.provide(f,n),t.afterEach((()=>{setTimeout((()=>n.refresh()),400)}))}))},6243:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var o=n(7621),r=n(4865),s=n(6252),i=n(2119);const l=(0,o.F2)((()=>{(0,s.bv)((()=>{const e=(0,i.tv)(),t=new Set;t.add(e.currentRoute.value.path),r.configure({showSpinner:!1}),e.beforeEach((e=>{t.has(e.path)||r.start()})),e.afterEach((e=>{t.add(e.path),r.done()}))}))}))},1843:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var o=n(7621),r=n(6252),s=n(2262),i=n(2119),l=n(5472);const a=(0,s.iH)(l.D),c=/[^\x00-\x7F]/,u=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),p=(e,t)=>{const n=t.join(" "),o=e.split(/\s+/g).map((e=>e.trim())).filter((e=>!!e));if(c.test(e))return o.some((e=>n.toLowerCase().indexOf(e)>-1));const r=e.endsWith(" ");return new RegExp(o.map(((e,t)=>o.length!==t+1||r?`(?=.*\\b${u(e)}\\b)`:`(?=.*\\b${u(e)})`)).join("")+".+","gi").test(n)},d=(0,r.aZ)({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:n,maxSuggestions:l}=(0,s.BK)(e),c=(0,i.tv)(),u=(0,o.I)(),d=a,f=(0,s.iH)(null),h=(0,s.iH)(!1),m=(0,s.iH)(""),v=(0,s.Fl)((()=>{var e;return null!==(e=t.value[u.value])&&void 0!==e?e:{}})),g=(({searchIndex:e,routeLocale:t,query:n,maxSuggestions:o})=>{const r=(0,s.Fl)((()=>e.value.filter((e=>e.pathLocale===t.value))));return(0,s.Fl)((()=>{const e=n.value.trim().toLowerCase();if(!e)return[];const t=[],s=(n,r)=>{p(e,[r.title])&&t.push({link:`${n.path}#${r.slug}`,title:n.title,header:r.title});for(const e of r.children){if(t.length>=o.value)return;s(n,e)}};for(const n of r.value){if(t.length>=o.value)break;if(p(e,[n.title,...n.extraFields]))t.push({link:n.path,title:n.title});else for(const e of n.headers){if(t.length>=o.value)break;s(n,e)}}return t}))})({searchIndex:d,routeLocale:u,query:m,maxSuggestions:l}),{focusIndex:y,focusNext:b,focusPrev:w}=(e=>{const t=(0,s.iH)(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}})(g);(({input:e,hotKeys:t})=>{const n=n=>{e.value&&0!==t.value.length&&n.target===document.body&&t.value.includes(n.key)&&(e.value.focus(),n.preventDefault())};(0,r.bv)((()=>{document.addEventListener("keydown",n)})),(0,r.Jd)((()=>{document.removeEventListener("keydown",n)}))})({input:f,hotKeys:n});const O=(0,s.Fl)((()=>h.value&&!!g.value.length)),_=e=>{if(!O.value)return;const t=g.value[e];t&&c.push(t.link).then((()=>{m.value="",y.value=0}))};return()=>(0,r.h)("form",{class:"search-box",role:"search"},[(0,r.h)("input",{ref:f,type:"search",placeholder:v.value.placeholder,autocomplete:"off",spellcheck:!1,value:m.value,onFocus:()=>h.value=!0,onBlur:()=>h.value=!1,onInput:e=>m.value=e.target.value,onKeydown:e=>{switch(e.key){case"ArrowUp":O.value&&w();break;case"ArrowDown":O.value&&b();break;case"Enter":e.preventDefault(),_(y.value)}}}),O.value&&(0,r.h)("ul",{class:"suggestions",onMouseleave:()=>y.value=-1},g.value.map((({link:e,title:t,header:n},o)=>(0,r.h)("li",{class:["suggestion",{focus:y.value===o}],onMouseenter:()=>y.value=o,onMousedown:()=>_(o)},(0,r.h)("a",{href:e,onClick:e=>e.preventDefault()},[(0,r.h)("span",{class:"page-title"},t),n&&(0,r.h)("span",{class:"page-header"},`> ${n}`)])))))])}}),f={"/":{placeholder:"在笔记中搜索一下..."}},h=["s","/"],m=(0,o.vW)((({app:e})=>{e.component("SearchBox",(e=>(0,r.h)(d,{locales:f,hotKeys:h,maxSuggestions:5,...e})))}))},1598:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(7621),r=n(2262),s=n(3197);const i=(0,o.vW)((({app:e})=>{const t=(0,s.BV)(),n=e._context.provides[o.C3],i=(0,r.Fl)((()=>(0,s.g$)(t.value,n.value)));e.provide(s.ZS,i),Object.defineProperties(e.config.globalProperties,{$theme:{get:()=>t.value},$themeLocale:{get:()=>i.value}})}))},3197:(e,t,n)=>{"use strict";n.d(t,{g$:()=>c,ZS:()=>l,BV:()=>s,X6:()=>a});var o=n(2232);const r=(0,n(2262).iH)(o.f),s=()=>r;var i=n(6252);const l=Symbol(""),a=()=>{const e=(0,i.f3)(l);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},c=(e,t)=>{var n;return{...e,...null===(n=e.locales)||void 0===n?void 0:n[t]}}},480:(e,t,n)=>{"use strict";n.d(t,{H7:()=>r,kJ:()=>o.kJ,mf:()=>o.mf,ak:()=>s,B2:()=>i,R5:()=>l,PO:()=>a,HD:()=>o.HD,U1:()=>c,FY:()=>u,gb:()=>p});var o=n(3577);const r=e=>{const t=new Set,n=[];return e.forEach((e=>{const o=(([e,t,n])=>"meta"===e&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:"template"===e&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]))(e);t.has(o)||(t.add(o),n.push(e))})),n},s=e=>/^(https?:)?\/\//.test(e),i=e=>/^mailto:/.test(e),l=e=>/^tel:/.test(e),a=e=>"[object Object]"===Object.prototype.toString.call(e),c=e=>e.replace(/\/$/,""),u=e=>e.replace(/^\//,""),p=(e,t)=>{const n=Object.keys(e).sort(((e,t)=>{const n=t.split("/").length-e.split("/").length;return 0!==n?n:t.length-e.length}));for(const e of n)if(t.startsWith(e))return e;return"/"}},2009:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var o=n(7621),r=n(6252),s=n(3577);const i=(0,r.aZ)({props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup:e=>(t,n)=>((0,r.wg)(),(0,r.iD)("span",{class:(0,s.C_)(["badge",e.type]),style:(0,s.j5)({verticalAlign:e.vertical})},[(0,r.WI)(t.$slots,"default",{},(()=>[(0,r.Uk)((0,s.zw)(e.text),1)]))],6))});var l=n(2262);const a=(0,r.aZ)({name:"CodeGroup",setup(e,{slots:t}){const n=(0,l.iH)(-1),o=(0,l.iH)([]);return()=>{var e;const s=((null===(e=t.default)||void 0===e?void 0:e.call(t))||[]).filter((e=>"CodeGroupItem"===e.type.name)).map((e=>(null===e.props&&(e.props={}),e)));return 0===s.length?null:(n.value<0||n.value>s.length-1?(n.value=s.findIndex((e=>""===e.props.active||!0===e.props.active)),-1===n.value&&(n.value=0)):s.forEach(((e,t)=>{e.props.active=t===n.value})),(0,r.h)("div",{class:"code-group"},[(0,r.h)("div",{class:"code-group__nav"},(0,r.h)("ul",{class:"code-group__ul"},s.map(((e,t)=>{const s=t===n.value;return(0,r.h)("li",{class:"code-group__li"},(0,r.h)("button",{ref:e=>{e&&(o.value[t]=e)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":s},ariaPressed:s,ariaExpanded:s,onClick:()=>n.value=t,onKeydown:e=>((e,t)=>{" "===e.key||"Enter"===e.key?(e.preventDefault(),n.value=t):"ArrowRight"===e.key?(e.preventDefault(),((e=n.value)=>{e{n.value=e>0?e-1:o.value.length-1,o.value[n.value].focus()})(t))})(e,t)},e.props.title))})))),s]))}}}),c=["aria-selected"],u=(0,r.aZ)({name:"CodeGroupItem"}),p=(0,r.aZ)({...u,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup:function(e){return(t,n)=>((0,r.wg)(),(0,r.iD)("div",{class:(0,s.C_)(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[(0,r.WI)(t.$slots,"default")],10,c))}});var d=n(2791);const f={class:"sr-only"},h=(0,r.aZ)({setup(e){const t=(0,d.X6)();return(e,n)=>((0,r.wg)(),(0,r.j4)((0,l.SU)(o.MS),null,{default:(0,r.w5)((()=>[(0,r._)("span",f,(0,s.zw)((0,l.SU)(t).openInNewWindow),1)])),_:1}))}}),m=(0,o.vW)((({app:e,router:t})=>{e.component("Badge",i),e.component("CodeGroup",a),e.component("CodeGroupItem",p),delete e._context.components.OutboundLink,e.component("OutboundLink",h),e.component("NavbarSearch",(()=>{const t=e.component("Docsearch")||e.component("SearchBox");return t?(0,r.h)(t):null}));const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...e)=>(await(0,d.P$)().wait(),n(...e))}))},8866:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var o=n(7621),r=n(2791);const s=(0,o.F2)((()=>{(0,r.OX)(),(0,r.fR)()}))},2791:(e,t,n)=>{"use strict";n.d(t,{OX:()=>O,fR:()=>L,vs:()=>w,sC:()=>C,P$:()=>I,VU:()=>T,X6:()=>D});var o=n(9963);function r(e){return!!(0,o.nZ)()&&((0,o.EB)(e),!0)}const s="undefined"!=typeof window,i=(Object.prototype.toString,()=>{});const l=e=>e();var a=Object.getOwnPropertySymbols,c=Object.prototype.hasOwnProperty,u=Object.prototype.propertyIsEnumerable;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;const p=s?window:void 0;s&&window.document,s&&window.navigator,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;const d={boolean:{read:e=>"true"===e,write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))}};function f(e,t,n=(e=>null==(e=p)?void 0:e.localStorage)(),s={}){var f;const{flush:h="pre",deep:m=!0,listenToStorageChanges:v=!0,writeDefaults:g=!0,shallow:y,window:b=p,eventFilter:w,onError:O=(e=>{console.error(e)})}=s,_=(0,o.SU)(t),k=null==_?"any":_ instanceof Set?"set":_ instanceof Map?"map":"boolean"==typeof _?"boolean":"string"==typeof _?"string":"object"==typeof _||Array.isArray(_)?"object":Number.isNaN(_)?"any":"number",S=(y?o.XI:o.iH)(t),E=null!=(f=s.serializer)?f:d[k];function C(t){if(n&&(!t||t.key===e))try{const o=t?t.newValue:n.getItem(e);null==o?(S.value=_,g&&null!==_&&n.setItem(e,E.write(_))):S.value=E.read(o)}catch(e){O(e)}}return C(),b&&v&&function(...e){let t,n,s,l;if("string"==typeof e[0]?([n,s,l]=e,t=p):[t,n,s,l]=e,!t)return i;let a=i;const c=(0,o.YP)((()=>(0,o.SU)(t)),(e=>{a(),e&&(e.addEventListener(n,s,l),a=()=>{e.removeEventListener(n,s,l),a=i})}),{immediate:!0,flush:"post"}),u=()=>{c(),a()};r(u)}(b,"storage",(e=>setTimeout((()=>C(e)),0))),n&&function(e,t,n={}){const r=n,{eventFilter:s=l}=r,i=((e,t)=>{var n={};for(var o in e)c.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&a)for(var o of a(e))t.indexOf(o)<0&&u.call(e,o)&&(n[o]=e[o]);return n})(r,["eventFilter"]);return(0,o.YP)(e,(p=s,d=t,function(...e){p((()=>d.apply(this,e)),{fn:d,thisArg:this,args:e})}),i);var p,d}(S,(()=>{try{null==S.value?n.removeItem(e):n.setItem(e,E.write(S.value))}catch(e){O(e)}}),{flush:h,deep:m,eventFilter:w}),S}function h(e){return function(e,t={}){const{window:n=p}=t;if(!n)return(0,o.iH)(!1);const s=n.matchMedia(e),i=(0,o.iH)(s.matches),l=e=>{i.value=e.matches};return"addEventListener"in s?s.addEventListener("change",l):s.addListener(l),r((()=>{"removeEventListener"in s?s.removeEventListener("change",l):s.removeListener(l)})),i}("(prefers-color-scheme: dark)",e)}var m,v;Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,new Map,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,(v=m||(m={})).UP="UP",v.RIGHT="RIGHT",v.DOWN="DOWN",v.LEFT="LEFT",v.NONE="NONE",Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.defineProperties,Object.getOwnPropertyDescriptors,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable,Object.defineProperty,Object.getOwnPropertySymbols,Object.prototype.hasOwnProperty,Object.prototype.propertyIsEnumerable;var g=n(6252),y=n(2262);const b=Symbol(""),w=()=>{const e=(0,g.f3)(b);if(!e)throw new Error("useDarkMode() is called without provider.");return e},O=()=>{const e=D(),t=h(),n=f("vuepress-color-scheme","auto"),o=(0,y.Fl)({get:()=>!!e.value.darkMode&&("auto"===n.value?t.value:"dark"===n.value),set(e){e===t.value?n.value="auto":n.value=e?"dark":"light"}});(0,g.JJ)(b,o),_(o)},_=e=>{const t=(t=e.value)=>{const n=null===window||void 0===window?void 0:window.document.querySelector("html");null==n||n.classList.toggle("dark",t)};(0,g.bv)((()=>{(0,g.YP)(e,t,{immediate:!0})})),(0,g.Ah)((()=>t()))};var k=n(480),S=n(2119);const E=(...e)=>{const t=(0,S.tv)().resolve(...e),n=t.matched[t.matched.length-1];if(!(null==n?void 0:n.redirect))return t;const{redirect:o}=n,r=(0,k.mf)(o)?o(t):o,s=(0,k.HD)(r)?{path:r}:r;return E({hash:t.hash,query:t.query,params:t.params,...s})},C=e=>{const t=E(e);return{text:t.meta.title||e,link:"404"===t.name?e:t.fullPath}};let j=null,P=null;const x={wait:()=>j,pending:()=>{j=new Promise((e=>P=e))},resolve:()=>{null==P||P(),j=null,P=null}},I=()=>x;var A=n(7621);const R=Symbol("sidebarItems"),T=()=>{const e=(0,g.f3)(R);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},L=()=>{const e=D(),t=(0,A.I2)(),n=(0,y.Fl)((()=>F(t.value,e.value)));(0,g.JJ)(R,n)},F=(e,t)=>{var n,o,r,s;const i=null!==(o=null!==(n=e.sidebar)&&void 0!==n?n:t.sidebar)&&void 0!==o?o:"auto",l=null!==(s=null!==(r=e.sidebarDepth)&&void 0!==r?r:t.sidebarDepth)&&void 0!==s?s:2;return e.home||!1===i?[]:"auto"===i?H(l):(0,k.kJ)(i)?$(i,l):(0,k.PO)(i)?M(i,l):[]},z=(e,t)=>t>0?e.map((e=>((e,t)=>({text:e.title,link:`#${e.slug}`,children:z(e.children,t)}))(e,t-1))):[],H=e=>{const t=(0,A.Vi)();return[{text:t.value.title,children:z(t.value.headers,e)}]},$=(e,t)=>{const n=(0,S.yj)(),o=(0,A.Vi)(),r=e=>{var s;let i;if(i=(0,k.HD)(e)?C(e):e,i.children)return{...i,children:i.children.map((e=>r(e)))};if(i.link===n.path){const e=1===(null===(s=o.value.headers[0])||void 0===s?void 0:s.level)?o.value.headers[0].children:o.value.headers;return{...i,children:z(e,t)}}return i};return e.map((e=>r(e)))},M=(e,t)=>{var n;const o=(0,S.yj)(),r=null!==(n=e[(0,k.gb)(e,o.path)])&&void 0!==n?n:[];return $(r,t)};var N=n(3197);const D=()=>(0,N.X6)()},4865:function(e,t,n){var o,r;o=function(){var e,t,n={version:"0.2.0"},o=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function r(e,t,n){return en?n:e}function s(e){return 100*(-1+e)}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(o[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=r(e,o.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(o.barSelector),u=o.speed,p=o.easing;return a.offsetWidth,i((function(t){""===o.positionUsing&&(o.positionUsing=n.getPositioningCSS()),l(c,function(e,t,n){var r;return(r="translate3d"===o.positionUsing?{transform:"translate3d("+s(e)+"%,0,0)"}:"translate"===o.positionUsing?{transform:"translate("+s(e)+"%,0)"}:{"margin-left":s(e)+"%"}).transition="all "+t+"ms "+n,r}(e,u,p)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),o.trickleSpeed)};return o.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*r(Math.random()*t,.1,.95)),t=r(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*o.trickleRate)},e=0,t=0,n.promise=function(o){return o&&"resolved"!==o.state()?(0===t&&n.start(),e++,t++,o.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=o.template;var r,i=t.querySelector(o.barSelector),a=e?"-100":s(n.status||0),u=document.querySelector(o.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+a+"%,0,0)"}),o.showSpinner||(r=t.querySelector(o.spinnerSelector))&&d(r),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(o.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&d(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var i=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()})),t[n]||(t[n]=function(t){var n=document.body.style;if(t in n)return t;for(var o,r=e.length,s=t.charAt(0).toUpperCase()+t.slice(1);r--;)if((o=e[r]+s)in n)return o;return t}(n))}function o(e,t,o){t=n(t),e.style[t]=o}return function(e,t){var n,r,s=arguments;if(2==s.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,s[1],s[2])}}();function a(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),o=n+t;a(n,t)||(e.className=o.substring(1))}function u(e,t){var n,o=p(e);a(e,t)&&(n=o.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function d(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(r=o.call(t,n,t,e))||(e.exports=r)},2938:(e,t,n)=>{"use strict";function o(e,t,n){var o,r,s;void 0===t&&(t=50),void 0===n&&(n={});var i=null!=(o=n.isImmediate)&&o,l=null!=(r=n.callback)&&r,a=n.maxWait,c=Date.now(),u=[];function p(){if(void 0!==a){var e=Date.now()-c;if(e+t>=a)return a-e}return t}var d=function(){var t=[].slice.call(arguments),n=this;return new Promise((function(o,r){var a=i&&void 0===s;if(void 0!==s&&clearTimeout(s),s=setTimeout((function(){if(s=void 0,c=Date.now(),!i){var o=e.apply(n,t);l&&l(o),u.forEach((function(e){return(0,e.resolve)(o)})),u=[]}}),p()),a){var d=e.apply(n,t);return l&&l(d),o(d)}u.push({resolve:o,reject:r})}))};return d.cancel=function(e){void 0!==s&&clearTimeout(s),u.forEach((function(t){return(0,t.reject)(e)})),u=[]},d}n.d(t,{D:()=>o})},2119:(e,t,n)=>{"use strict";n.d(t,{MA:()=>je,AJ:()=>F,p7:()=>Pe,PO:()=>T,yj:()=>Ae,tv:()=>Ie});var o=n(6252),r=n(2262);const s="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,i=e=>s?Symbol(e):"_vr_"+e,l=i("rvlm"),a=i("rvd"),c=i("r"),u=i("rl"),p=i("rvl"),d="undefined"!=typeof window,f=Object.assign;function h(e,t){const n={};for(const o in t){const r=t[o];n[o]=Array.isArray(r)?r.map(e):e(r)}return n}const m=()=>{},v=/\/$/;function g(e,t,n="/"){let o,r={},s="",i="";const l=t.indexOf("?"),a=t.indexOf("#",l>-1?l:0);return l>-1&&(o=t.slice(0,l),s=t.slice(l+1,a>-1?a:t.length),r=e(s)),a>-1&&(o=o||t.slice(0,a),i=t.slice(a,t.length)),o=function(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/");let r,s,i=n.length-1;for(r=0;re===t[n])):1===e.length&&e[0]===t}var k,S;!function(e){e.pop="pop",e.push="push"}(k||(k={})),function(e){e.back="back",e.forward="forward",e.unknown=""}(S||(S={}));const E=/^[^#]+#/;function C(e,t){return e.replace(E,"#")+t}const j=()=>({left:window.pageXOffset,top:window.pageYOffset});function P(e,t){return(history.state?history.state.position-t:-1)+e}const x=new Map;let I=()=>location.protocol+"//"+location.host;function A(e,t){const{pathname:n,search:o,hash:r}=t,s=e.indexOf("#");if(s>-1){let t=r.includes(e.slice(s))?e.slice(s).length:1,n=r.slice(t);return"/"!==n[0]&&(n="/"+n),y(n,"")}return y(n,e)+o+r}function R(e,t,n,o=!1,r=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:r?j():null}}function T(e){const t=function(e){const{history:t,location:n}=window,o={value:A(e,n)},r={value:t.state};function s(o,s,i){const l=e.indexOf("#"),a=l>-1?(n.host&&document.querySelector("base")?e:e.slice(l))+o:I()+e+o;try{t[i?"replaceState":"pushState"](s,"",a),r.value=s}catch(e){console.error(e),n[i?"replace":"assign"](a)}}return r.value||s(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0),{location:o,state:r,push:function(e,n){const i=f({},r.value,t.state,{forward:e,scroll:j()});s(i.current,i,!0),s(e,f({},R(o.value,e,null),{position:i.position+1},n),!1),o.value=e},replace:function(e,n){s(e,f({},t.state,R(r.value.back,e,r.value.forward,!0),n,{position:r.value.position}),!0),o.value=e}}}(e=function(e){if(!e)if(d){const t=document.querySelector("base");e=(e=t&&t.getAttribute("href")||"/").replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return"/"!==e[0]&&"#"!==e[0]&&(e="/"+e),e.replace(v,"")}(e)),n=function(e,t,n,o){let r=[],s=[],i=null;const l=({state:s})=>{const l=A(e,location),a=n.value,c=t.value;let u=0;if(s){if(n.value=l,t.value=s,i&&i===a)return void(i=null);u=c?s.position-c.position:0}else o(l);r.forEach((e=>{e(n.value,a,{delta:u,type:k.pop,direction:u?u>0?S.forward:S.back:S.unknown})}))};function a(){const{history:e}=window;e.state&&e.replaceState(f({},e.state,{scroll:j()}),"")}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",a),{pauseListeners:function(){i=n.value},listen:function(e){r.push(e);const t=()=>{const t=r.indexOf(e);t>-1&&r.splice(t,1)};return s.push(t),t},destroy:function(){for(const e of s)e();s=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",a)}}}(e,t.state,t.location,t.replace),o=f({location:"",base:e,go:function(e,t=!0){t||n.pauseListeners(),history.go(e)},createHref:C.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function L(e){return"string"==typeof e||"symbol"==typeof e}const F={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},z=i("nf");var H;function $(e,t){return f(new Error,{type:e,[z]:!0},t)}function M(e,t){return e instanceof Error&&z in e&&(null==t||!!(e.type&t))}!function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"}(H||(H={}));const N="[^/]+?",D={sensitive:!1,strict:!1,start:!0,end:!0},U=/[.+*?^${}()[\]/\\]/g;function B(e,t){let n=0;for(;nt.length?1===t.length&&80===t[0]?1:-1:0}function J(e,t){let n=0;const o=e.score,r=t.score;for(;n1&&("*"===l||"+"===l)&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:c,regexp:u,repeatable:"*"===l||"+"===l,optional:"*"===l||"?"===l})):t("Invalid state to consume buffer"),c="")}function d(){c+=l}for(;af(e,t.meta)),{})}function X(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}const Y=/#/g,Q=/&/g,ee=/\//g,te=/=/g,ne=/\?/g,oe=/\+/g,re=/%5B/g,se=/%5D/g,ie=/%5E/g,le=/%60/g,ae=/%7B/g,ce=/%7C/g,ue=/%7D/g,pe=/%20/g;function de(e){return encodeURI(""+e).replace(ce,"|").replace(re,"[").replace(se,"]")}function fe(e){return de(e).replace(oe,"%2B").replace(pe,"+").replace(Y,"%23").replace(Q,"%26").replace(le,"`").replace(ae,"{").replace(ue,"}").replace(ie,"^")}function he(e){return null==e?"":function(e){return de(e).replace(Y,"%23").replace(ne,"%3F")}(e).replace(ee,"%2F")}function me(e){try{return decodeURIComponent(""+e)}catch(e){}return""+e}function ve(e){const t={};if(""===e||"?"===e)return t;const n=("?"===e[0]?e.slice(1):e).split("&");for(let e=0;ee&&fe(e))):[o&&fe(o)]).forEach((e=>{void 0!==e&&(t+=(t.length?"&":"")+n,null!=e&&(t+="="+e))})):void 0!==o&&(t+=(t.length?"&":"")+n)}return t}function ye(e){const t={};for(const n in e){const o=e[n];void 0!==o&&(t[n]=Array.isArray(o)?o.map((e=>null==e?null:""+e)):null==o?o:""+o)}return t}function be(){let e=[];return{add:function(t){return e.push(t),()=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)}},list:()=>e,reset:function(){e=[]}}}function we(e,t,n,o,r){const s=o&&(o.enterCallbacks[r]=o.enterCallbacks[r]||[]);return()=>new Promise(((i,l)=>{const a=e=>{var a;!1===e?l($(4,{from:n,to:t})):e instanceof Error?l(e):"string"==typeof(a=e)||a&&"object"==typeof a?l($(2,{from:t,to:e})):(s&&o.enterCallbacks[r]===s&&"function"==typeof e&&s.push(e),i())},c=e.call(o&&o.instances[r],t,n,a);let u=Promise.resolve(c);e.length<3&&(u=u.then(a)),u.catch((e=>l(e)))}))}function Oe(e,t,n,o){const r=[];for(const l of e)for(const e in l.components){let a=l.components[e];if("beforeRouteEnter"===t||l.instances[e])if("object"==typeof(i=a)||"displayName"in i||"props"in i||"__vccOpts"in i){const s=(a.__vccOpts||a)[t];s&&r.push(we(s,n,o,l,e))}else{let i=a();r.push((()=>i.then((r=>{if(!r)return Promise.reject(new Error(`Couldn't resolve component "${e}" at "${l.path}"`));const i=(a=r).__esModule||s&&"Module"===a[Symbol.toStringTag]?r.default:r;var a;l.components[e]=i;const c=(i.__vccOpts||i)[t];return c&&we(c,n,o,l,e)()}))))}}var i;return r}function _e(e){const t=(0,o.f3)(c),n=(0,o.f3)(u),s=(0,r.Fl)((()=>t.resolve((0,r.SU)(e.to)))),i=(0,r.Fl)((()=>{const{matched:e}=s.value,{length:t}=e,o=e[t-1],r=n.matched;if(!o||!r.length)return-1;const i=r.findIndex(b.bind(null,o));if(i>-1)return i;const l=Se(e[t-2]);return t>1&&Se(o)===l&&r[r.length-1].path!==l?r.findIndex(b.bind(null,e[t-2])):i})),l=(0,r.Fl)((()=>i.value>-1&&function(e,t){for(const n in t){const o=t[n],r=e[n];if("string"==typeof o){if(o!==r)return!1}else if(!Array.isArray(r)||r.length!==o.length||o.some(((e,t)=>e!==r[t])))return!1}return!0}(n.params,s.value.params))),a=(0,r.Fl)((()=>i.value>-1&&i.value===n.matched.length-1&&w(n.params,s.value.params)));return{route:s,href:(0,r.Fl)((()=>s.value.href)),isActive:l,isExactActive:a,navigate:function(n={}){return function(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||e.defaultPrevented||void 0!==e.button&&0!==e.button)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}(n)?t[(0,r.SU)(e.replace)?"replace":"push"]((0,r.SU)(e.to)).catch(m):Promise.resolve()}}}const ke=(0,o.aZ)({name:"RouterLink",props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:_e,setup(e,{slots:t}){const n=(0,r.qj)(_e(e)),{options:s}=(0,o.f3)(c),i=(0,r.Fl)((()=>({[Ee(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Ee(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive})));return()=>{const r=t.default&&t.default(n);return e.custom?r:(0,o.h)("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function Se(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ee=(e,t,n)=>null!=e?e:null!=t?t:n;function Ce(e,t){if(!e)return null;const n=e(t);return 1===n.length?n[0]:n}const je=(0,o.aZ)({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},setup(e,{attrs:t,slots:n}){const s=(0,o.f3)(p),i=(0,r.Fl)((()=>e.route||s.value)),c=(0,o.f3)(a,0),u=(0,r.Fl)((()=>i.value.matched[c]));(0,o.JJ)(a,c+1),(0,o.JJ)(l,u),(0,o.JJ)(p,i);const d=(0,r.iH)();return(0,o.YP)((()=>[d.value,u.value,e.name]),(([e,t,n],[o,r,s])=>{t&&(t.instances[n]=e,r&&r!==t&&e&&e===o&&(t.leaveGuards.size||(t.leaveGuards=r.leaveGuards),t.updateGuards.size||(t.updateGuards=r.updateGuards))),!e||!t||r&&b(t,r)&&o||(t.enterCallbacks[n]||[]).forEach((t=>t(e)))}),{flush:"post"}),()=>{const r=i.value,s=u.value,l=s&&s.components[e.name],a=e.name;if(!l)return Ce(n.default,{Component:l,route:r});const c=s.props[e.name],p=c?!0===c?r.params:"function"==typeof c?c(r):c:null,h=(0,o.h)(l,f({},p,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(s.instances[a]=null)},ref:d}));return Ce(n.default,{Component:h,route:r})||h}}});function Pe(e){const t=function(e,t){const n=[],o=new Map;function r(e,n,o){const l=!o,a=function(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:G(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||{}:{default:e.component}}}(e);a.aliasOf=o&&o.record;const c=X(t,e),u=[a];if("alias"in e){const t="string"==typeof e.alias?[e.alias]:e.alias;for(const e of t)u.push(f({},a,{components:o?o.record.components:a.components,path:e,aliasOf:o?o.record:a}))}let p,d;for(const t of u){const{path:u}=t;if(n&&"/"!==u[0]){const e=n.record.path,o="/"===e[e.length-1]?"":"/";t.path=n.record.path+(u&&o+u)}if(p=W(t,n,c),o?o.alias.push(p):(d=d||p,d!==p&&d.alias.push(p),l&&e.name&&!K(p)&&s(e.name)),"children"in a){const e=a.children;for(let t=0;t{s(d)}:m}function s(e){if(L(e)){const t=o.get(e);t&&(o.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(s),t.alias.forEach(s))}else{const t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&o.delete(e.record.name),e.children.forEach(s),e.alias.forEach(s))}}function i(e){let t=0;for(;t=0;)t++;n.splice(t,0,e),e.record.name&&!K(e)&&o.set(e.record.name,e)}return t=X({strict:!1,end:!0,sensitive:!1},t),e.forEach((e=>r(e))),{addRoute:r,resolve:function(e,t){let r,s,i,l={};if("name"in e&&e.name){if(r=o.get(e.name),!r)throw $(1,{location:e});i=r.record.name,l=f(function(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}(t.params,r.keys.filter((e=>!e.optional)).map((e=>e.name))),e.params),s=r.stringify(l)}else if("path"in e)s=e.path,r=n.find((e=>e.re.test(s))),r&&(l=r.parse(s),i=r.record.name);else{if(r=t.name?o.get(t.name):n.find((e=>e.re.test(t.path))),!r)throw $(1,{location:e,currentLocation:t});i=r.record.name,l=f({},t.params,e.params),s=r.stringify(l)}const a=[];let c=r;for(;c;)a.unshift(c.record),c=c.parent;return{name:i,path:s,params:l,matched:a,meta:Z(a)}},removeRoute:s,getRoutes:function(){return n},getRecordMatcher:function(e){return o.get(e)}}}(e.routes,e),n=e.parseQuery||ve,s=e.stringifyQuery||ge,i=e.history,l=be(),a=be(),v=be(),y=(0,r.XI)(F);let O=F;d&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const _=h.bind(null,(e=>""+e)),S=h.bind(null,he),E=h.bind(null,me);function C(e,o){if(o=f({},o||y.value),"string"==typeof e){const r=g(n,e,o.path),s=t.resolve({path:r.path},o),l=i.createHref(r.fullPath);return f(r,s,{params:E(s.params),hash:me(r.hash),redirectedFrom:void 0,href:l})}let r;if("path"in e)r=f({},e,{path:g(n,e.path,o.path).path});else{const t=f({},e.params);for(const e in t)null==t[e]&&delete t[e];r=f({},e,{params:S(e.params)}),o.params=S(o.params)}const l=t.resolve(r,o),a=e.hash||"";l.params=_(E(l.params));const c=function(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}(s,f({},e,{hash:(u=a,de(u).replace(ae,"{").replace(ue,"}").replace(ie,"^")),path:l.path}));var u;const p=i.createHref(c);return f({fullPath:c,hash:a,query:s===ge?ye(e.query):e.query||{}},l,{redirectedFrom:void 0,href:p})}function I(e){return"string"==typeof e?g(n,e,y.value.path):f({},e)}function A(e,t){if(O!==e)return $(8,{from:t,to:e})}function R(e){return z(e)}function T(e){const t=e.matched[e.matched.length-1];if(t&&t.redirect){const{redirect:n}=t;let o="function"==typeof n?n(e):n;return"string"==typeof o&&(o=o.includes("?")||o.includes("#")?o=I(o):{path:o},o.params={}),f({query:e.query,hash:e.hash,params:e.params},o)}}function z(e,t){const n=O=C(e),o=y.value,r=e.state,i=e.force,l=!0===e.replace,a=T(n);if(a)return z(f(I(a),{state:r,force:i,replace:l}),t||n);const c=n;let u;return c.redirectedFrom=t,!i&&function(e,t,n){const o=t.matched.length-1,r=n.matched.length-1;return o>-1&&o===r&&b(t.matched[o],n.matched[r])&&w(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}(s,o,n)&&(u=$(16,{to:c,from:o}),te(o,o,!0,!1)),(u?Promise.resolve(u):N(c,o)).catch((e=>M(e)?e:Q(e,c,o))).then((e=>{if(e){if(M(e,2))return z(f(I(e.to),{state:r,force:i,replace:l}),t||c)}else e=U(c,o,!0,l,r);return D(c,o,e),e}))}function H(e,t){const n=A(e,t);return n?Promise.reject(n):Promise.resolve()}function N(e,t){let n;const[o,r,s]=function(e,t){const n=[],o=[],r=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;ib(e,s)))?o.push(s):n.push(s));const l=e.matched[i];l&&(t.matched.find((e=>b(e,l)))||r.push(l))}return[n,o,r]}(e,t);n=Oe(o.reverse(),"beforeRouteLeave",e,t);for(const r of o)r.leaveGuards.forEach((o=>{n.push(we(o,e,t))}));const i=H.bind(null,e,t);return n.push(i),xe(n).then((()=>{n=[];for(const o of l.list())n.push(we(o,e,t));return n.push(i),xe(n)})).then((()=>{n=Oe(r,"beforeRouteUpdate",e,t);for(const o of r)o.updateGuards.forEach((o=>{n.push(we(o,e,t))}));return n.push(i),xe(n)})).then((()=>{n=[];for(const o of e.matched)if(o.beforeEnter&&!t.matched.includes(o))if(Array.isArray(o.beforeEnter))for(const r of o.beforeEnter)n.push(we(r,e,t));else n.push(we(o.beforeEnter,e,t));return n.push(i),xe(n)})).then((()=>(e.matched.forEach((e=>e.enterCallbacks={})),n=Oe(s,"beforeRouteEnter",e,t),n.push(i),xe(n)))).then((()=>{n=[];for(const o of a.list())n.push(we(o,e,t));return n.push(i),xe(n)})).catch((e=>M(e,8)?e:Promise.reject(e)))}function D(e,t,n){for(const o of v.list())o(e,t,n)}function U(e,t,n,o,r){const s=A(e,t);if(s)return s;const l=t===F,a=d?history.state:{};n&&(o||l?i.replace(e.fullPath,f({scroll:l&&a&&a.scroll},r)):i.push(e.fullPath,r)),y.value=e,te(e,t,n,l),ee()}let B;let q,V=be(),Y=be();function Q(e,t,n){ee(e);const o=Y.list();return o.length?o.forEach((o=>o(e,t,n))):console.error(e),Promise.reject(e)}function ee(e){q||(q=!0,B=i.listen(((e,t,n)=>{const o=C(e),r=T(o);if(r)return void z(f(r,{replace:!0}),o).catch(m);O=o;const s=y.value;var l,a;d&&(l=P(s.fullPath,n.delta),a=j(),x.set(l,a)),N(o,s).catch((e=>M(e,12)?e:M(e,2)?(z(e.to,o).then((e=>{M(e,20)&&!n.delta&&n.type===k.pop&&i.go(-1,!1)})).catch(m),Promise.reject()):(n.delta&&i.go(-n.delta,!1),Q(e,o,s)))).then((e=>{(e=e||U(o,s,!1))&&(n.delta?i.go(-n.delta,!1):n.type===k.pop&&M(e,20)&&i.go(-1,!1)),D(o,s,e)})).catch(m)})),V.list().forEach((([t,n])=>e?n(e):t())),V.reset())}function te(t,n,r,s){const{scrollBehavior:i}=e;if(!d||!i)return Promise.resolve();const l=!r&&function(e){const t=x.get(e);return x.delete(e),t}(P(t.fullPath,0))||(s||!r)&&history.state&&history.state.scroll||null;return(0,o.Y3)().then((()=>i(t,n,l))).then((e=>e&&function(e){let t;if("el"in e){const n=e.el,o="string"==typeof n&&n.startsWith("#"),r="string"==typeof n?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=function(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(null!=t.left?t.left:window.pageXOffset,null!=t.top?t.top:window.pageYOffset)}(e))).catch((e=>Q(e,t,n)))}const ne=e=>i.go(e);let oe;const re=new Set,se={currentRoute:y,addRoute:function(e,n){let o,r;return L(e)?(o=t.getRecordMatcher(e),r=n):r=e,t.addRoute(r,o)},removeRoute:function(e){const n=t.getRecordMatcher(e);n&&t.removeRoute(n)},hasRoute:function(e){return!!t.getRecordMatcher(e)},getRoutes:function(){return t.getRoutes().map((e=>e.record))},resolve:C,options:e,push:R,replace:function(e){return R(f(I(e),{replace:!0}))},go:ne,back:()=>ne(-1),forward:()=>ne(1),beforeEach:l.add,beforeResolve:a.add,afterEach:v.add,onError:Y.add,isReady:function(){return q&&y.value!==F?Promise.resolve():new Promise(((e,t)=>{V.add([e,t])}))},install(e){e.component("RouterLink",ke),e.component("RouterView",je),e.config.globalProperties.$router=this,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>(0,r.SU)(y)}),d&&!oe&&y.value===F&&(oe=!0,R(i.location).catch((e=>{})));const t={};for(const e in F)t[e]=(0,r.Fl)((()=>y.value[e]));e.provide(c,this),e.provide(u,(0,r.qj)(t)),e.provide(p,y);const n=e.unmount;re.add(e),e.unmount=function(){re.delete(e),re.size<1&&(O=F,B&&B(),y.value=F,oe=!1,q=!1),n()}}};return se}function xe(e){return e.reduce(((e,t)=>e.then((()=>t()))),Promise.resolve())}function Ie(){return(0,o.f3)(c)}function Ae(){return(0,o.f3)(u)}}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/567.6fcf9384.js.LICENSE.txt b/docs/.vuepress/dist/assets/js/567.6fcf9384.js.LICENSE.txt new file mode 100644 index 0000000..3c0dccd --- /dev/null +++ b/docs/.vuepress/dist/assets/js/567.6fcf9384.js.LICENSE.txt @@ -0,0 +1,8 @@ +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +/*! + * vue-router v4.0.12 + * (c) 2021 Eduardo San Martin Morote + * @license MIT + */ diff --git a/docs/.vuepress/dist/assets/js/app.159ad4c9.js b/docs/.vuepress/dist/assets/js/app.159ad4c9.js new file mode 100644 index 0000000..f548d41 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/app.159ad4c9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkvuepress=self.webpackChunkvuepress||[]).push([[143],{3131:(l,e,t)=>{t.d(e,{g:()=>s});var i=t(2009),n=t(6971),d=t(1598),r=t(1843);const s=[i.Z,n.Z,d.Z,r.Z]},9947:(l,e,t)=>{t.d(e,{p:()=>i});const i=[t(3051).Z]},4611:(l,e,t)=>{t.d(e,{l:()=>r});var i=t(8866),n=t(1263),d=t(6243);const r=[i.Z,n.Z,d.Z]},4150:(l,e,t)=>{t.d(e,{Z:()=>n});var i=t(6252);const n={404:(0,i.RC)((()=>t.e(491).then(t.bind(t,8491)))),Layout:(0,i.RC)((()=>t.e(293).then(t.bind(t,3293))))}},6056:(l,e,t)=>{t.d(e,{b:()=>n});var i=t(6252);const n={"v-5d7259d4":(0,i.RC)((()=>t.e(352).then(t.bind(t,9784)))),"v-8daa1a0e":(0,i.RC)((()=>t.e(509).then(t.bind(t,720)))),"v-077d9751":(0,i.RC)((()=>t.e(783).then(t.bind(t,6440)))),"v-45077b3a":(0,i.RC)((()=>Promise.all([t.e(634),t.e(652)]).then(t.bind(t,740)))),"v-3706649a":(0,i.RC)((()=>t.e(88).then(t.bind(t,8109))))}},9706:(l,e,t)=>{t.d(e,{T:()=>i});const i={"v-5d7259d4":()=>t.e(352).then(t.bind(t,1753)).then((({data:l})=>l)),"v-8daa1a0e":()=>t.e(509).then(t.bind(t,6464)).then((({data:l})=>l)),"v-077d9751":()=>t.e(783).then(t.bind(t,1512)).then((({data:l})=>l)),"v-45077b3a":()=>Promise.all([t.e(634),t.e(652)]).then(t.bind(t,4117)).then((({data:l})=>l)),"v-3706649a":()=>t.e(88).then(t.bind(t,1801)).then((({data:l})=>l))}},4634:(l,e,t)=>{t.d(e,{g:()=>n});var i=t(4802);const n=[["v-5d7259d4","/guide.html","",["/guide","/guide.md"]],["v-8daa1a0e","/","",["/index.html","/README.md"]],["v-077d9751","/computer-networks/","计算机网络 学习笔记",["/computer-networks/index.html","/computer-networks/README.md"]],["v-45077b3a","/web-server/","第一期学习活动",["/web-server/index.html","/web-server/README.md"]],["v-3706649a","/404.html","",["/404"]]].reduce(((l,[e,t,n,d])=>(l.push({name:e,path:t,component:i.Y,meta:{title:n}},...d.map((l=>({path:l,redirect:t})))),l)),[{name:"404",path:"/:catchAll(.*)",component:i.Y}])},5472:(l,e,t)=>{t.d(e,{D:()=>i});const i=[{title:"",headers:[],path:"/guide.html",pathLocale:"/",extraFields:[]},{title:"计算机网络 学习笔记",headers:[{level:2,title:"第一章 概述",slug:"第一章-概述",children:[{level:3,title:"1.1 计算机在信息时代中的作用",slug:"_1-1-计算机在信息时代中的作用",children:[]},{level:3,title:"1.2 互联网概述",slug:"_1-2-互联网概述",children:[{level:4,title:"🌠1.2.1 网络的网络",slug:"🌠1-2-1-网络的网络",children:[]},{level:4,title:"🌠1.2.2 互联网基础结构发展的三个阶段",slug:"🌠1-2-2-互联网基础结构发展的三个阶段",children:[]},{level:4,title:"1.2.3 互联网的标准化工作",slug:"_1-2-3-互联网的标准化工作",children:[]}]},{level:3,title:"🌠1.3互联网的形成",slug:"🌠1-3互联网的形成",children:[{level:4,title:"🌠1.3.1 互联网的边缘部分",slug:"🌠1-3-1-互联网的边缘部分",children:[]},{level:4,title:"🌠1.3.2 互联网的核心部分",slug:"🌠1-3-2-互联网的核心部分",children:[]}]},{level:3,title:"1.4 计算机网络在我国的发展",slug:"_1-4-计算机网络在我国的发展",children:[]},{level:3,title:"1.5 计算机网络的类别",slug:"_1-5-计算机网络的类别",children:[{level:4,title:"1.5.1 计算机网络的定义",slug:"_1-5-1-计算机网络的定义",children:[]},{level:4,title:"🌠1.5.2 几种不同类别的计算机网络",slug:"🌠1-5-2-几种不同类别的计算机网络",children:[]}]},{level:3,title:"1.6 计算机网络的性能⭐",slug:"_1-6-计算机网络的性能⭐",children:[{level:4,title:"1.6.1 计算机网络的性能指标",slug:"_1-6-1-计算机网络的性能指标",children:[]},{level:4,title:"1.6.2 计算机网络的非性能特征",slug:"_1-6-2-计算机网络的非性能特征",children:[]}]},{level:3,title:"1.7 计算机网络体系结构⭐",slug:"_1-7-计算机网络体系结构⭐",children:[{level:4,title:"1.7.1 计算机网络体系结构的组成",slug:"_1-7-1-计算机网络体系结构的组成",children:[]},{level:4,title:"1.7.2 协议与划分层次",slug:"_1-7-2-协议与划分层次",children:[]},{level:4,title:"1.7.3 具有五层协议的",slug:"_1-7-3-具有五层协议的",children:[]},{level:4,title:"1.7.4 实体、协议、服务和服务访问点",slug:"_1-7-4-实体、协议、服务和服务访问点",children:[]},{level:4,title:"1.7.5 TCP/IP的体系结构",slug:"_1-7-5-tcp-ip的体系结构",children:[]}]}]},{level:2,title:"第二章 物理层",slug:"第二章-物理层",children:[{level:3,title:"2.1 物理层的基本概念",slug:"_2-1-物理层的基本概念",children:[]},{level:3,title:"2.2 数据通信的基础知识",slug:"_2-2-数据通信的基础知识",children:[{level:4,title:"2.2.1 数据通信系统的概述",slug:"_2-2-1-数据通信系统的概述",children:[]},{level:4,title:"2.2.2 有关信道的几个基本概念",slug:"_2-2-2-有关信道的几个基本概念",children:[]},{level:4,title:"2.2.3 信道的极限容量",slug:"_2-2-3-信道的极限容量",children:[]}]},{level:3,title:"2.3 物理层下面的传输媒体",slug:"_2-3-物理层下面的传输媒体",children:[{level:4,title:"2.3.1 导引型传输媒体",slug:"_2-3-1-导引型传输媒体",children:[]},{level:4,title:"2.3.2 非导引型传输媒体",slug:"_2-3-2-非导引型传输媒体",children:[]}]},{level:3,title:"2.4 信道复用技术",slug:"_2-4-信道复用技术",children:[{level:4,title:"2.4.1 频分复用、时分复用和统计时分复用",slug:"_2-4-1-频分复用、时分复用和统计时分复用",children:[]},{level:4,title:"2.4.2 波分复用",slug:"_2-4-2-波分复用",children:[]},{level:4,title:"2.4.3 码分复用",slug:"_2-4-3-码分复用",children:[]}]},{level:3,title:"2.5 数字传输系统",slug:"_2-5-数字传输系统",children:[]},{level:3,title:"2.6 宽带接入技术",slug:"_2-6-宽带接入技术",children:[{level:4,title:"2.6.1 ADSL技术",slug:"_2-6-1-adsl技术",children:[]},{level:4,title:"2.6.2 光纤同轴混合网(HFC网)",slug:"_2-6-2-光纤同轴混合网-hfc网",children:[]},{level:4,title:"2.6.3 FTTx技术",slug:"_2-6-3-fttx技术",children:[]}]}]},{level:2,title:"第三章 数据链路层",slug:"第三章-数据链路层",children:[{level:3,title:"3.1 使用点对点信道的数据链路层",slug:"_3-1-使用点对点信道的数据链路层",children:[{level:4,title:"3.1.1 数据链路和帧",slug:"_3-1-1-数据链路和帧",children:[]},{level:4,title:"3.1.2 三个基本问题",slug:"_3-1-2-三个基本问题",children:[]}]},{level:3,title:"3.2 点对点协议PPP",slug:"_3-2-点对点协议ppp",children:[{level:4,title:"3.2.1 PPP协议的特点",slug:"_3-2-1-ppp协议的特点",children:[]},{level:4,title:"3.2.2 PPP协议的帧格式",slug:"_3-2-2-ppp协议的帧格式",children:[]},{level:4,title:"3.2.3 PPP协议的工作状态",slug:"_3-2-3-ppp协议的工作状态",children:[]}]},{level:3,title:"3.3 使用广播信道的数据链路层",slug:"_3-3-使用广播信道的数据链路层",children:[{level:4,title:"3.3.1 局域网的数据链路层",slug:"_3-3-1-局域网的数据链路层",children:[]},{level:4,title:"3.3.2 CSMA/CD协议",slug:"_3-3-2-csma-cd协议",children:[]},{level:4,title:"3.3.3 使用集线器的星型拓扑",slug:"_3-3-3-使用集线器的星型拓扑",children:[]},{level:4,title:"3.3.4 以太网的信道利用率",slug:"_3-3-4-以太网的信道利用率",children:[]},{level:4,title:"3.3.5 以太网的MAC层",slug:"_3-3-5-以太网的mac层",children:[]}]},{level:3,title:"3.4 扩展的以太网",slug:"_3-4-扩展的以太网",children:[{level:4,title:"3.4.1 在物理层扩展以太网",slug:"_3-4-1-在物理层扩展以太网",children:[]},{level:4,title:"3.4.2 在数据链路层扩展以太网",slug:"_3-4-2-在数据链路层扩展以太网",children:[]},{level:4,title:"3.4.3 虚拟局域网",slug:"_3-4-3-虚拟局域网",children:[]}]},{level:3,title:"3.5 高速以太网",slug:"_3-5-高速以太网",children:[{level:4,title:"3.5.1 100BASE-T以太网",slug:"_3-5-1-100base-t以太网",children:[]},{level:4,title:"3.5.2 吉比特以太网",slug:"_3-5-2-吉比特以太网",children:[]},{level:4,title:"3.5.3 10吉比特以太网(10GE)和更快的以太网",slug:"_3-5-3-10吉比特以太网-10ge-和更快的以太网",children:[]},{level:4,title:"3.5.4 使用以太网进行宽带接入",slug:"_3-5-4-使用以太网进行宽带接入",children:[]}]}]},{level:2,title:"第四章 网络层",slug:"第四章-网络层",children:[{level:3,title:"4.1 网络层提供的两种服务",slug:"_4-1-网络层提供的两种服务",children:[]},{level:3,title:"4.2 网际协议IP",slug:"_4-2-网际协议ip",children:[{level:4,title:"4.2.1 虚拟互连网络",slug:"_4-2-1-虚拟互连网络",children:[]},{level:4,title:"4.2.2 分类的IP地址",slug:"_4-2-2-分类的ip地址",children:[]},{level:4,title:"4.2.3 IP地址与硬件地址",slug:"_4-2-3-ip地址与硬件地址",children:[]},{level:4,title:"4.2.4 地址解析协议ARP",slug:"_4-2-4-地址解析协议arp",children:[]},{level:4,title:"4.2.5 IP数据报的格式",slug:"_4-2-5-ip数据报的格式",children:[]},{level:4,title:"4.2.6 IP层转发分组的流程",slug:"_4-2-6-ip层转发分组的流程",children:[]}]},{level:3,title:"4.3 划分子网和构造子网",slug:"_4-3-划分子网和构造子网",children:[{level:4,title:"4.3.1 划分子网",slug:"_4-3-1-划分子网",children:[]},{level:4,title:"4.3.2 使用子网时分组的转发",slug:"_4-3-2-使用子网时分组的转发",children:[]},{level:4,title:"4.3.3 无分类编址CIDR(构造超网)",slug:"_4-3-3-无分类编址cidr-构造超网",children:[]}]},{level:3,title:"4.4 网际控制报文协议ICMP",slug:"_4-4-网际控制报文协议icmp",children:[{level:4,title:"4.4.1 ICMP报文的种类",slug:"_4-4-1-icmp报文的种类",children:[]},{level:4,title:"4.4.2 ICMP的应用举例",slug:"_4-4-2-icmp的应用举例",children:[]}]},{level:3,title:"4.5 互联网的路由选择协议",slug:"_4-5-互联网的路由选择协议",children:[{level:4,title:"4.5.1 有关路由选择协议的几个基本概念",slug:"_4-5-1-有关路由选择协议的几个基本概念",children:[]},{level:4,title:"4.5.2 内部网关协议RIP",slug:"_4-5-2-内部网关协议rip",children:[]},{level:4,title:"4.5.3 内部网关协议OSPF",slug:"_4-5-3-内部网关协议ospf",children:[]},{level:4,title:"4.5.4 外部网关协议BGP",slug:"_4-5-4-外部网关协议bgp",children:[]},{level:4,title:"4.5.5 路由器的构成",slug:"_4-5-5-路由器的构成",children:[]}]},{level:3,title:"4.6 IPv6",slug:"_4-6-ipv6",children:[{level:4,title:"4.6.1 IPv6的基本首部",slug:"_4-6-1-ipv6的基本首部",children:[]},{level:4,title:"4.6.2 IPv6的地址",slug:"_4-6-2-ipv6的地址",children:[]},{level:4,title:"4.6.3 从IPv4向IPv6过渡",slug:"_4-6-3-从ipv4向ipv6过渡",children:[]},{level:4,title:"4.6.4 ICMPv6",slug:"_4-6-4-icmpv6",children:[]}]},{level:3,title:"4.7 IP多播 ✘",slug:"_4-7-ip多播-✘",children:[{level:4,title:"4.7.1 IP多播的基本概念",slug:"_4-7-1-ip多播的基本概念",children:[]},{level:4,title:"4.7.2 在局域网上进行硬件多播",slug:"_4-7-2-在局域网上进行硬件多播",children:[]},{level:4,title:"4.7.3 网际组管理协议IGMP和多播路由选择协议",slug:"_4-7-3-网际组管理协议igmp和多播路由选择协议",children:[]}]},{level:3,title:"4.8 虚拟局域网VPN和网络地址转换NAT",slug:"_4-8-虚拟局域网vpn和网络地址转换nat",children:[{level:4,title:"4.8.1 虚拟局域网VPN",slug:"_4-8-1-虚拟局域网vpn",children:[]},{level:4,title:"4.8.2 网络地址转换NAT",slug:"_4-8-2-网络地址转换nat",children:[]}]},{level:3,title:"4.9 多协议交换MPLS ✘",slug:"_4-9-多协议交换mpls-✘",children:[{level:4,title:"4.9.1 MPLS的工作原理",slug:"_4-9-1-mpls的工作原理",children:[]},{level:4,title:"4.9.2 MPLS首部的位置与格式",slug:"_4-9-2-mpls首部的位置与格式",children:[]}]}]},{level:2,title:"第五章 运输层",slug:"第五章-运输层",children:[{level:3,title:"5.1 运输层协议概述",slug:"_5-1-运输层协议概述",children:[{level:4,title:"5.1.1 进程之间的通信",slug:"_5-1-1-进程之间的通信",children:[]},{level:4,title:"5.1.2 运输层的两个主要协议",slug:"_5-1-2-运输层的两个主要协议",children:[]},{level:4,title:"5.1.3 运输层的端口",slug:"_5-1-3-运输层的端口",children:[]}]},{level:3,title:"5.2 用户数据报协议UDP",slug:"_5-2-用户数据报协议udp",children:[{level:4,title:"5.2.1 UDP概述",slug:"_5-2-1-udp概述",children:[]},{level:4,title:"5.2.2 UDP的首部格式",slug:"_5-2-2-udp的首部格式",children:[]}]},{level:3,title:"5.3 传输控制协议TCP概述",slug:"_5-3-传输控制协议tcp概述",children:[{level:4,title:"5.3.1 TCP最主要的特点",slug:"_5-3-1-tcp最主要的特点",children:[]},{level:4,title:"5.3.2 TCP的连接",slug:"_5-3-2-tcp的连接",children:[]}]},{level:3,title:"5.4 可靠传输的工作原理",slug:"_5-4-可靠传输的工作原理",children:[{level:4,title:"5.4.1 停止等待协议",slug:"_5-4-1-停止等待协议",children:[]},{level:4,title:"5.4.2 连续ARQ协议",slug:"_5-4-2-连续arq协议",children:[]}]},{level:3,title:"5.5 TCP报文段的首部格式",slug:"_5-5-tcp报文段的首部格式",children:[]},{level:3,title:"5.6 TCP可靠传输的实现",slug:"_5-6-tcp可靠传输的实现",children:[{level:4,title:"5.6.1 以字节为单位的滑动窗口",slug:"_5-6-1-以字节为单位的滑动窗口",children:[]},{level:4,title:"5.6.2 超时重传时间的选择",slug:"_5-6-2-超时重传时间的选择",children:[]},{level:4,title:"5.6.3 选择确认SACK",slug:"_5-6-3-选择确认sack",children:[]}]},{level:3,title:"5.7 TCP的流量控制",slug:"_5-7-tcp的流量控制",children:[{level:4,title:"5.7.1 利用滑动窗口实现流量控制",slug:"_5-7-1-利用滑动窗口实现流量控制",children:[]},{level:4,title:"5.7.2 TCP的传输效率",slug:"_5-7-2-tcp的传输效率",children:[]}]},{level:3,title:"5.8 TCP的拥塞机制",slug:"_5-8-tcp的拥塞机制",children:[{level:4,title:"5.8.1 拥塞机制的一般原理",slug:"_5-8-1-拥塞机制的一般原理",children:[]},{level:4,title:"5.8.2 TCP的拥塞控制办法",slug:"_5-8-2-tcp的拥塞控制办法",children:[]},{level:4,title:"5.8.3 主动队列管理AQM",slug:"_5-8-3-主动队列管理aqm",children:[]}]},{level:3,title:"5.9 TCP的运输连接管理",slug:"_5-9-tcp的运输连接管理",children:[{level:4,title:"5.9.1 TCP连接的建立",slug:"_5-9-1-tcp连接的建立",children:[]},{level:4,title:"5.9.2 TCP连接释放",slug:"_5-9-2-tcp连接释放",children:[]},{level:4,title:"5.9.3 TCP的有限状态机",slug:"_5-9-3-tcp的有限状态机",children:[]}]}]},{level:2,title:"第六章 应用层",slug:"第六章-应用层",children:[{level:3,title:"6.1 域名系统DNS",slug:"_6-1-域名系统dns",children:[{level:4,title:"6.1.1 域名系统概述",slug:"_6-1-1-域名系统概述",children:[]},{level:4,title:"6.1.2 互联网的域名系统",slug:"_6-1-2-互联网的域名系统",children:[]},{level:4,title:"6.1.3 域名服务器",slug:"_6-1-3-域名服务器",children:[]}]},{level:3,title:"6.2 文件传送协议",slug:"_6-2-文件传送协议",children:[{level:4,title:"6.2.1 FTP概述",slug:"_6-2-1-ftp概述",children:[]},{level:4,title:"6.2.2 FTP的基本工作原理",slug:"_6-2-2-ftp的基本工作原理",children:[]},{level:4,title:"6.2.3 简单文件传送协议TFTP",slug:"_6-2-3-简单文件传送协议tftp",children:[]}]},{level:3,title:"6.3 远程终端协议TELNET",slug:"_6-3-远程终端协议telnet",children:[]},{level:3,title:"6.4 万维网WWW",slug:"_6-4-万维网www",children:[{level:4,title:"6.4.1 万维网概述",slug:"_6-4-1-万维网概述",children:[]},{level:4,title:"6.4.2 统一资源定位符URL",slug:"_6-4-2-统一资源定位符url",children:[]},{level:4,title:"6.4.3 超文本传送协议HTTP",slug:"_6-4-3-超文本传送协议http",children:[]},{level:4,title:"6.4.4 万维网的文档",slug:"_6-4-4-万维网的文档",children:[]},{level:4,title:"6.4.5 万维网的信息检索系统",slug:"_6-4-5-万维网的信息检索系统",children:[]},{level:4,title:"6.4.6 博客和微博",slug:"_6-4-6-博客和微博",children:[]},{level:4,title:"6.4.7 社交网站",slug:"_6-4-7-社交网站",children:[]}]},{level:3,title:"6.5 电子邮件",slug:"_6-5-电子邮件",children:[{level:4,title:"6.5.1",slug:"_6-5-1",children:[]},{level:4,title:"6.5.2",slug:"_6-5-2",children:[]},{level:4,title:"6.5.3",slug:"_6-5-3",children:[]},{level:4,title:"6.5.4",slug:"_6-5-4",children:[]},{level:4,title:"6.5.5",slug:"_6-5-5",children:[]},{level:4,title:"6.5.6",slug:"_6-5-6",children:[]}]},{level:3,title:"6.6 动态主机配置协议DHCP",slug:"_6-6-动态主机配置协议dhcp",children:[]},{level:3,title:"6.7 简单网络管理协议SNMP",slug:"_6-7-简单网络管理协议snmp",children:[{level:4,title:"6.7.1",slug:"_6-7-1",children:[]},{level:4,title:"6.7.2",slug:"_6-7-2",children:[]},{level:4,title:"6.7.3",slug:"_6-7-3",children:[]},{level:4,title:"6.7.4",slug:"_6-7-4",children:[]}]},{level:3,title:"6.8 应用进程跨越网络的通信",slug:"_6-8-应用进程跨越网络的通信",children:[{level:4,title:"6.8.1",slug:"_6-8-1",children:[]},{level:4,title:"6.8.2",slug:"_6-8-2",children:[]}]},{level:3,title:"6.9 P2P应用",slug:"_6-9-p2p应用",children:[{level:4,title:"6.9.1",slug:"_6-9-1",children:[]},{level:4,title:"6.9.2",slug:"_6-9-2",children:[]},{level:4,title:"6.9.3",slug:"_6-9-3",children:[]},{level:4,title:"6.9.4",slug:"_6-9-4",children:[]}]}]},{level:2,title:"第七章 网络安全 ✘",slug:"第七章-网络安全-✘",children:[{level:3,title:"7.1",slug:"_7-1",children:[{level:4,title:"7.1.1",slug:"_7-1-1",children:[]},{level:4,title:"7.1.2",slug:"_7-1-2",children:[]},{level:4,title:"7.1.3",slug:"_7-1-3",children:[]}]},{level:3,title:"7.2",slug:"_7-2",children:[{level:4,title:"7.2.1",slug:"_7-2-1",children:[]},{level:4,title:"7.2.2",slug:"_7-2-2",children:[]}]},{level:3,title:"7.3",slug:"_7-3",children:[]},{level:3,title:"7.4",slug:"_7-4",children:[{level:4,title:"7.4.1",slug:"_7-4-1",children:[]},{level:4,title:"7.4.2",slug:"_7-4-2",children:[]}]},{level:3,title:"7.5",slug:"_7-5",children:[{level:4,title:"7.5.1",slug:"_7-5-1",children:[]},{level:4,title:"7.5.2",slug:"_7-5-2",children:[]}]},{level:3,title:"7.6",slug:"_7-6",children:[{level:4,title:"7.6.1",slug:"_7-6-1",children:[]},{level:4,title:"7.6.2",slug:"_7-6-2",children:[]},{level:4,title:"7.6.3",slug:"_7-6-3",children:[]},{level:4,title:"7.7",slug:"_7-7",children:[]},{level:4,title:"7.7.1",slug:"_7-7-1",children:[]},{level:4,title:"7.7.2",slug:"_7-7-2",children:[]}]},{level:3,title:"7.8",slug:"_7-8",children:[]}]},{level:2,title:"第八章 互联网上的音频/视频服务 ✘",slug:"第八章-互联网上的音频-视频服务-✘",children:[{level:3,title:"8.1",slug:"_8-1",children:[]},{level:3,title:"8.2",slug:"_8-2",children:[{level:4,title:"8.2.1",slug:"_8-2-1",children:[]},{level:4,title:"8.2.2",slug:"_8-2-2",children:[]},{level:4,title:"8.2.3",slug:"_8-2-3",children:[]}]},{level:3,title:"8.3",slug:"_8-3",children:[{level:4,title:"8.3.1",slug:"_8-3-1",children:[]},{level:4,title:"8.3.2",slug:"_8-3-2",children:[]},{level:4,title:"8.3.3",slug:"_8-3-3",children:[]},{level:4,title:"8.3.4",slug:"_8-3-4",children:[]},{level:4,title:"8.3.5",slug:"_8-3-5",children:[]},{level:4,title:"8.3.6",slug:"_8-3-6",children:[]}]},{level:3,title:"8.4",slug:"_8-4",children:[{level:4,title:"8.4.1",slug:"_8-4-1",children:[]},{level:4,title:"8.4.2",slug:"_8-4-2",children:[]},{level:4,title:"8.4.3",slug:"_8-4-3",children:[]},{level:4,title:"8.4.4",slug:"_8-4-4",children:[]}]}]},{level:2,title:"第九章 无线网络和移动网络",slug:"第九章-无线网络和移动网络",children:[{level:3,title:"9.1",slug:"_9-1",children:[{level:4,title:"9.1.1",slug:"_9-1-1",children:[]},{level:4,title:"9.1.2",slug:"_9-1-2",children:[]},{level:4,title:"9.1.3",slug:"_9-1-3",children:[]},{level:4,title:"9.1.4",slug:"_9-1-4",children:[]}]},{level:3,title:"9.2",slug:"_9-2",children:[]},{level:3,title:"9.3",slug:"_9-3",children:[]},{level:3,title:"9.4",slug:"_9-4",children:[{level:4,title:"9.4.1",slug:"_9-4-1",children:[]},{level:4,title:"9.4.2",slug:"_9-4-2",children:[]},{level:4,title:"9.4.3",slug:"_9-4-3",children:[]},{level:4,title:"9.4.4",slug:"_9-4-4",children:[]},{level:4,title:"9.4.5",slug:"_9-4-5",children:[]}]},{level:3,title:"9.5",slug:"_9-5",children:[]}]},{level:2,title:"二级标题",slug:"二级标题",children:[{level:3,title:"三级标题",slug:"三级标题",children:[{level:4,title:"四级标题",slug:"四级标题",children:[]}]}]}],path:"/computer-networks/",pathLocale:"/",extraFields:[]},{title:"第一期学习活动",headers:[{level:2,title:"第1天",slug:"第1天",children:[{level:3,title:"任务:Web服务器基本工作原理学习",slug:"任务-web服务器基本工作原理学习",children:[]},{level:3,title:"作业",slug:"作业",children:[]}]},{level:2,title:"第2天",slug:"第2天",children:[{level:3,title:"任务:HTTP协议学习 & F12 & wireshark抓包",slug:"任务-http协议学习-f12-wireshark抓包",children:[]},{level:3,title:"作业",slug:"作业-1",children:[{level:4,title:"HTTP请求主要由哪几个部分组成?",slug:"http请求主要由哪几个部分组成",children:[]},{level:4,title:"HTTP响应主要由哪几部分组成?",slug:"http响应主要由哪几部分组成",children:[]},{level:4,title:"HTTP头部和数据如何组织在一起?",slug:"http头部和数据如何组织在一起",children:[]},{level:4,title:"Wireshark抓包",slug:"wireshark抓包",children:[]}]}]},{level:2,title:"第3天",slug:"第3天",children:[{level:3,title:"任务:套接字编程基础知识",slug:"任务-套接字编程基础知识",children:[]},{level:3,title:"作业",slug:"作业-2",children:[{level:4,title:"什么是套接字?",slug:"什么是套接字",children:[]},{level:4,title:"套接字有哪几个类型?",slug:"套接字有哪几个类型",children:[]},{level:4,title:"用套接字编写一个客户端和服务端,分别有哪几个步骤?",slug:"用套接字编写一个客户端和服务端-分别有哪几个步骤",children:[]}]}]},{level:2,title:"★ 第4天",slug:"★-第4天",children:[{level:3,title:"任务:编写一个TCP Client,发出一个简单的HTTP请求",slug:"任务-编写一个tcp-client-发出一个简单的http请求",children:[]},{level:3,title:"作业",slug:"作业-3",children:[]}]},{level:2,title:"★ 第5天",slug:"★-第5天",children:[{level:3,title:"任务:编写一个TCP Server,发出一个简单的HTTP响应",slug:"任务-编写一个tcp-server-发出一个简单的http响应",children:[]},{level:3,title:"作业",slug:"作业-4",children:[]}]},{level:2,title:"★ 第8天",slug:"★-第8天",children:[{level:3,title:"任务:改造TCP Server,发送一个HTML文件",slug:"任务-改造tcp-server-发送一个html文件",children:[]}]},{level:2,title:"★ 第9天",slug:"★-第9天",children:[{level:3,title:"任务:使用多线程",slug:"任务-使用多线程",children:[]},{level:3,title:"作业",slug:"作业-5",children:[]}]},{level:2,title:"第10天",slug:"第10天",children:[{level:3,title:"任务:设计并使用配置文件",slug:"任务-设计并使用配置文件",children:[]},{level:3,title:"作业",slug:"作业-6",children:[]},{level:3,title:"作业",slug:"作业-7",children:[]},{level:3,title:"作业",slug:"作业-8",children:[]},{level:3,title:"作业",slug:"作业-9",children:[]},{level:3,title:"作业",slug:"作业-10",children:[{level:4,title:"回答轩辕大佬的问题:",slug:"回答轩辕大佬的问题",children:[]},{level:4,title:"其他",slug:"其他",children:[]}]}]}],path:"/web-server/",pathLocale:"/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}]},5220:(l,e,t)=>{t.d(e,{H:()=>i});const i={base:"/",lang:"zh-CN",title:"Coz的学习笔记",description:"这是我的第一个 VuePress 站点",head:[["link",{rel:"icon",href:"/images/logo.png"}],["link",{rel:"stylesheet",href:"/css/search.css"}]],locales:{}}},2232:(l,e,t)=>{t.d(e,{f:()=>i});const i={logo:"/images/logo.png",lastUpdated:!0,sidebarDepth:6,backToHome:"回到首页",navbar:[{text:"首页",link:"/"},{text:"目录",children:[{text:"目录",link:"/guide"},{text:"笔记",children:[{text:"计算机网络笔记",link:"/computer-networks"}]},{text:"其他",children:[{text:"Web服务器",link:"/web-server/"}]}]}],locales:{"/":{selectLanguageName:"English"}},darkMode:!0,repo:null,selectLanguageText:"Languages",selectLanguageAriaLabel:"Select language",sidebar:"auto",editLink:!0,editLinkText:"Edit this page",lastUpdatedText:"Last Updated",contributors:!0,contributorsText:"Contributors",notFound:["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],openInNewWindow:"open in new window",toggleDarkMode:"toggle dark mode",toggleSidebar:"toggle sidebar"}}},l=>{l.O(0,[512,567],(()=>(5698,l(l.s=5698)))),l.O()}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/runtime~app.f7ccc4cf.js b/docs/.vuepress/dist/assets/js/runtime~app.f7ccc4cf.js new file mode 100644 index 0000000..b881d2d --- /dev/null +++ b/docs/.vuepress/dist/assets/js/runtime~app.f7ccc4cf.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,r,t,a,o,n={},s={};function i(e){var r=s[e];if(void 0!==r)return r.exports;var t=s[e]={exports:{}};return n[e].call(t.exports,t,t.exports,i),t.exports}i.m=n,e=[],i.O=(r,t,a,o)=>{if(!t){var n=1/0;for(u=0;u=o)&&Object.keys(i.O).every((e=>i.O[e](t[l])))?t.splice(l--,1):(s=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[t,a,o]},i.d=(e,r)=>{for(var t in r)i.o(r,t)&&!i.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((r,t)=>(i.f[t](e,r),r)),[])),i.u=e=>"assets/js/"+({88:"v-3706649a",352:"v-5d7259d4",509:"v-8daa1a0e",652:"v-45077b3a",783:"v-077d9751"}[e]||e)+"."+{88:"859b00ff",293:"f4cccc85",352:"b4e6193d",491:"e62e5555",509:"fbae5ea0",634:"ee6a060d",652:"d3add6dd",783:"fecfa636"}[e]+".js",i.miniCssF=e=>"assets/css/"+e+".styles.ee6a060d.css",i.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r={},t="vuepress:",i.l=(e,a,o,n)=>{if(r[e])r[e].push(a);else{var s,l;if(void 0!==o)for(var d=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(p);var o=r[e];if(delete r[e],s.parentNode&&s.parentNode.removeChild(s),o&&o.forEach((e=>e(a))),t)return t(a)},p=setTimeout(c.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=c.bind(null,s.onerror),s.onload=c.bind(null,s.onload),l&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="/",a=e=>new Promise(((r,t)=>{var a=i.miniCssF(e),o=i.p+a;if(((e,r)=>{for(var t=document.getElementsByTagName("link"),a=0;a{var o=document.createElement("link");o.rel="stylesheet",o.type="text/css",o.onerror=o.onload=n=>{if(o.onerror=o.onload=null,"load"===n.type)t();else{var s=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.href||r,l=new Error("Loading CSS chunk "+e+" failed.\n("+i+")");l.code="CSS_CHUNK_LOAD_FAILED",l.type=s,l.request=i,o.parentNode.removeChild(o),a(l)}},o.href=r,document.head.appendChild(o)})(e,o,r,t)})),o={523:0},i.f.miniCss=(e,r)=>{o[e]?r.push(o[e]):0!==o[e]&&{634:1}[e]&&r.push(o[e]=a(e).then((()=>{o[e]=0}),(r=>{throw delete o[e],r})))},(()=>{var e={523:0,512:0};i.f.j=(r,t)=>{var a=i.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(512|523|634)$/.test(r))e[r]=0;else{var o=new Promise(((t,o)=>a=e[r]=[t,o]));t.push(a[2]=o);var n=i.p+i.u(r),s=new Error;i.l(n,(t=>{if(i.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;s.message="Loading chunk "+r+" failed.\n("+o+": "+n+")",s.name="ChunkLoadError",s.type=o,s.request=n,a[1](s)}}),"chunk-"+r,r)}},i.O.j=r=>0===e[r];var r=(r,t)=>{var a,o,[n,s,l]=t,d=0;if(n.some((r=>0!==e[r]))){for(a in s)i.o(s,a)&&(i.m[a]=s[a]);if(l)var u=l(i)}for(r&&r(t);d{a.r(e),a.d(e,{data:()=>_});const _={key:"v-077d9751",path:"/computer-networks/",title:"计算机网络 学习笔记",lang:"zh-CN",frontmatter:{sidebarDepth:4},excerpt:"",headers:[{level:2,title:"第一章 概述",slug:"第一章-概述",children:[{level:3,title:"1.1 计算机在信息时代中的作用",slug:"_1-1-计算机在信息时代中的作用",children:[]},{level:3,title:"1.2 互联网概述",slug:"_1-2-互联网概述",children:[{level:4,title:"🌠1.2.1 网络的网络",slug:"🌠1-2-1-网络的网络",children:[]},{level:4,title:"🌠1.2.2 互联网基础结构发展的三个阶段",slug:"🌠1-2-2-互联网基础结构发展的三个阶段",children:[]},{level:4,title:"1.2.3 互联网的标准化工作",slug:"_1-2-3-互联网的标准化工作",children:[]}]},{level:3,title:"🌠1.3互联网的形成",slug:"🌠1-3互联网的形成",children:[{level:4,title:"🌠1.3.1 互联网的边缘部分",slug:"🌠1-3-1-互联网的边缘部分",children:[]},{level:4,title:"🌠1.3.2 互联网的核心部分",slug:"🌠1-3-2-互联网的核心部分",children:[]}]},{level:3,title:"1.4 计算机网络在我国的发展",slug:"_1-4-计算机网络在我国的发展",children:[]},{level:3,title:"1.5 计算机网络的类别",slug:"_1-5-计算机网络的类别",children:[{level:4,title:"1.5.1 计算机网络的定义",slug:"_1-5-1-计算机网络的定义",children:[]},{level:4,title:"🌠1.5.2 几种不同类别的计算机网络",slug:"🌠1-5-2-几种不同类别的计算机网络",children:[]}]},{level:3,title:"1.6 计算机网络的性能⭐",slug:"_1-6-计算机网络的性能⭐",children:[{level:4,title:"1.6.1 计算机网络的性能指标",slug:"_1-6-1-计算机网络的性能指标",children:[]},{level:4,title:"1.6.2 计算机网络的非性能特征",slug:"_1-6-2-计算机网络的非性能特征",children:[]}]},{level:3,title:"1.7 计算机网络体系结构⭐",slug:"_1-7-计算机网络体系结构⭐",children:[{level:4,title:"1.7.1 计算机网络体系结构的组成",slug:"_1-7-1-计算机网络体系结构的组成",children:[]},{level:4,title:"1.7.2 协议与划分层次",slug:"_1-7-2-协议与划分层次",children:[]},{level:4,title:"1.7.3 具有五层协议的",slug:"_1-7-3-具有五层协议的",children:[]},{level:4,title:"1.7.4 实体、协议、服务和服务访问点",slug:"_1-7-4-实体、协议、服务和服务访问点",children:[]},{level:4,title:"1.7.5 TCP/IP的体系结构",slug:"_1-7-5-tcp-ip的体系结构",children:[]}]}]},{level:2,title:"第二章 物理层",slug:"第二章-物理层",children:[{level:3,title:"2.1 物理层的基本概念",slug:"_2-1-物理层的基本概念",children:[]},{level:3,title:"2.2 数据通信的基础知识",slug:"_2-2-数据通信的基础知识",children:[{level:4,title:"2.2.1 数据通信系统的概述",slug:"_2-2-1-数据通信系统的概述",children:[]},{level:4,title:"2.2.2 有关信道的几个基本概念",slug:"_2-2-2-有关信道的几个基本概念",children:[]},{level:4,title:"2.2.3 信道的极限容量",slug:"_2-2-3-信道的极限容量",children:[]}]},{level:3,title:"2.3 物理层下面的传输媒体",slug:"_2-3-物理层下面的传输媒体",children:[{level:4,title:"2.3.1 导引型传输媒体",slug:"_2-3-1-导引型传输媒体",children:[]},{level:4,title:"2.3.2 非导引型传输媒体",slug:"_2-3-2-非导引型传输媒体",children:[]}]},{level:3,title:"2.4 信道复用技术",slug:"_2-4-信道复用技术",children:[{level:4,title:"2.4.1 频分复用、时分复用和统计时分复用",slug:"_2-4-1-频分复用、时分复用和统计时分复用",children:[]},{level:4,title:"2.4.2 波分复用",slug:"_2-4-2-波分复用",children:[]},{level:4,title:"2.4.3 码分复用",slug:"_2-4-3-码分复用",children:[]}]},{level:3,title:"2.5 数字传输系统",slug:"_2-5-数字传输系统",children:[]},{level:3,title:"2.6 宽带接入技术",slug:"_2-6-宽带接入技术",children:[{level:4,title:"2.6.1 ADSL技术",slug:"_2-6-1-adsl技术",children:[]},{level:4,title:"2.6.2 光纤同轴混合网(HFC网)",slug:"_2-6-2-光纤同轴混合网-hfc网",children:[]},{level:4,title:"2.6.3 FTTx技术",slug:"_2-6-3-fttx技术",children:[]}]}]},{level:2,title:"第三章 数据链路层",slug:"第三章-数据链路层",children:[{level:3,title:"3.1 使用点对点信道的数据链路层",slug:"_3-1-使用点对点信道的数据链路层",children:[{level:4,title:"3.1.1 数据链路和帧",slug:"_3-1-1-数据链路和帧",children:[]},{level:4,title:"3.1.2 三个基本问题",slug:"_3-1-2-三个基本问题",children:[]}]},{level:3,title:"3.2 点对点协议PPP",slug:"_3-2-点对点协议ppp",children:[{level:4,title:"3.2.1 PPP协议的特点",slug:"_3-2-1-ppp协议的特点",children:[]},{level:4,title:"3.2.2 PPP协议的帧格式",slug:"_3-2-2-ppp协议的帧格式",children:[]},{level:4,title:"3.2.3 PPP协议的工作状态",slug:"_3-2-3-ppp协议的工作状态",children:[]}]},{level:3,title:"3.3 使用广播信道的数据链路层",slug:"_3-3-使用广播信道的数据链路层",children:[{level:4,title:"3.3.1 局域网的数据链路层",slug:"_3-3-1-局域网的数据链路层",children:[]},{level:4,title:"3.3.2 CSMA/CD协议",slug:"_3-3-2-csma-cd协议",children:[]},{level:4,title:"3.3.3 使用集线器的星型拓扑",slug:"_3-3-3-使用集线器的星型拓扑",children:[]},{level:4,title:"3.3.4 以太网的信道利用率",slug:"_3-3-4-以太网的信道利用率",children:[]},{level:4,title:"3.3.5 以太网的MAC层",slug:"_3-3-5-以太网的mac层",children:[]}]},{level:3,title:"3.4 扩展的以太网",slug:"_3-4-扩展的以太网",children:[{level:4,title:"3.4.1 在物理层扩展以太网",slug:"_3-4-1-在物理层扩展以太网",children:[]},{level:4,title:"3.4.2 在数据链路层扩展以太网",slug:"_3-4-2-在数据链路层扩展以太网",children:[]},{level:4,title:"3.4.3 虚拟局域网",slug:"_3-4-3-虚拟局域网",children:[]}]},{level:3,title:"3.5 高速以太网",slug:"_3-5-高速以太网",children:[{level:4,title:"3.5.1 100BASE-T以太网",slug:"_3-5-1-100base-t以太网",children:[]},{level:4,title:"3.5.2 吉比特以太网",slug:"_3-5-2-吉比特以太网",children:[]},{level:4,title:"3.5.3 10吉比特以太网(10GE)和更快的以太网",slug:"_3-5-3-10吉比特以太网-10ge-和更快的以太网",children:[]},{level:4,title:"3.5.4 使用以太网进行宽带接入",slug:"_3-5-4-使用以太网进行宽带接入",children:[]}]}]},{level:2,title:"第四章 网络层",slug:"第四章-网络层",children:[{level:3,title:"4.1 网络层提供的两种服务",slug:"_4-1-网络层提供的两种服务",children:[]},{level:3,title:"4.2 网际协议IP",slug:"_4-2-网际协议ip",children:[{level:4,title:"4.2.1 虚拟互连网络",slug:"_4-2-1-虚拟互连网络",children:[]},{level:4,title:"4.2.2 分类的IP地址",slug:"_4-2-2-分类的ip地址",children:[]},{level:4,title:"4.2.3 IP地址与硬件地址",slug:"_4-2-3-ip地址与硬件地址",children:[]},{level:4,title:"4.2.4 地址解析协议ARP",slug:"_4-2-4-地址解析协议arp",children:[]},{level:4,title:"4.2.5 IP数据报的格式",slug:"_4-2-5-ip数据报的格式",children:[]},{level:4,title:"4.2.6 IP层转发分组的流程",slug:"_4-2-6-ip层转发分组的流程",children:[]}]},{level:3,title:"4.3 划分子网和构造子网",slug:"_4-3-划分子网和构造子网",children:[{level:4,title:"4.3.1 划分子网",slug:"_4-3-1-划分子网",children:[]},{level:4,title:"4.3.2 使用子网时分组的转发",slug:"_4-3-2-使用子网时分组的转发",children:[]},{level:4,title:"4.3.3 无分类编址CIDR(构造超网)",slug:"_4-3-3-无分类编址cidr-构造超网",children:[]}]},{level:3,title:"4.4 网际控制报文协议ICMP",slug:"_4-4-网际控制报文协议icmp",children:[{level:4,title:"4.4.1 ICMP报文的种类",slug:"_4-4-1-icmp报文的种类",children:[]},{level:4,title:"4.4.2 ICMP的应用举例",slug:"_4-4-2-icmp的应用举例",children:[]}]},{level:3,title:"4.5 互联网的路由选择协议",slug:"_4-5-互联网的路由选择协议",children:[{level:4,title:"4.5.1 有关路由选择协议的几个基本概念",slug:"_4-5-1-有关路由选择协议的几个基本概念",children:[]},{level:4,title:"4.5.2 内部网关协议RIP",slug:"_4-5-2-内部网关协议rip",children:[]},{level:4,title:"4.5.3 内部网关协议OSPF",slug:"_4-5-3-内部网关协议ospf",children:[]},{level:4,title:"4.5.4 外部网关协议BGP",slug:"_4-5-4-外部网关协议bgp",children:[]},{level:4,title:"4.5.5 路由器的构成",slug:"_4-5-5-路由器的构成",children:[]}]},{level:3,title:"4.6 IPv6",slug:"_4-6-ipv6",children:[{level:4,title:"4.6.1 IPv6的基本首部",slug:"_4-6-1-ipv6的基本首部",children:[]},{level:4,title:"4.6.2 IPv6的地址",slug:"_4-6-2-ipv6的地址",children:[]},{level:4,title:"4.6.3 从IPv4向IPv6过渡",slug:"_4-6-3-从ipv4向ipv6过渡",children:[]},{level:4,title:"4.6.4 ICMPv6",slug:"_4-6-4-icmpv6",children:[]}]},{level:3,title:"4.7 IP多播 ✘",slug:"_4-7-ip多播-✘",children:[{level:4,title:"4.7.1 IP多播的基本概念",slug:"_4-7-1-ip多播的基本概念",children:[]},{level:4,title:"4.7.2 在局域网上进行硬件多播",slug:"_4-7-2-在局域网上进行硬件多播",children:[]},{level:4,title:"4.7.3 网际组管理协议IGMP和多播路由选择协议",slug:"_4-7-3-网际组管理协议igmp和多播路由选择协议",children:[]}]},{level:3,title:"4.8 虚拟局域网VPN和网络地址转换NAT",slug:"_4-8-虚拟局域网vpn和网络地址转换nat",children:[{level:4,title:"4.8.1 虚拟局域网VPN",slug:"_4-8-1-虚拟局域网vpn",children:[]},{level:4,title:"4.8.2 网络地址转换NAT",slug:"_4-8-2-网络地址转换nat",children:[]}]},{level:3,title:"4.9 多协议交换MPLS ✘",slug:"_4-9-多协议交换mpls-✘",children:[{level:4,title:"4.9.1 MPLS的工作原理",slug:"_4-9-1-mpls的工作原理",children:[]},{level:4,title:"4.9.2 MPLS首部的位置与格式",slug:"_4-9-2-mpls首部的位置与格式",children:[]}]}]},{level:2,title:"第五章 运输层",slug:"第五章-运输层",children:[{level:3,title:"5.1 运输层协议概述",slug:"_5-1-运输层协议概述",children:[{level:4,title:"5.1.1 进程之间的通信",slug:"_5-1-1-进程之间的通信",children:[]},{level:4,title:"5.1.2 运输层的两个主要协议",slug:"_5-1-2-运输层的两个主要协议",children:[]},{level:4,title:"5.1.3 运输层的端口",slug:"_5-1-3-运输层的端口",children:[]}]},{level:3,title:"5.2 用户数据报协议UDP",slug:"_5-2-用户数据报协议udp",children:[{level:4,title:"5.2.1 UDP概述",slug:"_5-2-1-udp概述",children:[]},{level:4,title:"5.2.2 UDP的首部格式",slug:"_5-2-2-udp的首部格式",children:[]}]},{level:3,title:"5.3 传输控制协议TCP概述",slug:"_5-3-传输控制协议tcp概述",children:[{level:4,title:"5.3.1 TCP最主要的特点",slug:"_5-3-1-tcp最主要的特点",children:[]},{level:4,title:"5.3.2 TCP的连接",slug:"_5-3-2-tcp的连接",children:[]}]},{level:3,title:"5.4 可靠传输的工作原理",slug:"_5-4-可靠传输的工作原理",children:[{level:4,title:"5.4.1 停止等待协议",slug:"_5-4-1-停止等待协议",children:[]},{level:4,title:"5.4.2 连续ARQ协议",slug:"_5-4-2-连续arq协议",children:[]}]},{level:3,title:"5.5 TCP报文段的首部格式",slug:"_5-5-tcp报文段的首部格式",children:[]},{level:3,title:"5.6 TCP可靠传输的实现",slug:"_5-6-tcp可靠传输的实现",children:[{level:4,title:"5.6.1 以字节为单位的滑动窗口",slug:"_5-6-1-以字节为单位的滑动窗口",children:[]},{level:4,title:"5.6.2 超时重传时间的选择",slug:"_5-6-2-超时重传时间的选择",children:[]},{level:4,title:"5.6.3 选择确认SACK",slug:"_5-6-3-选择确认sack",children:[]}]},{level:3,title:"5.7 TCP的流量控制",slug:"_5-7-tcp的流量控制",children:[{level:4,title:"5.7.1 利用滑动窗口实现流量控制",slug:"_5-7-1-利用滑动窗口实现流量控制",children:[]},{level:4,title:"5.7.2 TCP的传输效率",slug:"_5-7-2-tcp的传输效率",children:[]}]},{level:3,title:"5.8 TCP的拥塞机制",slug:"_5-8-tcp的拥塞机制",children:[{level:4,title:"5.8.1 拥塞机制的一般原理",slug:"_5-8-1-拥塞机制的一般原理",children:[]},{level:4,title:"5.8.2 TCP的拥塞控制办法",slug:"_5-8-2-tcp的拥塞控制办法",children:[]},{level:4,title:"5.8.3 主动队列管理AQM",slug:"_5-8-3-主动队列管理aqm",children:[]}]},{level:3,title:"5.9 TCP的运输连接管理",slug:"_5-9-tcp的运输连接管理",children:[{level:4,title:"5.9.1 TCP连接的建立",slug:"_5-9-1-tcp连接的建立",children:[]},{level:4,title:"5.9.2 TCP连接释放",slug:"_5-9-2-tcp连接释放",children:[]},{level:4,title:"5.9.3 TCP的有限状态机",slug:"_5-9-3-tcp的有限状态机",children:[]}]}]},{level:2,title:"第六章 应用层",slug:"第六章-应用层",children:[{level:3,title:"6.1 域名系统DNS",slug:"_6-1-域名系统dns",children:[{level:4,title:"6.1.1 域名系统概述",slug:"_6-1-1-域名系统概述",children:[]},{level:4,title:"6.1.2 互联网的域名系统",slug:"_6-1-2-互联网的域名系统",children:[]},{level:4,title:"6.1.3 域名服务器",slug:"_6-1-3-域名服务器",children:[]}]},{level:3,title:"6.2 文件传送协议",slug:"_6-2-文件传送协议",children:[{level:4,title:"6.2.1 FTP概述",slug:"_6-2-1-ftp概述",children:[]},{level:4,title:"6.2.2 FTP的基本工作原理",slug:"_6-2-2-ftp的基本工作原理",children:[]},{level:4,title:"6.2.3 简单文件传送协议TFTP",slug:"_6-2-3-简单文件传送协议tftp",children:[]}]},{level:3,title:"6.3 远程终端协议TELNET",slug:"_6-3-远程终端协议telnet",children:[]},{level:3,title:"6.4 万维网WWW",slug:"_6-4-万维网www",children:[{level:4,title:"6.4.1 万维网概述",slug:"_6-4-1-万维网概述",children:[]},{level:4,title:"6.4.2 统一资源定位符URL",slug:"_6-4-2-统一资源定位符url",children:[]},{level:4,title:"6.4.3 超文本传送协议HTTP",slug:"_6-4-3-超文本传送协议http",children:[]},{level:4,title:"6.4.4 万维网的文档",slug:"_6-4-4-万维网的文档",children:[]},{level:4,title:"6.4.5 万维网的信息检索系统",slug:"_6-4-5-万维网的信息检索系统",children:[]},{level:4,title:"6.4.6 博客和微博",slug:"_6-4-6-博客和微博",children:[]},{level:4,title:"6.4.7 社交网站",slug:"_6-4-7-社交网站",children:[]}]},{level:3,title:"6.5 电子邮件",slug:"_6-5-电子邮件",children:[{level:4,title:"6.5.1",slug:"_6-5-1",children:[]},{level:4,title:"6.5.2",slug:"_6-5-2",children:[]},{level:4,title:"6.5.3",slug:"_6-5-3",children:[]},{level:4,title:"6.5.4",slug:"_6-5-4",children:[]},{level:4,title:"6.5.5",slug:"_6-5-5",children:[]},{level:4,title:"6.5.6",slug:"_6-5-6",children:[]}]},{level:3,title:"6.6 动态主机配置协议DHCP",slug:"_6-6-动态主机配置协议dhcp",children:[]},{level:3,title:"6.7 简单网络管理协议SNMP",slug:"_6-7-简单网络管理协议snmp",children:[{level:4,title:"6.7.1",slug:"_6-7-1",children:[]},{level:4,title:"6.7.2",slug:"_6-7-2",children:[]},{level:4,title:"6.7.3",slug:"_6-7-3",children:[]},{level:4,title:"6.7.4",slug:"_6-7-4",children:[]}]},{level:3,title:"6.8 应用进程跨越网络的通信",slug:"_6-8-应用进程跨越网络的通信",children:[{level:4,title:"6.8.1",slug:"_6-8-1",children:[]},{level:4,title:"6.8.2",slug:"_6-8-2",children:[]}]},{level:3,title:"6.9 P2P应用",slug:"_6-9-p2p应用",children:[{level:4,title:"6.9.1",slug:"_6-9-1",children:[]},{level:4,title:"6.9.2",slug:"_6-9-2",children:[]},{level:4,title:"6.9.3",slug:"_6-9-3",children:[]},{level:4,title:"6.9.4",slug:"_6-9-4",children:[]}]}]},{level:2,title:"第七章 网络安全 ✘",slug:"第七章-网络安全-✘",children:[{level:3,title:"7.1",slug:"_7-1",children:[{level:4,title:"7.1.1",slug:"_7-1-1",children:[]},{level:4,title:"7.1.2",slug:"_7-1-2",children:[]},{level:4,title:"7.1.3",slug:"_7-1-3",children:[]}]},{level:3,title:"7.2",slug:"_7-2",children:[{level:4,title:"7.2.1",slug:"_7-2-1",children:[]},{level:4,title:"7.2.2",slug:"_7-2-2",children:[]}]},{level:3,title:"7.3",slug:"_7-3",children:[]},{level:3,title:"7.4",slug:"_7-4",children:[{level:4,title:"7.4.1",slug:"_7-4-1",children:[]},{level:4,title:"7.4.2",slug:"_7-4-2",children:[]}]},{level:3,title:"7.5",slug:"_7-5",children:[{level:4,title:"7.5.1",slug:"_7-5-1",children:[]},{level:4,title:"7.5.2",slug:"_7-5-2",children:[]}]},{level:3,title:"7.6",slug:"_7-6",children:[{level:4,title:"7.6.1",slug:"_7-6-1",children:[]},{level:4,title:"7.6.2",slug:"_7-6-2",children:[]},{level:4,title:"7.6.3",slug:"_7-6-3",children:[]},{level:4,title:"7.7",slug:"_7-7",children:[]},{level:4,title:"7.7.1",slug:"_7-7-1",children:[]},{level:4,title:"7.7.2",slug:"_7-7-2",children:[]}]},{level:3,title:"7.8",slug:"_7-8",children:[]}]},{level:2,title:"第八章 互联网上的音频/视频服务 ✘",slug:"第八章-互联网上的音频-视频服务-✘",children:[{level:3,title:"8.1",slug:"_8-1",children:[]},{level:3,title:"8.2",slug:"_8-2",children:[{level:4,title:"8.2.1",slug:"_8-2-1",children:[]},{level:4,title:"8.2.2",slug:"_8-2-2",children:[]},{level:4,title:"8.2.3",slug:"_8-2-3",children:[]}]},{level:3,title:"8.3",slug:"_8-3",children:[{level:4,title:"8.3.1",slug:"_8-3-1",children:[]},{level:4,title:"8.3.2",slug:"_8-3-2",children:[]},{level:4,title:"8.3.3",slug:"_8-3-3",children:[]},{level:4,title:"8.3.4",slug:"_8-3-4",children:[]},{level:4,title:"8.3.5",slug:"_8-3-5",children:[]},{level:4,title:"8.3.6",slug:"_8-3-6",children:[]}]},{level:3,title:"8.4",slug:"_8-4",children:[{level:4,title:"8.4.1",slug:"_8-4-1",children:[]},{level:4,title:"8.4.2",slug:"_8-4-2",children:[]},{level:4,title:"8.4.3",slug:"_8-4-3",children:[]},{level:4,title:"8.4.4",slug:"_8-4-4",children:[]}]}]},{level:2,title:"第九章 无线网络和移动网络",slug:"第九章-无线网络和移动网络",children:[{level:3,title:"9.1",slug:"_9-1",children:[{level:4,title:"9.1.1",slug:"_9-1-1",children:[]},{level:4,title:"9.1.2",slug:"_9-1-2",children:[]},{level:4,title:"9.1.3",slug:"_9-1-3",children:[]},{level:4,title:"9.1.4",slug:"_9-1-4",children:[]}]},{level:3,title:"9.2",slug:"_9-2",children:[]},{level:3,title:"9.3",slug:"_9-3",children:[]},{level:3,title:"9.4",slug:"_9-4",children:[{level:4,title:"9.4.1",slug:"_9-4-1",children:[]},{level:4,title:"9.4.2",slug:"_9-4-2",children:[]},{level:4,title:"9.4.3",slug:"_9-4-3",children:[]},{level:4,title:"9.4.4",slug:"_9-4-4",children:[]},{level:4,title:"9.4.5",slug:"_9-4-5",children:[]}]},{level:3,title:"9.5",slug:"_9-5",children:[]}]},{level:2,title:"二级标题",slug:"二级标题",children:[{level:3,title:"三级标题",slug:"三级标题",children:[{level:4,title:"四级标题",slug:"四级标题",children:[]}]}]}],filePathRelative:"computer-networks/README.md",git:{updatedTime:1638721446e3,contributors:[{name:"Coding Zhang",email:"2291200076@qq.com",commits:1}]}}},6440:(l,e,a)=>{a.r(e),a.d(e,{default:()=>gh});var _=a(6252),t=a(1670),i=a(7719),d=a(9042),r=a(4252),n=a(4696),h=a(4513),u=a(5810),s=a(6317);const c=(0,_._)("h1",{id:"计算机网络-学习笔记",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#计算机网络-学习笔记","aria-hidden":"true"},"#"),(0,_.Uk)(" 计算机网络 学习笔记")],-1),o=(0,_._)("blockquote",null,[(0,_._)("p",null,"参考书籍:计算机网络 第7版 谢希仁")],-1),k=(0,_._)("p",null,"📔📕📖📗📘📙📚📓📒★⭐🌟🌠",-1),U=(0,_.Uk)("回到正在整理的地方"),f={class:"custom-container details"},p=(0,_._)("summary",null,[(0,_._)("b",null,"目录"),(0,_.Uk)("(点击展开)")],-1),g={class:"table-of-contents"},m=(0,_.Uk)("第一章 概述"),b=(0,_.Uk)("1.1 计算机在信息时代中的作用"),x=(0,_.Uk)("1.2 互联网概述"),v=(0,_.Uk)("🌠1.2.1 网络的网络"),w=(0,_.Uk)("🌠1.2.2 互联网基础结构发展的三个阶段"),W=(0,_.Uk)("1.2.3 互联网的标准化工作"),P=(0,_.Uk)("🌠1.3互联网的形成"),T=(0,_.Uk)("🌠1.3.1 互联网的边缘部分"),C=(0,_.Uk)("🌠1.3.2 互联网的核心部分"),I=(0,_.Uk)("1.4 计算机网络在我国的发展"),A=(0,_.Uk)("1.5 计算机网络的类别"),N=(0,_.Uk)("1.5.1 计算机网络的定义"),M=(0,_.Uk)("🌠1.5.2 几种不同类别的计算机网络"),y=(0,_.Uk)("1.6 计算机网络的性能⭐"),E=(0,_.Uk)("1.6.1 计算机网络的性能指标"),S=(0,_.Uk)("1.6.2 计算机网络的非性能特征"),D=(0,_.Uk)("1.7 计算机网络体系结构⭐"),F=(0,_.Uk)("1.7.1 计算机网络体系结构的组成"),L=(0,_.Uk)("1.7.2 协议与划分层次"),R=(0,_.Uk)("1.7.3 具有五层协议的"),B=(0,_.Uk)("1.7.4 实体、协议、服务和服务访问点"),q=(0,_.Uk)("1.7.5 TCP/IP的体系结构"),G=(0,_.Uk)("第二章 物理层"),H=(0,_.Uk)("2.1 物理层的基本概念"),Q=(0,_.Uk)("2.2 数据通信的基础知识"),V=(0,_.Uk)("2.2.1 数据通信系统的概述"),Z=(0,_.Uk)("2.2.2 有关信道的几个基本概念"),O=(0,_.Uk)("2.2.3 信道的极限容量"),K=(0,_.Uk)("2.3 物理层下面的传输媒体"),Y=(0,_.Uk)("2.3.1 导引型传输媒体"),X=(0,_.Uk)("2.3.2 非导引型传输媒体"),z=(0,_.Uk)("2.4 信道复用技术"),j=(0,_.Uk)("2.4.1 频分复用、时分复用和统计时分复用"),J=(0,_.Uk)("2.4.2 波分复用"),$=(0,_.Uk)("2.4.3 码分复用"),ll=(0,_.Uk)("2.5 数字传输系统"),el=(0,_.Uk)("2.6 宽带接入技术"),al=(0,_.Uk)("2.6.1 ADSL技术"),_l=(0,_.Uk)("2.6.2 光纤同轴混合网(HFC网)"),tl=(0,_.Uk)("2.6.3 FTTx技术"),il=(0,_.Uk)("第三章 数据链路层"),dl=(0,_.Uk)("3.1 使用点对点信道的数据链路层"),rl=(0,_.Uk)("3.1.1 数据链路和帧"),nl=(0,_.Uk)("3.1.2 三个基本问题"),hl=(0,_.Uk)("3.2 点对点协议PPP"),ul=(0,_.Uk)("3.2.1 PPP协议的特点"),sl=(0,_.Uk)("3.2.2 PPP协议的帧格式"),cl=(0,_.Uk)("3.2.3 PPP协议的工作状态"),ol=(0,_.Uk)("3.3 使用广播信道的数据链路层"),kl=(0,_.Uk)("3.3.1 局域网的数据链路层"),Ul=(0,_.Uk)("3.3.2 CSMA/CD协议"),fl=(0,_.Uk)("3.3.3 使用集线器的星型拓扑"),pl=(0,_.Uk)("3.3.4 以太网的信道利用率"),gl=(0,_.Uk)("3.3.5 以太网的MAC层"),ml=(0,_.Uk)("3.4 扩展的以太网"),bl=(0,_.Uk)("3.4.1 在物理层扩展以太网"),xl=(0,_.Uk)("3.4.2 在数据链路层扩展以太网"),vl=(0,_.Uk)("3.4.3 虚拟局域网"),wl=(0,_.Uk)("3.5 高速以太网"),Wl=(0,_.Uk)("3.5.1 100BASE-T以太网"),Pl=(0,_.Uk)("3.5.2 吉比特以太网"),Tl=(0,_.Uk)("3.5.3 10吉比特以太网(10GE)和更快的以太网"),Cl=(0,_.Uk)("3.5.4 使用以太网进行宽带接入"),Il=(0,_.Uk)("第四章 网络层"),Al=(0,_.Uk)("4.1 网络层提供的两种服务"),Nl=(0,_.Uk)("4.2 网际协议IP"),Ml=(0,_.Uk)("4.2.1 虚拟互连网络"),yl=(0,_.Uk)("4.2.2 分类的IP地址"),El=(0,_.Uk)("4.2.3 IP地址与硬件地址"),Sl=(0,_.Uk)("4.2.4 地址解析协议ARP"),Dl=(0,_.Uk)("4.2.5 IP数据报的格式"),Fl=(0,_.Uk)("4.2.6 IP层转发分组的流程"),Ll=(0,_.Uk)("4.3 划分子网和构造子网"),Rl=(0,_.Uk)("4.3.1 划分子网"),Bl=(0,_.Uk)("4.3.2 使用子网时分组的转发"),ql=(0,_.Uk)("4.3.3 无分类编址CIDR(构造超网)"),Gl=(0,_.Uk)("4.4 网际控制报文协议ICMP"),Hl=(0,_.Uk)("4.4.1 ICMP报文的种类"),Ql=(0,_.Uk)("4.4.2 ICMP的应用举例"),Vl=(0,_.Uk)("4.5 互联网的路由选择协议"),Zl=(0,_.Uk)("4.5.1 有关路由选择协议的几个基本概念"),Ol=(0,_.Uk)("4.5.2 内部网关协议RIP"),Kl=(0,_.Uk)("4.5.3 内部网关协议OSPF"),Yl=(0,_.Uk)("4.5.4 外部网关协议BGP"),Xl=(0,_.Uk)("4.5.5 路由器的构成"),zl=(0,_.Uk)("4.6 IPv6"),jl=(0,_.Uk)("4.6.1 IPv6的基本首部"),Jl=(0,_.Uk)("4.6.2 IPv6的地址"),$l=(0,_.Uk)("4.6.3 从IPv4向IPv6过渡"),le=(0,_.Uk)("4.6.4 ICMPv6"),ee=(0,_.Uk)("4.7 IP多播 ✘"),ae=(0,_.Uk)("4.7.1 IP多播的基本概念"),_e=(0,_.Uk)("4.7.2 在局域网上进行硬件多播"),te=(0,_.Uk)("4.7.3 网际组管理协议IGMP和多播路由选择协议"),ie=(0,_.Uk)("4.8 虚拟局域网VPN和网络地址转换NAT"),de=(0,_.Uk)("4.8.1 虚拟局域网VPN"),re=(0,_.Uk)("4.8.2 网络地址转换NAT"),ne=(0,_.Uk)("4.9 多协议交换MPLS ✘"),he=(0,_.Uk)("4.9.1 MPLS的工作原理"),ue=(0,_.Uk)("4.9.2 MPLS首部的位置与格式"),se=(0,_.Uk)("第五章 运输层"),ce=(0,_.Uk)("5.1 运输层协议概述"),oe=(0,_.Uk)("5.1.1 进程之间的通信"),ke=(0,_.Uk)("5.1.2 运输层的两个主要协议"),Ue=(0,_.Uk)("5.1.3 运输层的端口"),fe=(0,_.Uk)("5.2 用户数据报协议UDP"),pe=(0,_.Uk)("5.2.1 UDP概述"),ge=(0,_.Uk)("5.2.2 UDP的首部格式"),me=(0,_.Uk)("5.3 传输控制协议TCP概述"),be=(0,_.Uk)("5.3.1 TCP最主要的特点"),xe=(0,_.Uk)("5.3.2 TCP的连接"),ve=(0,_.Uk)("5.4 可靠传输的工作原理"),we=(0,_.Uk)("5.4.1 停止等待协议"),We=(0,_.Uk)("5.4.2 连续ARQ协议"),Pe=(0,_.Uk)("5.5 TCP报文段的首部格式"),Te=(0,_.Uk)("5.6 TCP可靠传输的实现"),Ce=(0,_.Uk)("5.6.1 以字节为单位的滑动窗口"),Ie=(0,_.Uk)("5.6.2 超时重传时间的选择"),Ae=(0,_.Uk)("5.6.3 选择确认SACK"),Ne=(0,_.Uk)("5.7 TCP的流量控制"),Me=(0,_.Uk)("5.7.1 利用滑动窗口实现流量控制"),ye=(0,_.Uk)("5.7.2 TCP的传输效率"),Ee=(0,_.Uk)("5.8 TCP的拥塞机制"),Se=(0,_.Uk)("5.8.1 拥塞机制的一般原理"),De=(0,_.Uk)("5.8.2 TCP的拥塞控制办法"),Fe=(0,_.Uk)("5.8.3 主动队列管理AQM"),Le=(0,_.Uk)("5.9 TCP的运输连接管理"),Re=(0,_.Uk)("5.9.1 TCP连接的建立"),Be=(0,_.Uk)("5.9.2 TCP连接释放"),qe=(0,_.Uk)("5.9.3 TCP的有限状态机"),Ge=(0,_.Uk)("第六章 应用层"),He=(0,_.Uk)("6.1 域名系统DNS"),Qe=(0,_.Uk)("6.1.1 域名系统概述"),Ve=(0,_.Uk)("6.1.2 互联网的域名系统"),Ze=(0,_.Uk)("6.1.3 域名服务器"),Oe=(0,_.Uk)("6.2 文件传送协议"),Ke=(0,_.Uk)("6.2.1 FTP概述"),Ye=(0,_.Uk)("6.2.2 FTP的基本工作原理"),Xe=(0,_.Uk)("6.2.3 简单文件传送协议TFTP"),ze=(0,_.Uk)("6.3 远程终端协议TELNET"),je=(0,_.Uk)("6.4 万维网WWW"),Je=(0,_.Uk)("6.4.1 万维网概述"),$e=(0,_.Uk)("6.4.2 统一资源定位符URL"),la=(0,_.Uk)("6.4.3 超文本传送协议HTTP"),ea=(0,_.Uk)("6.4.4 万维网的文档"),aa=(0,_.Uk)("6.4.5 万维网的信息检索系统"),_a=(0,_.Uk)("6.4.6 博客和微博"),ta=(0,_.Uk)("6.4.7 社交网站"),ia=(0,_.Uk)("6.5 电子邮件"),da=(0,_.Uk)("6.5.1"),ra=(0,_.Uk)("6.5.2"),na=(0,_.Uk)("6.5.3"),ha=(0,_.Uk)("6.5.4"),ua=(0,_.Uk)("6.5.5"),sa=(0,_.Uk)("6.5.6"),ca=(0,_.Uk)("6.6 动态主机配置协议DHCP"),oa=(0,_.Uk)("6.7 简单网络管理协议SNMP"),ka=(0,_.Uk)("6.7.1"),Ua=(0,_.Uk)("6.7.2"),fa=(0,_.Uk)("6.7.3"),pa=(0,_.Uk)("6.7.4"),ga=(0,_.Uk)("6.8 应用进程跨越网络的通信"),ma=(0,_.Uk)("6.8.1"),ba=(0,_.Uk)("6.8.2"),xa=(0,_.Uk)("6.9 P2P应用"),va=(0,_.Uk)("6.9.1"),wa=(0,_.Uk)("6.9.2"),Wa=(0,_.Uk)("6.9.3"),Pa=(0,_.Uk)("6.9.4"),Ta=(0,_.Uk)("第七章 网络安全 ✘"),Ca=(0,_.Uk)("7.1"),Ia=(0,_.Uk)("7.1.1"),Aa=(0,_.Uk)("7.1.2"),Na=(0,_.Uk)("7.1.3"),Ma=(0,_.Uk)("7.2"),ya=(0,_.Uk)("7.2.1"),Ea=(0,_.Uk)("7.2.2"),Sa=(0,_.Uk)("7.3"),Da=(0,_.Uk)("7.4"),Fa=(0,_.Uk)("7.4.1"),La=(0,_.Uk)("7.4.2"),Ra=(0,_.Uk)("7.5"),Ba=(0,_.Uk)("7.5.1"),qa=(0,_.Uk)("7.5.2"),Ga=(0,_.Uk)("7.6"),Ha=(0,_.Uk)("7.6.1"),Qa=(0,_.Uk)("7.6.2"),Va=(0,_.Uk)("7.6.3"),Za=(0,_.Uk)("7.7"),Oa=(0,_.Uk)("7.7.1"),Ka=(0,_.Uk)("7.7.2"),Ya=(0,_.Uk)("7.8"),Xa=(0,_.Uk)("第八章 互联网上的音频/视频服务 ✘"),za=(0,_.Uk)("8.1"),ja=(0,_.Uk)("8.2"),Ja=(0,_.Uk)("8.2.1"),$a=(0,_.Uk)("8.2.2"),l_=(0,_.Uk)("8.2.3"),e_=(0,_.Uk)("8.3"),a_=(0,_.Uk)("8.3.1"),__=(0,_.Uk)("8.3.2"),t_=(0,_.Uk)("8.3.3"),i_=(0,_.Uk)("8.3.4"),d_=(0,_.Uk)("8.3.5"),r_=(0,_.Uk)("8.3.6"),n_=(0,_.Uk)("8.4"),h_=(0,_.Uk)("8.4.1"),u_=(0,_.Uk)("8.4.2"),s_=(0,_.Uk)("8.4.3"),c_=(0,_.Uk)("8.4.4"),o_=(0,_.Uk)("第九章 无线网络和移动网络"),k_=(0,_.Uk)("9.1"),U_=(0,_.Uk)("9.1.1"),f_=(0,_.Uk)("9.1.2"),p_=(0,_.Uk)("9.1.3"),g_=(0,_.Uk)("9.1.4"),m_=(0,_.Uk)("9.2"),b_=(0,_.Uk)("9.3"),x_=(0,_.Uk)("9.4"),v_=(0,_.Uk)("9.4.1"),w_=(0,_.Uk)("9.4.2"),W_=(0,_.Uk)("9.4.3"),P_=(0,_.Uk)("9.4.4"),T_=(0,_.Uk)("9.4.5"),C_=(0,_.Uk)("9.5"),I_=(0,_.Uk)("二级标题"),A_=(0,_.Uk)("三级标题"),N_=(0,_.Uk)("四级标题"),M_=(0,_._)("h2",{id:"第一章-概述",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第一章-概述","aria-hidden":"true"},"#"),(0,_.Uk)(" 第一章 概述")],-1),y_=(0,_._)("h3",{id:"_1-1-计算机在信息时代中的作用",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-1-计算机在信息时代中的作用","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.1 计算机在信息时代中的作用")],-1),E_=(0,_._)("h3",{id:"_1-2-互联网概述",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-2-互联网概述","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.2 互联网概述")],-1),S_=(0,_._)("h4",{id:"🌠1-2-1-网络的网络",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#🌠1-2-1-网络的网络","aria-hidden":"true"},"#"),(0,_.Uk)(" 🌠1.2.1 网络的网络")],-1),D_=(0,_._)("p",null,"📓4-5",-1),F_=(0,_._)("p",null,[(0,_._)("strong",null,"计算机网络"),(0,_.Uk)("由若干"),(0,_._)("strong",null,"结点"),(0,_.Uk)("和连接这些结点的"),(0,_._)("strong",null,"链路"),(0,_.Uk)("组成。")],-1),L_=(0,_._)("p",null,"结点:计算机、集线器、交换机、路由器等。",-1),R_=(0,_._)("p",null,"网络把许多计算机连接在一起,而互联网则把许多网络通过路由器连接在一起。与网络相连的计算机常称为主机。",-1),B_=(0,_._)("h4",{id:"🌠1-2-2-互联网基础结构发展的三个阶段",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#🌠1-2-2-互联网基础结构发展的三个阶段","aria-hidden":"true"},"#"),(0,_.Uk)(" 🌠1.2.2 互联网基础结构发展的三个阶段")],-1),q_=(0,_._)("p",null,"📓5",-1),G_=(0,_._)("h5",{id:"第一阶段-从单个网络arpanet向互联网发展。",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第一阶段-从单个网络arpanet向互联网发展。","aria-hidden":"true"},"#"),(0,_.Uk)(" 第一阶段:从单个网络ARPANET向互联网发展。")],-1),H_=(0,_._)("p",null,[(0,_._)("strong",null,"internet"),(0,_.Uk)(":互连网,通用名词,泛指由多个计算机网络互连而成的计算机网络。")],-1),Q_=(0,_._)("p",null,[(0,_._)("strong",null,"Internet"),(0,_.Uk)(":互联网、因特网,专用名词,指当前全球最大的、开放的、由众多网络相互连接而成的特定互连网,它采用TCP/IP协议族作为通信的规则,且其前身是美国的ARPANET。")],-1),V_=(0,_._)("h5",{id:"第二阶段-建成了三级结构互联网。",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第二阶段-建成了三级结构互联网。","aria-hidden":"true"},"#"),(0,_.Uk)(" 第二阶段:建成了三级结构互联网。")],-1),Z_=(0,_._)("p",null,"📓6",-1),O_=(0,_._)("p",null,"分为主干网、地区网、校园网(或企业网)",-1),K_=(0,_._)("h5",{id:"第三阶段-逐渐形成了多层次isp结构的互联网。",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第三阶段-逐渐形成了多层次isp结构的互联网。","aria-hidden":"true"},"#"),(0,_.Uk)(" 第三阶段:逐渐形成了多层次ISP结构的互联网。")],-1),Y_=(0,_._)("p",null,"📓6",-1),X_=(0,_._)("p",null,[(0,_._)("strong",null,"互联网服务提供者"),(0,_.Uk)("ISP(Internet Service Provider),常译为"),(0,_._)("strong",null,"互联网服务提供商"),(0,_.Uk)("。")],-1),z_=(0,_._)("p",null,[(0,_._)("strong",null,"互联网交换点"),(0,_.Uk)("IXP(Internet eXchange Point)")],-1),j_=(0,_._)("p",null,[(0,_._)("img",{src:t,alt:"1-3 基于ISP的多层结构的互联网的概念示意图"})],-1),J_=(0,_._)("h4",{id:"_1-2-3-互联网的标准化工作",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-2-3-互联网的标准化工作","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.2.3 互联网的标准化工作")],-1),$_=(0,_._)("p",null,"📓10",-1),lt=(0,_._)("p",null,[(0,_._)("strong",null,"边缘部分(资源子网)"),(0,_.Uk)(":由所连接在互联网上的主机组成。这部分是"),(0,_._)("strong",null,"用户直接使用的"),(0,_.Uk)(",用来进行通信(传送数据、音频或视频)和资源共享。")],-1),et=(0,_._)("p",null,[(0,_._)("strong",null,"核心部分(通信子网)"),(0,_.Uk)(":由大量网络和连接这些网络的路由器组成。这部分是"),(0,_._)("strong",null,"为边缘部分提供服务的"),(0,_.Uk)("(提供连通性和交换)。")],-1),at=(0,_._)("p",null,[(0,_._)("img",{src:i,alt:"图1-6_互联网的边缘部分与核心部分"})],-1),_t=(0,_._)("h3",{id:"🌠1-3互联网的形成",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#🌠1-3互联网的形成","aria-hidden":"true"},"#"),(0,_.Uk)(" 🌠1.3互联网的形成")],-1),tt=(0,_._)("h4",{id:"🌠1-3-1-互联网的边缘部分",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#🌠1-3-1-互联网的边缘部分","aria-hidden":"true"},"#"),(0,_.Uk)(" 🌠1.3.1 互联网的边缘部分")],-1),it=(0,_._)("p",null,"📓11-12",-1),dt=(0,_._)("p",null,[(0,_._)("strong",null,"主机A和主机B进行通信"),(0,_.Uk)("指"),(0,_._)("strong",null,"主机A的某个进程和主机B上的另一个进程进行通信"),(0,_.Uk)(",简称为"),(0,_._)("strong",null,"计算机之间的通信"),(0,_.Uk)("。")],-1),rt=(0,_._)("h5",{id:"_1-客户-服务器方式-c-s-client-server",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-客户-服务器方式-c-s-client-server","aria-hidden":"true"},"#"),(0,_.Uk)(" (1)客户-服务器方式(C/S) Client/Server")],-1),nt=(0,_._)("p",null,"客户是请求方,服务器是服务提供方。",-1),ht=(0,_._)("p",null,[(0,_._)("img",{src:d,alt:"图1-7_客户-服务器工作方式"})],-1),ut=(0,_._)("h5",{id:"_2-对等方式-p2p-peer-to-peer",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-对等方式-p2p-peer-to-peer","aria-hidden":"true"},"#"),(0,_.Uk)(" (2)对等方式(P2P) Peer-to-Peer")],-1),st=(0,_._)("p",null,"两台主机在通信时并不区分哪一个是服务请求方哪一个是服务提供方。",-1),ct=(0,_._)("p",null,[(0,_._)("img",{src:r,alt:"图1-8_对等连接工作方式(P2P方式)"})],-1),ot=(0,_._)("h4",{id:"🌠1-3-2-互联网的核心部分",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#🌠1-3-2-互联网的核心部分","aria-hidden":"true"},"#"),(0,_.Uk)(" 🌠1.3.2 互联网的核心部分")],-1),kt=(0,_._)("p",null,"📓12-17",-1),Ut=(0,_._)("p",null,[(0,_._)("strong",null,"路由器"),(0,_.Uk)(":分组交换,存储转发")],-1),ft=(0,_._)("h5",{id:"_1-电路交换-整个报文的比特流持续地从源点直达终点-好像在一个管道中传输",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-电路交换-整个报文的比特流持续地从源点直达终点-好像在一个管道中传输","aria-hidden":"true"},"#"),(0,_.Uk)(" (1)电路交换:整个报文的比特流持续地从源点直达终点,好像在一个管道中传输")],-1),pt=(0,_._)("p",null,"在通话的全部时间内,通话的两个用户始终占用端到端的通信资源。",-1),gt=(0,_._)("p",null,"线路的传输效率往往很低。",-1),mt=(0,_._)("p",null,[(0,_._)("img",{src:n,alt:"图1-9_电话机的不同连接方法"})],-1),bt=(0,_._)("p",null,[(0,_._)("img",{src:h,alt:"图1-10_电路交换的用户始终占用端到端的通信资源"})],-1),xt=(0,_._)("h5",{id:"_2-报文交换-整个报文先传送到相邻结点-全部存储下来之后查找转发表-转发到下一个结点。",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-报文交换-整个报文先传送到相邻结点-全部存储下来之后查找转发表-转发到下一个结点。","aria-hidden":"true"},"#"),(0,_.Uk)(" (2)报文交换:整个报文先传送到相邻结点,全部存储下来之后查找转发表,转发到下一个结点。")],-1),vt=(0,_._)("h5",{id:"_3-分组交换-单个分组-这只是整个报文的一部分-传达到相邻结点-存储下来后查找转发表-转发到下一个结点。",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-分组交换-单个分组-这只是整个报文的一部分-传达到相邻结点-存储下来后查找转发表-转发到下一个结点。","aria-hidden":"true"},"#"),(0,_.Uk)(" (3)分组交换:单个分组(这只是整个报文的一部分)传达到相邻结点,存储下来后查找转发表,转发到下一个结点。")],-1),wt=(0,_._)("p",null,[(0,_._)("img",{src:u,alt:"图1-11_以分组为基本单位在网络中传送"})],-1),Wt=(0,_._)("p",null,"分组交换",-1),Pt=(0,_._)("table",null,[(0,_._)("thead",null,[(0,_._)("tr",null,[(0,_._)("th",null,"优点"),(0,_._)("th",null,"所采用的手段")])]),(0,_._)("tbody",null,[(0,_._)("tr",null,[(0,_._)("td",null,"高效"),(0,_._)("td",null,"在传输分组的过程中动态分配传输带宽,对通信链路是逐段占用。")]),(0,_._)("tr",null,[(0,_._)("td",null,"灵活"),(0,_._)("td",null,"为每一个分组独立地选择最合适的转发路由。")]),(0,_._)("tr",null,[(0,_._)("td",null,"迅速"),(0,_._)("td",null,"以分组作为传送单位,可以不建立连接就能向其他主机发送分组。")]),(0,_._)("tr",null,[(0,_._)("td",null,"可靠"),(0,_._)("td",null,"保证可靠性的网络协议;分布式多路由的分组交换网,使网络有很好的生存性。")])])],-1),Tt=(0,_._)("p",null,[(0,_._)("img",{src:s,alt:"图1-13_三种交换的比较。电路交换;报文交换;分组交换,P1~P4表示4个分组"})],-1),Ct=(0,_._)("h3",{id:"_1-4-计算机网络在我国的发展",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-4-计算机网络在我国的发展","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.4 计算机网络在我国的发展")],-1),It=(0,_._)("h3",{id:"_1-5-计算机网络的类别",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-5-计算机网络的类别","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.5 计算机网络的类别")],-1),At=(0,_._)("h4",{id:"_1-5-1-计算机网络的定义",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-5-1-计算机网络的定义","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.5.1 计算机网络的定义")],-1),Nt=(0,_._)("h4",{id:"🌠1-5-2-几种不同类别的计算机网络",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#🌠1-5-2-几种不同类别的计算机网络","aria-hidden":"true"},"#"),(0,_.Uk)(" 🌠1.5.2 几种不同类别的计算机网络")],-1),Mt=(0,_._)("p",null,"📓20",-1),yt=(0,_._)("h5",{id:"按照网络的作用范围进行分类",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#按照网络的作用范围进行分类","aria-hidden":"true"},"#"),(0,_.Uk)(" 按照网络的作用范围进行分类")],-1),Et=(0,_._)("table",null,[(0,_._)("thead",null,[(0,_._)("tr",null,[(0,_._)("th",{style:{"text-align":"center"}},"中文"),(0,_._)("th",{style:{"text-align":"center"}},"简写"),(0,_._)("th",{style:{"text-align":"center"}},"英文")])]),(0,_._)("tbody",null,[(0,_._)("tr",null,[(0,_._)("td",{style:{"text-align":"center"}},"广域网"),(0,_._)("td",{style:{"text-align":"center"}},"WAN"),(0,_._)("td",{style:{"text-align":"center"}},"Wide Area Network")]),(0,_._)("tr",null,[(0,_._)("td",{style:{"text-align":"center"}},"城域网"),(0,_._)("td",{style:{"text-align":"center"}},"MAN"),(0,_._)("td",{style:{"text-align":"center"}},"Metropolitan Area Network")]),(0,_._)("tr",null,[(0,_._)("td",{style:{"text-align":"center"}},"局域网"),(0,_._)("td",{style:{"text-align":"center"}},"LAN"),(0,_._)("td",{style:{"text-align":"center"}},"Local Area Network")]),(0,_._)("tr",null,[(0,_._)("td",{style:{"text-align":"center"}},[(0,_.Uk)("个人局域网"),(0,_._)("br"),(0,_.Uk)("无线个人局域网")]),(0,_._)("td",{style:{"text-align":"center"}},[(0,_.Uk)("PAN"),(0,_._)("br"),(0,_.Uk)("WPAN")]),(0,_._)("td",{style:{"text-align":"center"}},[(0,_.Uk)("Personal Area Network"),(0,_._)("br"),(0,_.Uk)("Wireless PAN")])])])],-1),St=(0,_._)("h5",{id:"按照网络的使用者进行分类",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#按照网络的使用者进行分类","aria-hidden":"true"},"#"),(0,_.Uk)(" 按照网络的使用者进行分类")],-1),Dt=(0,_._)("table",null,[(0,_._)("thead",null,[(0,_._)("tr",null,[(0,_._)("th",{style:{"text-align":"center"}},"中文"),(0,_._)("th",{style:{"text-align":"center"}},"简写"),(0,_._)("th",{style:{"text-align":"center"}},"英文")])]),(0,_._)("tbody",null,[(0,_._)("tr",null,[(0,_._)("td",{style:{"text-align":"center"}},"广域网"),(0,_._)("td",{style:{"text-align":"center"}},"WAN"),(0,_._)("td",{style:{"text-align":"center"}},"Wide Area Network")]),(0,_._)("tr",null,[(0,_._)("td",{style:{"text-align":"center"}},"城域网"),(0,_._)("td",{style:{"text-align":"center"}},"MAN"),(0,_._)("td",{style:{"text-align":"center"}},"Metropolitan Area Network")]),(0,_._)("tr",null,[(0,_._)("td",{style:{"text-align":"center"}},"局域网"),(0,_._)("td",{style:{"text-align":"center"}},"LAN"),(0,_._)("td",{style:{"text-align":"center"}},"Local Area Network")]),(0,_._)("tr",null,[(0,_._)("td",{style:{"text-align":"center"}},[(0,_.Uk)("个人局域网"),(0,_._)("br"),(0,_.Uk)("无线个人局域网")]),(0,_._)("td",{style:{"text-align":"center"}},[(0,_.Uk)("PAN"),(0,_._)("br"),(0,_.Uk)("WPAN")]),(0,_._)("td",{style:{"text-align":"center"}},[(0,_.Uk)("Personal Area Network"),(0,_._)("br"),(0,_.Uk)("Wireless PAN")])])])],-1),Ft=(0,_._)("h3",{id:"_1-6-计算机网络的性能⭐",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-6-计算机网络的性能⭐","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.6 计算机网络的性能⭐")],-1),Lt=(0,_._)("h4",{id:"_1-6-1-计算机网络的性能指标",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-6-1-计算机网络的性能指标","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.6.1 计算机网络的性能指标")],-1),Rt=(0,_._)("p",null,"📓21-25",-1),Bt=(0,_._)("blockquote",null,[(0,_._)("p",null,[(0,_._)("strong",null,"比特"),(0,_.Uk)("(bit):binary digit,一个二进制数字。")]),(0,_._)("p",null,"换算:"),(0,_._)("table",null,[(0,_._)("thead",null,[(0,_._)("tr",null,[(0,_._)("th",null,"单位"),(0,_._)("th",null,"英文"),(0,_._)("th",null,"数量级"),(0,_._)("th",null,"中文")])]),(0,_._)("tbody",null,[(0,_._)("tr",null,[(0,_._)("td",null,"k"),(0,_._)("td",null,"kilo"),(0,_._)("td",null,[(0,_.Uk)("10"),(0,_._)("sup",null,"3")]),(0,_._)("td",null,"千")]),(0,_._)("tr",null,[(0,_._)("td",null,"M"),(0,_._)("td",null,"Mega"),(0,_._)("td",null,[(0,_.Uk)("10"),(0,_._)("sup",null,"6")]),(0,_._)("td",null,"兆")]),(0,_._)("tr",null,[(0,_._)("td",null,"G"),(0,_._)("td",null,"Giga"),(0,_._)("td",null,[(0,_.Uk)("10"),(0,_._)("sup",null,"9")]),(0,_._)("td",null,"吉")]),(0,_._)("tr",null,[(0,_._)("td",null,"T"),(0,_._)("td",null,"Tera"),(0,_._)("td",null,[(0,_.Uk)("10"),(0,_._)("sup",null,"12")]),(0,_._)("td",null,"太")]),(0,_._)("tr",null,[(0,_._)("td",null,"P"),(0,_._)("td",null,"Peta"),(0,_._)("td",null,[(0,_.Uk)("10"),(0,_._)("sup",null,"15")]),(0,_._)("td",null,"拍")]),(0,_._)("tr",null,[(0,_._)("td",null,"E"),(0,_._)("td",null,"Exa"),(0,_._)("td",null,[(0,_.Uk)("10"),(0,_._)("sup",null,"18")]),(0,_._)("td",null,"艾")]),(0,_._)("tr",null,[(0,_._)("td",null,"Z"),(0,_._)("td",null,"Zetta"),(0,_._)("td",null,[(0,_.Uk)("10"),(0,_._)("sup",null,"21")]),(0,_._)("td",null,"泽")]),(0,_._)("tr",null,[(0,_._)("td",null,"Y"),(0,_._)("td",null,"Yotta"),(0,_._)("td",null,[(0,_.Uk)("10"),(0,_._)("sup",null,"24")]),(0,_._)("td",null,"尧")])])])],-1),qt=(0,_._)("h5",{id:"_1-速率-数据率-data-rate-比特率-bit-rate",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-速率-数据率-data-rate-比特率-bit-rate","aria-hidden":"true"},"#"),(0,_.Uk)(" (1)速率(数据率(data rate),比特率(bit rate))")],-1),Gt=(0,_._)("p",null,"定义:数据的传送速率。",-1),Ht=(0,_._)("p",null,"单位:bit/s(比特每秒)",-1),Qt=(0,_._)("h5",{id:"_2-带宽",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-带宽","aria-hidden":"true"},"#"),(0,_.Uk)(" (2)带宽")],-1),Vt=(0,_._)("p",null,"两种意义",-1),Zt=(0,_._)("p",null,"(1)本指",-1),Ot=(0,_._)("p",null,"定义:信号具有的频带宽度。",-1),Kt=(0,_._)("p",null,"单位:赫(千赫、兆赫、吉赫等)",-1),Yt=(0,_._)("p",null,"(2)计算机网络中指 ✔(默认是这个意思)",-1),Xt=(0,_._)("p",null,"定义:网络中某通道传送数据的能力,网络表示在单位时间内网络中的某信道所能通过的“最高数据率”。",-1),zt=(0,_._)("p",null,"单位:bit/s(比特每秒)(带宽的单位就是数据率的单位)",-1),jt=(0,_._)("h5",{id:"_3-吞吐量",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-吞吐量","aria-hidden":"true"},"#"),(0,_.Uk)(" (3)吞吐量")],-1),Jt=(0,_._)("p",null,"定义:单位时间内通过某个网络(或信道、接口的实际数据量)",-1),$t=(0,_._)("p",null,"有时吞吐量还可用每秒传送的字节数或帧数来表示。",-1),li=(0,_._)("h5",{id:"_4-时延-延迟、迟延",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-时延-延迟、迟延","aria-hidden":"true"},"#"),(0,_.Uk)(" (4)时延(延迟、迟延)")],-1),ei=(0,_._)("p",null,"定义:数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。",-1),ai=(0,_._)("p",null,"由以下几部分组成",-1),_i=(0,_._)("ol",null,[(0,_._)("li",null,[(0,_._)("p",null,"发送时延:主机或路由器发送数据帧所需要的时间。"),(0,_._)("p",null,[(0,_.Uk)("计算公式:"),(0,_._)("img",{src:"https://math.now.sh?inline=%E5%8F%91%E9%80%81%E6%97%B6%E5%BB%B6%3D%7B%E6%95%B0%E6%8D%AE%E5%B8%A7%E9%95%BF%E5%BA%A6%28bit%29%7D%2F%7B%E5%8F%91%E9%80%81%E9%80%9F%E7%8E%87(bit%2Fs)%7D",style:{display:"inline-block",margin:"0"}})])]),(0,_._)("li")],-1),ti=(0,_._)("h5",{id:"_5",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5","aria-hidden":"true"},"#"),(0,_.Uk)(" (5)")],-1),ii=(0,_._)("h5",{id:"_6",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6","aria-hidden":"true"},"#"),(0,_.Uk)(" (6)")],-1),di=(0,_._)("h6",{id:"正在整理",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#正在整理","aria-hidden":"true"},"#"),(0,_.Uk)(" 正在整理......")],-1),ri=(0,_._)("h4",{id:"_1-6-2-计算机网络的非性能特征",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-6-2-计算机网络的非性能特征","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.6.2 计算机网络的非性能特征")],-1),ni=(0,_._)("h3",{id:"_1-7-计算机网络体系结构⭐",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-7-计算机网络体系结构⭐","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.7 计算机网络体系结构⭐")],-1),hi=(0,_._)("h4",{id:"_1-7-1-计算机网络体系结构的组成",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-7-1-计算机网络体系结构的组成","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.7.1 计算机网络体系结构的组成")],-1),ui=(0,_._)("h4",{id:"_1-7-2-协议与划分层次",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-7-2-协议与划分层次","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.7.2 协议与划分层次")],-1),si=(0,_._)("h4",{id:"_1-7-3-具有五层协议的",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-7-3-具有五层协议的","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.7.3 具有五层协议的")],-1),ci=(0,_._)("h4",{id:"_1-7-4-实体、协议、服务和服务访问点",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-7-4-实体、协议、服务和服务访问点","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.7.4 实体、协议、服务和服务访问点")],-1),oi=(0,_._)("h4",{id:"_1-7-5-tcp-ip的体系结构",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1-7-5-tcp-ip的体系结构","aria-hidden":"true"},"#"),(0,_.Uk)(" 1.7.5 TCP/IP的体系结构")],-1),ki=(0,_._)("h2",{id:"第二章-物理层",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第二章-物理层","aria-hidden":"true"},"#"),(0,_.Uk)(" 第二章 物理层")],-1),Ui=(0,_._)("h3",{id:"_2-1-物理层的基本概念",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-1-物理层的基本概念","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.1 物理层的基本概念")],-1),fi=(0,_._)("h3",{id:"_2-2-数据通信的基础知识",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-2-数据通信的基础知识","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.2 数据通信的基础知识")],-1),pi=(0,_._)("h4",{id:"_2-2-1-数据通信系统的概述",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-2-1-数据通信系统的概述","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.2.1 数据通信系统的概述")],-1),gi=(0,_._)("h4",{id:"_2-2-2-有关信道的几个基本概念",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-2-2-有关信道的几个基本概念","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.2.2 有关信道的几个基本概念")],-1),mi=(0,_._)("h4",{id:"_2-2-3-信道的极限容量",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-2-3-信道的极限容量","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.2.3 信道的极限容量")],-1),bi=(0,_._)("h3",{id:"_2-3-物理层下面的传输媒体",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-3-物理层下面的传输媒体","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.3 物理层下面的传输媒体")],-1),xi=(0,_._)("h4",{id:"_2-3-1-导引型传输媒体",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-3-1-导引型传输媒体","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.3.1 导引型传输媒体")],-1),vi=(0,_._)("h4",{id:"_2-3-2-非导引型传输媒体",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-3-2-非导引型传输媒体","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.3.2 非导引型传输媒体")],-1),wi=(0,_._)("h3",{id:"_2-4-信道复用技术",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-4-信道复用技术","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.4 信道复用技术")],-1),Wi=(0,_._)("h4",{id:"_2-4-1-频分复用、时分复用和统计时分复用",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-4-1-频分复用、时分复用和统计时分复用","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.4.1 频分复用、时分复用和统计时分复用")],-1),Pi=(0,_._)("h4",{id:"_2-4-2-波分复用",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-4-2-波分复用","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.4.2 波分复用")],-1),Ti=(0,_._)("h4",{id:"_2-4-3-码分复用",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-4-3-码分复用","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.4.3 码分复用")],-1),Ci=(0,_._)("h3",{id:"_2-5-数字传输系统",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-5-数字传输系统","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.5 数字传输系统")],-1),Ii=(0,_._)("h3",{id:"_2-6-宽带接入技术",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-6-宽带接入技术","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.6 宽带接入技术")],-1),Ai=(0,_._)("h4",{id:"_2-6-1-adsl技术",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-6-1-adsl技术","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.6.1 ADSL技术")],-1),Ni=(0,_._)("h4",{id:"_2-6-2-光纤同轴混合网-hfc网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-6-2-光纤同轴混合网-hfc网","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.6.2 光纤同轴混合网(HFC网)")],-1),Mi=(0,_._)("h4",{id:"_2-6-3-fttx技术",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2-6-3-fttx技术","aria-hidden":"true"},"#"),(0,_.Uk)(" 2.6.3 FTTx技术")],-1),yi=(0,_._)("h2",{id:"第三章-数据链路层",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第三章-数据链路层","aria-hidden":"true"},"#"),(0,_.Uk)(" 第三章 数据链路层")],-1),Ei=(0,_._)("h3",{id:"_3-1-使用点对点信道的数据链路层",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-1-使用点对点信道的数据链路层","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.1 使用点对点信道的数据链路层")],-1),Si=(0,_._)("h4",{id:"_3-1-1-数据链路和帧",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-1-1-数据链路和帧","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.1.1 数据链路和帧")],-1),Di=(0,_._)("h4",{id:"_3-1-2-三个基本问题",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-1-2-三个基本问题","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.1.2 三个基本问题")],-1),Fi=(0,_._)("h3",{id:"_3-2-点对点协议ppp",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-2-点对点协议ppp","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.2 点对点协议PPP")],-1),Li=(0,_._)("h4",{id:"_3-2-1-ppp协议的特点",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-2-1-ppp协议的特点","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.2.1 PPP协议的特点")],-1),Ri=(0,_._)("h4",{id:"_3-2-2-ppp协议的帧格式",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-2-2-ppp协议的帧格式","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.2.2 PPP协议的帧格式")],-1),Bi=(0,_._)("h4",{id:"_3-2-3-ppp协议的工作状态",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-2-3-ppp协议的工作状态","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.2.3 PPP协议的工作状态")],-1),qi=(0,_._)("h3",{id:"_3-3-使用广播信道的数据链路层",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-3-使用广播信道的数据链路层","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.3 使用广播信道的数据链路层")],-1),Gi=(0,_._)("blockquote",null,[(0,_._)("p",null,"广播信道以太网")],-1),Hi=(0,_._)("h4",{id:"_3-3-1-局域网的数据链路层",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-3-1-局域网的数据链路层","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.3.1 局域网的数据链路层")],-1),Qi=(0,_._)("h4",{id:"_3-3-2-csma-cd协议",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-3-2-csma-cd协议","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.3.2 CSMA/CD协议")],-1),Vi=(0,_._)("h4",{id:"_3-3-3-使用集线器的星型拓扑",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-3-3-使用集线器的星型拓扑","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.3.3 使用集线器的星型拓扑")],-1),Zi=(0,_._)("h4",{id:"_3-3-4-以太网的信道利用率",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-3-4-以太网的信道利用率","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.3.4 以太网的信道利用率")],-1),Oi=(0,_._)("h4",{id:"_3-3-5-以太网的mac层",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-3-5-以太网的mac层","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.3.5 以太网的MAC层")],-1),Ki=(0,_._)("h3",{id:"_3-4-扩展的以太网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-4-扩展的以太网","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.4 扩展的以太网")],-1),Yi=(0,_._)("blockquote",null,[(0,_._)("p",null,"交换型以太网")],-1),Xi=(0,_._)("h4",{id:"_3-4-1-在物理层扩展以太网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-4-1-在物理层扩展以太网","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.4.1 在物理层扩展以太网")],-1),zi=(0,_._)("h4",{id:"_3-4-2-在数据链路层扩展以太网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-4-2-在数据链路层扩展以太网","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.4.2 在数据链路层扩展以太网")],-1),ji=(0,_._)("h4",{id:"_3-4-3-虚拟局域网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-4-3-虚拟局域网","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.4.3 虚拟局域网")],-1),Ji=(0,_._)("h3",{id:"_3-5-高速以太网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-5-高速以太网","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.5 高速以太网")],-1),$i=(0,_._)("blockquote",null,[(0,_._)("p",null,"交换型以太网")],-1),ld=(0,_._)("h4",{id:"_3-5-1-100base-t以太网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-5-1-100base-t以太网","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.5.1 100BASE-T以太网")],-1),ed=(0,_._)("h4",{id:"_3-5-2-吉比特以太网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-5-2-吉比特以太网","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.5.2 吉比特以太网")],-1),ad=(0,_._)("h4",{id:"_3-5-3-10吉比特以太网-10ge-和更快的以太网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-5-3-10吉比特以太网-10ge-和更快的以太网","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.5.3 10吉比特以太网(10GE)和更快的以太网")],-1),_d=(0,_._)("h4",{id:"_3-5-4-使用以太网进行宽带接入",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3-5-4-使用以太网进行宽带接入","aria-hidden":"true"},"#"),(0,_.Uk)(" 3.5.4 使用以太网进行宽带接入")],-1),td=(0,_._)("h2",{id:"第四章-网络层",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第四章-网络层","aria-hidden":"true"},"#"),(0,_.Uk)(" 第四章 网络层")],-1),id=(0,_._)("h3",{id:"_4-1-网络层提供的两种服务",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-1-网络层提供的两种服务","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.1 网络层提供的两种服务")],-1),dd=(0,_._)("h3",{id:"_4-2-网际协议ip",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-2-网际协议ip","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.2 网际协议IP")],-1),rd=(0,_._)("h4",{id:"_4-2-1-虚拟互连网络",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-2-1-虚拟互连网络","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.2.1 虚拟互连网络")],-1),nd=(0,_._)("h4",{id:"_4-2-2-分类的ip地址",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-2-2-分类的ip地址","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.2.2 分类的IP地址")],-1),hd=(0,_._)("h4",{id:"_4-2-3-ip地址与硬件地址",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-2-3-ip地址与硬件地址","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.2.3 IP地址与硬件地址")],-1),ud=(0,_._)("h4",{id:"_4-2-4-地址解析协议arp",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-2-4-地址解析协议arp","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.2.4 地址解析协议ARP")],-1),sd=(0,_._)("h4",{id:"_4-2-5-ip数据报的格式",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-2-5-ip数据报的格式","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.2.5 IP数据报的格式")],-1),cd=(0,_._)("h4",{id:"_4-2-6-ip层转发分组的流程",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-2-6-ip层转发分组的流程","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.2.6 IP层转发分组的流程")],-1),od=(0,_._)("h3",{id:"_4-3-划分子网和构造子网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-3-划分子网和构造子网","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.3 划分子网和构造子网")],-1),kd=(0,_._)("h4",{id:"_4-3-1-划分子网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-3-1-划分子网","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.3.1 划分子网")],-1),Ud=(0,_._)("h4",{id:"_4-3-2-使用子网时分组的转发",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-3-2-使用子网时分组的转发","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.3.2 使用子网时分组的转发")],-1),fd=(0,_._)("h4",{id:"_4-3-3-无分类编址cidr-构造超网",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-3-3-无分类编址cidr-构造超网","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.3.3 无分类编址CIDR(构造超网)")],-1),pd=(0,_._)("h3",{id:"_4-4-网际控制报文协议icmp",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-4-网际控制报文协议icmp","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.4 网际控制报文协议ICMP")],-1),gd=(0,_._)("h4",{id:"_4-4-1-icmp报文的种类",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-4-1-icmp报文的种类","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.4.1 ICMP报文的种类")],-1),md=(0,_._)("h4",{id:"_4-4-2-icmp的应用举例",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-4-2-icmp的应用举例","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.4.2 ICMP的应用举例")],-1),bd=(0,_._)("h3",{id:"_4-5-互联网的路由选择协议",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-5-互联网的路由选择协议","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.5 互联网的路由选择协议")],-1),xd=(0,_._)("h4",{id:"_4-5-1-有关路由选择协议的几个基本概念",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-5-1-有关路由选择协议的几个基本概念","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.5.1 有关路由选择协议的几个基本概念")],-1),vd=(0,_._)("h4",{id:"_4-5-2-内部网关协议rip",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-5-2-内部网关协议rip","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.5.2 内部网关协议RIP")],-1),wd=(0,_._)("h4",{id:"_4-5-3-内部网关协议ospf",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-5-3-内部网关协议ospf","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.5.3 内部网关协议OSPF")],-1),Wd=(0,_._)("h4",{id:"_4-5-4-外部网关协议bgp",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-5-4-外部网关协议bgp","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.5.4 外部网关协议BGP")],-1),Pd=(0,_._)("h4",{id:"_4-5-5-路由器的构成",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-5-5-路由器的构成","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.5.5 路由器的构成")],-1),Td=(0,_._)("h3",{id:"_4-6-ipv6",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-6-ipv6","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.6 IPv6")],-1),Cd=(0,_._)("h4",{id:"_4-6-1-ipv6的基本首部",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-6-1-ipv6的基本首部","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.6.1 IPv6的基本首部")],-1),Id=(0,_._)("h4",{id:"_4-6-2-ipv6的地址",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-6-2-ipv6的地址","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.6.2 IPv6的地址")],-1),Ad=(0,_._)("h4",{id:"_4-6-3-从ipv4向ipv6过渡",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-6-3-从ipv4向ipv6过渡","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.6.3 从IPv4向IPv6过渡")],-1),Nd=(0,_._)("h4",{id:"_4-6-4-icmpv6",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-6-4-icmpv6","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.6.4 ICMPv6")],-1),Md=(0,_._)("h3",{id:"_4-7-ip多播-✘",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-7-ip多播-✘","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.7 IP多播 ✘")],-1),yd=(0,_._)("h4",{id:"_4-7-1-ip多播的基本概念",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-7-1-ip多播的基本概念","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.7.1 IP多播的基本概念")],-1),Ed=(0,_._)("h4",{id:"_4-7-2-在局域网上进行硬件多播",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-7-2-在局域网上进行硬件多播","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.7.2 在局域网上进行硬件多播")],-1),Sd=(0,_._)("h4",{id:"_4-7-3-网际组管理协议igmp和多播路由选择协议",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-7-3-网际组管理协议igmp和多播路由选择协议","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.7.3 网际组管理协议IGMP和多播路由选择协议")],-1),Dd=(0,_._)("h3",{id:"_4-8-虚拟局域网vpn和网络地址转换nat",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-8-虚拟局域网vpn和网络地址转换nat","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.8 虚拟局域网VPN和网络地址转换NAT")],-1),Fd=(0,_._)("h4",{id:"_4-8-1-虚拟局域网vpn",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-8-1-虚拟局域网vpn","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.8.1 虚拟局域网VPN")],-1),Ld=(0,_._)("h4",{id:"_4-8-2-网络地址转换nat",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-8-2-网络地址转换nat","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.8.2 网络地址转换NAT")],-1),Rd=(0,_._)("h3",{id:"_4-9-多协议交换mpls-✘",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-9-多协议交换mpls-✘","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.9 多协议交换MPLS ✘")],-1),Bd=(0,_._)("h4",{id:"_4-9-1-mpls的工作原理",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-9-1-mpls的工作原理","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.9.1 MPLS的工作原理")],-1),qd=(0,_._)("h4",{id:"_4-9-2-mpls首部的位置与格式",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4-9-2-mpls首部的位置与格式","aria-hidden":"true"},"#"),(0,_.Uk)(" 4.9.2 MPLS首部的位置与格式")],-1),Gd=(0,_._)("h2",{id:"第五章-运输层",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第五章-运输层","aria-hidden":"true"},"#"),(0,_.Uk)(" 第五章 运输层")],-1),Hd=(0,_._)("h3",{id:"_5-1-运输层协议概述",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-1-运输层协议概述","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.1 运输层协议概述")],-1),Qd=(0,_._)("h4",{id:"_5-1-1-进程之间的通信",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-1-1-进程之间的通信","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.1.1 进程之间的通信")],-1),Vd=(0,_._)("h4",{id:"_5-1-2-运输层的两个主要协议",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-1-2-运输层的两个主要协议","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.1.2 运输层的两个主要协议")],-1),Zd=(0,_._)("h4",{id:"_5-1-3-运输层的端口",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-1-3-运输层的端口","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.1.3 运输层的端口")],-1),Od=(0,_._)("h3",{id:"_5-2-用户数据报协议udp",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-2-用户数据报协议udp","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.2 用户数据报协议UDP")],-1),Kd=(0,_._)("h4",{id:"_5-2-1-udp概述",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-2-1-udp概述","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.2.1 UDP概述")],-1),Yd=(0,_._)("h4",{id:"_5-2-2-udp的首部格式",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-2-2-udp的首部格式","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.2.2 UDP的首部格式")],-1),Xd=(0,_._)("h3",{id:"_5-3-传输控制协议tcp概述",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-3-传输控制协议tcp概述","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.3 传输控制协议TCP概述")],-1),zd=(0,_._)("h4",{id:"_5-3-1-tcp最主要的特点",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-3-1-tcp最主要的特点","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.3.1 TCP最主要的特点")],-1),jd=(0,_._)("h4",{id:"_5-3-2-tcp的连接",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-3-2-tcp的连接","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.3.2 TCP的连接")],-1),Jd=(0,_._)("h3",{id:"_5-4-可靠传输的工作原理",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-4-可靠传输的工作原理","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.4 可靠传输的工作原理")],-1),$d=(0,_._)("h4",{id:"_5-4-1-停止等待协议",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-4-1-停止等待协议","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.4.1 停止等待协议")],-1),lr=(0,_._)("h4",{id:"_5-4-2-连续arq协议",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-4-2-连续arq协议","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.4.2 连续ARQ协议")],-1),er=(0,_._)("h3",{id:"_5-5-tcp报文段的首部格式",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-5-tcp报文段的首部格式","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.5 TCP报文段的首部格式")],-1),ar=(0,_._)("h3",{id:"_5-6-tcp可靠传输的实现",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-6-tcp可靠传输的实现","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.6 TCP可靠传输的实现")],-1),_r=(0,_._)("h4",{id:"_5-6-1-以字节为单位的滑动窗口",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-6-1-以字节为单位的滑动窗口","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.6.1 以字节为单位的滑动窗口")],-1),tr=(0,_._)("h4",{id:"_5-6-2-超时重传时间的选择",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-6-2-超时重传时间的选择","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.6.2 超时重传时间的选择")],-1),ir=(0,_._)("h4",{id:"_5-6-3-选择确认sack",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-6-3-选择确认sack","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.6.3 选择确认SACK")],-1),dr=(0,_._)("h3",{id:"_5-7-tcp的流量控制",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-7-tcp的流量控制","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.7 TCP的流量控制")],-1),rr=(0,_._)("h4",{id:"_5-7-1-利用滑动窗口实现流量控制",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-7-1-利用滑动窗口实现流量控制","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.7.1 利用滑动窗口实现流量控制")],-1),nr=(0,_._)("h4",{id:"_5-7-2-tcp的传输效率",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-7-2-tcp的传输效率","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.7.2 TCP的传输效率")],-1),hr=(0,_._)("h3",{id:"_5-8-tcp的拥塞机制",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-8-tcp的拥塞机制","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.8 TCP的拥塞机制")],-1),ur=(0,_._)("h4",{id:"_5-8-1-拥塞机制的一般原理",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-8-1-拥塞机制的一般原理","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.8.1 拥塞机制的一般原理")],-1),sr=(0,_._)("h4",{id:"_5-8-2-tcp的拥塞控制办法",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-8-2-tcp的拥塞控制办法","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.8.2 TCP的拥塞控制办法")],-1),cr=(0,_._)("h4",{id:"_5-8-3-主动队列管理aqm",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-8-3-主动队列管理aqm","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.8.3 主动队列管理AQM")],-1),or=(0,_._)("h3",{id:"_5-9-tcp的运输连接管理",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-9-tcp的运输连接管理","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.9 TCP的运输连接管理")],-1),kr=(0,_._)("h4",{id:"_5-9-1-tcp连接的建立",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-9-1-tcp连接的建立","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.9.1 TCP连接的建立")],-1),Ur=(0,_._)("h4",{id:"_5-9-2-tcp连接释放",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-9-2-tcp连接释放","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.9.2 TCP连接释放")],-1),fr=(0,_._)("h4",{id:"_5-9-3-tcp的有限状态机",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-9-3-tcp的有限状态机","aria-hidden":"true"},"#"),(0,_.Uk)(" 5.9.3 TCP的有限状态机")],-1),pr=(0,_._)("h2",{id:"第六章-应用层",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第六章-应用层","aria-hidden":"true"},"#"),(0,_.Uk)(" 第六章 应用层")],-1),gr=(0,_._)("h3",{id:"_6-1-域名系统dns",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-1-域名系统dns","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.1 域名系统DNS")],-1),mr=(0,_._)("h4",{id:"_6-1-1-域名系统概述",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-1-1-域名系统概述","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.1.1 域名系统概述")],-1),br=(0,_._)("h4",{id:"_6-1-2-互联网的域名系统",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-1-2-互联网的域名系统","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.1.2 互联网的域名系统")],-1),xr=(0,_._)("h4",{id:"_6-1-3-域名服务器",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-1-3-域名服务器","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.1.3 域名服务器")],-1),vr=(0,_._)("h3",{id:"_6-2-文件传送协议",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-2-文件传送协议","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.2 文件传送协议")],-1),wr=(0,_._)("h4",{id:"_6-2-1-ftp概述",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-2-1-ftp概述","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.2.1 FTP概述")],-1),Wr=(0,_._)("h4",{id:"_6-2-2-ftp的基本工作原理",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-2-2-ftp的基本工作原理","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.2.2 FTP的基本工作原理")],-1),Pr=(0,_._)("h4",{id:"_6-2-3-简单文件传送协议tftp",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-2-3-简单文件传送协议tftp","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.2.3 简单文件传送协议TFTP")],-1),Tr=(0,_._)("h3",{id:"_6-3-远程终端协议telnet",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-3-远程终端协议telnet","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.3 远程终端协议TELNET")],-1),Cr=(0,_._)("h3",{id:"_6-4-万维网www",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-4-万维网www","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.4 万维网WWW")],-1),Ir=(0,_._)("h4",{id:"_6-4-1-万维网概述",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-4-1-万维网概述","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.4.1 万维网概述")],-1),Ar=(0,_._)("h4",{id:"_6-4-2-统一资源定位符url",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-4-2-统一资源定位符url","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.4.2 统一资源定位符URL")],-1),Nr=(0,_._)("h4",{id:"_6-4-3-超文本传送协议http",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-4-3-超文本传送协议http","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.4.3 超文本传送协议HTTP")],-1),Mr=(0,_._)("h4",{id:"_6-4-4-万维网的文档",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-4-4-万维网的文档","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.4.4 万维网的文档")],-1),yr=(0,_._)("h4",{id:"_6-4-5-万维网的信息检索系统",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-4-5-万维网的信息检索系统","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.4.5 万维网的信息检索系统")],-1),Er=(0,_._)("h4",{id:"_6-4-6-博客和微博",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-4-6-博客和微博","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.4.6 博客和微博")],-1),Sr=(0,_._)("h4",{id:"_6-4-7-社交网站",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-4-7-社交网站","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.4.7 社交网站")],-1),Dr=(0,_._)("h3",{id:"_6-5-电子邮件",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-5-电子邮件","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.5 电子邮件")],-1),Fr=(0,_._)("h4",{id:"_6-5-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-5-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.5.1")],-1),Lr=(0,_._)("h4",{id:"_6-5-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-5-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.5.2")],-1),Rr=(0,_._)("h4",{id:"_6-5-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-5-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.5.3")],-1),Br=(0,_._)("h4",{id:"_6-5-4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-5-4","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.5.4")],-1),qr=(0,_._)("h4",{id:"_6-5-5",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-5-5","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.5.5")],-1),Gr=(0,_._)("h4",{id:"_6-5-6",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-5-6","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.5.6")],-1),Hr=(0,_._)("h3",{id:"_6-6-动态主机配置协议dhcp",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-6-动态主机配置协议dhcp","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.6 动态主机配置协议DHCP")],-1),Qr=(0,_._)("h3",{id:"_6-7-简单网络管理协议snmp",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-7-简单网络管理协议snmp","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.7 简单网络管理协议SNMP")],-1),Vr=(0,_._)("h4",{id:"_6-7-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-7-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.7.1")],-1),Zr=(0,_._)("h4",{id:"_6-7-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-7-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.7.2")],-1),Or=(0,_._)("h4",{id:"_6-7-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-7-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.7.3")],-1),Kr=(0,_._)("h4",{id:"_6-7-4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-7-4","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.7.4")],-1),Yr=(0,_._)("h3",{id:"_6-8-应用进程跨越网络的通信",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-8-应用进程跨越网络的通信","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.8 应用进程跨越网络的通信")],-1),Xr=(0,_._)("h4",{id:"_6-8-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-8-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.8.1")],-1),zr=(0,_._)("h4",{id:"_6-8-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-8-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.8.2")],-1),jr=(0,_._)("h3",{id:"_6-9-p2p应用",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-9-p2p应用","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.9 P2P应用")],-1),Jr=(0,_._)("h4",{id:"_6-9-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-9-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.9.1")],-1),$r=(0,_._)("h4",{id:"_6-9-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-9-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.9.2")],-1),ln=(0,_._)("h4",{id:"_6-9-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-9-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.9.3")],-1),en=(0,_._)("h4",{id:"_6-9-4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-9-4","aria-hidden":"true"},"#"),(0,_.Uk)(" 6.9.4")],-1),an=(0,_._)("h2",{id:"第七章-网络安全-✘",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第七章-网络安全-✘","aria-hidden":"true"},"#"),(0,_.Uk)(" 第七章 网络安全 ✘")],-1),_n=(0,_._)("h3",{id:"_7-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.1")],-1),tn=(0,_._)("h4",{id:"_7-1-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-1-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.1.1")],-1),dn=(0,_._)("h4",{id:"_7-1-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-1-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.1.2")],-1),rn=(0,_._)("h4",{id:"_7-1-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-1-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.1.3")],-1),nn=(0,_._)("h3",{id:"_7-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.2")],-1),hn=(0,_._)("h4",{id:"_7-2-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-2-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.2.1")],-1),un=(0,_._)("h4",{id:"_7-2-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-2-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.2.2")],-1),sn=(0,_._)("h3",{id:"_7-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.3")],-1),cn=(0,_._)("h3",{id:"_7-4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-4","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.4")],-1),on=(0,_._)("h4",{id:"_7-4-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-4-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.4.1")],-1),kn=(0,_._)("h4",{id:"_7-4-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-4-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.4.2")],-1),Un=(0,_._)("h3",{id:"_7-5",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-5","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.5")],-1),fn=(0,_._)("h4",{id:"_7-5-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-5-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.5.1")],-1),pn=(0,_._)("h4",{id:"_7-5-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-5-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.5.2")],-1),gn=(0,_._)("h3",{id:"_7-6",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-6","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.6")],-1),mn=(0,_._)("h4",{id:"_7-6-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-6-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.6.1")],-1),bn=(0,_._)("h4",{id:"_7-6-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-6-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.6.2")],-1),xn=(0,_._)("h4",{id:"_7-6-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-6-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.6.3")],-1),vn=(0,_._)("h4",{id:"_7-7",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-7","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.7")],-1),wn=(0,_._)("h4",{id:"_7-7-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-7-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.7.1")],-1),Wn=(0,_._)("h4",{id:"_7-7-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-7-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.7.2")],-1),Pn=(0,_._)("h3",{id:"_7-8",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_7-8","aria-hidden":"true"},"#"),(0,_.Uk)(" 7.8")],-1),Tn=(0,_._)("h2",{id:"第八章-互联网上的音频-视频服务-✘",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第八章-互联网上的音频-视频服务-✘","aria-hidden":"true"},"#"),(0,_.Uk)(" 第八章 互联网上的音频/视频服务 ✘")],-1),Cn=(0,_._)("h3",{id:"_8-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.1")],-1),In=(0,_._)("h3",{id:"_8-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.2")],-1),An=(0,_._)("h4",{id:"_8-2-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-2-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.2.1")],-1),Nn=(0,_._)("h4",{id:"_8-2-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-2-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.2.2")],-1),Mn=(0,_._)("h4",{id:"_8-2-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-2-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.2.3")],-1),yn=(0,_._)("h3",{id:"_8-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.3")],-1),En=(0,_._)("h4",{id:"_8-3-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-3-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.3.1")],-1),Sn=(0,_._)("h4",{id:"_8-3-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-3-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.3.2")],-1),Dn=(0,_._)("h4",{id:"_8-3-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-3-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.3.3")],-1),Fn=(0,_._)("h4",{id:"_8-3-4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-3-4","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.3.4")],-1),Ln=(0,_._)("h4",{id:"_8-3-5",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-3-5","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.3.5")],-1),Rn=(0,_._)("h4",{id:"_8-3-6",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-3-6","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.3.6")],-1),Bn=(0,_._)("h3",{id:"_8-4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-4","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.4")],-1),qn=(0,_._)("h4",{id:"_8-4-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-4-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.4.1")],-1),Gn=(0,_._)("h4",{id:"_8-4-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-4-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.4.2")],-1),Hn=(0,_._)("h4",{id:"_8-4-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-4-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.4.3")],-1),Qn=(0,_._)("h4",{id:"_8-4-4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_8-4-4","aria-hidden":"true"},"#"),(0,_.Uk)(" 8.4.4")],-1),Vn=(0,_._)("h2",{id:"第九章-无线网络和移动网络",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#第九章-无线网络和移动网络","aria-hidden":"true"},"#"),(0,_.Uk)(" 第九章 无线网络和移动网络")],-1),Zn=(0,_._)("h3",{id:"_9-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.1")],-1),On=(0,_._)("h4",{id:"_9-1-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-1-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.1.1")],-1),Kn=(0,_._)("h4",{id:"_9-1-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-1-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.1.2")],-1),Yn=(0,_._)("h4",{id:"_9-1-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-1-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.1.3")],-1),Xn=(0,_._)("h4",{id:"_9-1-4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-1-4","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.1.4")],-1),zn=(0,_._)("h3",{id:"_9-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.2")],-1),jn=(0,_._)("h3",{id:"_9-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.3")],-1),Jn=(0,_._)("h3",{id:"_9-4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-4","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.4")],-1),$n=(0,_._)("h4",{id:"_9-4-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-4-1","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.4.1")],-1),lh=(0,_._)("h4",{id:"_9-4-2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-4-2","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.4.2")],-1),eh=(0,_._)("h4",{id:"_9-4-3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-4-3","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.4.3")],-1),ah=(0,_._)("h4",{id:"_9-4-4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-4-4","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.4.4")],-1),_h=(0,_._)("h4",{id:"_9-4-5",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-4-5","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.4.5")],-1),th=(0,_._)("h3",{id:"_9-5",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_9-5","aria-hidden":"true"},"#"),(0,_.Uk)(" 9.5")],-1),ih=(0,_._)("h1",{id:"一级标题",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#一级标题","aria-hidden":"true"},"#"),(0,_.Uk)(" 一级标题")],-1),dh=(0,_._)("h2",{id:"二级标题",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#二级标题","aria-hidden":"true"},"#"),(0,_.Uk)(" 二级标题")],-1),rh=(0,_._)("h3",{id:"三级标题",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#三级标题","aria-hidden":"true"},"#"),(0,_.Uk)(" 三级标题")],-1),nh=(0,_._)("h4",{id:"四级标题",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#四级标题","aria-hidden":"true"},"#"),(0,_.Uk)(" 四级标题")],-1),hh=(0,_._)("h5",{id:"五级标题",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#五级标题","aria-hidden":"true"},"#"),(0,_.Uk)(" 五级标题")],-1),uh=(0,_._)("h6",{id:"六级标题",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#六级标题","aria-hidden":"true"},"#"),(0,_.Uk)(" 六级标题")],-1),sh=(0,_._)("h5",{id:"_1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_1","aria-hidden":"true"},"#"),(0,_.Uk)(" (1)")],-1),ch=(0,_._)("h5",{id:"_2",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_2","aria-hidden":"true"},"#"),(0,_.Uk)(" (2)")],-1),oh=(0,_._)("h5",{id:"_3",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_3","aria-hidden":"true"},"#"),(0,_.Uk)(" (3)")],-1),kh=(0,_._)("h5",{id:"_4",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_4","aria-hidden":"true"},"#"),(0,_.Uk)(" (4)")],-1),Uh=(0,_._)("h5",{id:"_5-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_5-1","aria-hidden":"true"},"#"),(0,_.Uk)(" (5)")],-1),fh=(0,_._)("h5",{id:"_6-1",tabindex:"-1"},[(0,_._)("a",{class:"header-anchor",href:"#_6-1","aria-hidden":"true"},"#"),(0,_.Uk)(" (6)")],-1),ph={},gh=(0,a(3744).Z)(ph,[["render",function(l,e){const a=(0,_.up)("RouterLink");return(0,_.wg)(),(0,_.iD)(_.HY,null,[c,o,k,(0,_._)("p",null,[(0,_.Wm)(a,{to:"/computer-networks/#%E6%AD%A3%E5%9C%A8%E6%95%B4%E7%90%86"},{default:(0,_.w5)((()=>[U])),_:1})]),(0,_._)("details",f,[p,(0,_._)("nav",g,[(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#第一章-概述"},{default:(0,_.w5)((()=>[m])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-1-计算机在信息时代中的作用"},{default:(0,_.w5)((()=>[b])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-2-互联网概述"},{default:(0,_.w5)((()=>[x])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#🌠1-2-1-网络的网络"},{default:(0,_.w5)((()=>[v])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#🌠1-2-2-互联网基础结构发展的三个阶段"},{default:(0,_.w5)((()=>[w])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-2-3-互联网的标准化工作"},{default:(0,_.w5)((()=>[W])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#🌠1-3互联网的形成"},{default:(0,_.w5)((()=>[P])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#🌠1-3-1-互联网的边缘部分"},{default:(0,_.w5)((()=>[T])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#🌠1-3-2-互联网的核心部分"},{default:(0,_.w5)((()=>[C])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-4-计算机网络在我国的发展"},{default:(0,_.w5)((()=>[I])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-5-计算机网络的类别"},{default:(0,_.w5)((()=>[A])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-5-1-计算机网络的定义"},{default:(0,_.w5)((()=>[N])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#🌠1-5-2-几种不同类别的计算机网络"},{default:(0,_.w5)((()=>[M])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-6-计算机网络的性能⭐"},{default:(0,_.w5)((()=>[y])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-6-1-计算机网络的性能指标"},{default:(0,_.w5)((()=>[E])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-6-2-计算机网络的非性能特征"},{default:(0,_.w5)((()=>[S])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-7-计算机网络体系结构⭐"},{default:(0,_.w5)((()=>[D])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-7-1-计算机网络体系结构的组成"},{default:(0,_.w5)((()=>[F])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-7-2-协议与划分层次"},{default:(0,_.w5)((()=>[L])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-7-3-具有五层协议的"},{default:(0,_.w5)((()=>[R])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-7-4-实体、协议、服务和服务访问点"},{default:(0,_.w5)((()=>[B])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_1-7-5-tcp-ip的体系结构"},{default:(0,_.w5)((()=>[q])),_:1})])])])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#第二章-物理层"},{default:(0,_.w5)((()=>[G])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-1-物理层的基本概念"},{default:(0,_.w5)((()=>[H])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-2-数据通信的基础知识"},{default:(0,_.w5)((()=>[Q])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-2-1-数据通信系统的概述"},{default:(0,_.w5)((()=>[V])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-2-2-有关信道的几个基本概念"},{default:(0,_.w5)((()=>[Z])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-2-3-信道的极限容量"},{default:(0,_.w5)((()=>[O])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-3-物理层下面的传输媒体"},{default:(0,_.w5)((()=>[K])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-3-1-导引型传输媒体"},{default:(0,_.w5)((()=>[Y])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-3-2-非导引型传输媒体"},{default:(0,_.w5)((()=>[X])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-4-信道复用技术"},{default:(0,_.w5)((()=>[z])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-4-1-频分复用、时分复用和统计时分复用"},{default:(0,_.w5)((()=>[j])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-4-2-波分复用"},{default:(0,_.w5)((()=>[J])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-4-3-码分复用"},{default:(0,_.w5)((()=>[$])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-5-数字传输系统"},{default:(0,_.w5)((()=>[ll])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-6-宽带接入技术"},{default:(0,_.w5)((()=>[el])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-6-1-adsl技术"},{default:(0,_.w5)((()=>[al])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-6-2-光纤同轴混合网-hfc网"},{default:(0,_.w5)((()=>[_l])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_2-6-3-fttx技术"},{default:(0,_.w5)((()=>[tl])),_:1})])])])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#第三章-数据链路层"},{default:(0,_.w5)((()=>[il])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-1-使用点对点信道的数据链路层"},{default:(0,_.w5)((()=>[dl])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-1-1-数据链路和帧"},{default:(0,_.w5)((()=>[rl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-1-2-三个基本问题"},{default:(0,_.w5)((()=>[nl])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-2-点对点协议ppp"},{default:(0,_.w5)((()=>[hl])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-2-1-ppp协议的特点"},{default:(0,_.w5)((()=>[ul])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-2-2-ppp协议的帧格式"},{default:(0,_.w5)((()=>[sl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-2-3-ppp协议的工作状态"},{default:(0,_.w5)((()=>[cl])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-3-使用广播信道的数据链路层"},{default:(0,_.w5)((()=>[ol])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-3-1-局域网的数据链路层"},{default:(0,_.w5)((()=>[kl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-3-2-csma-cd协议"},{default:(0,_.w5)((()=>[Ul])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-3-3-使用集线器的星型拓扑"},{default:(0,_.w5)((()=>[fl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-3-4-以太网的信道利用率"},{default:(0,_.w5)((()=>[pl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-3-5-以太网的mac层"},{default:(0,_.w5)((()=>[gl])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-4-扩展的以太网"},{default:(0,_.w5)((()=>[ml])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-4-1-在物理层扩展以太网"},{default:(0,_.w5)((()=>[bl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-4-2-在数据链路层扩展以太网"},{default:(0,_.w5)((()=>[xl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-4-3-虚拟局域网"},{default:(0,_.w5)((()=>[vl])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-5-高速以太网"},{default:(0,_.w5)((()=>[wl])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-5-1-100base-t以太网"},{default:(0,_.w5)((()=>[Wl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-5-2-吉比特以太网"},{default:(0,_.w5)((()=>[Pl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-5-3-10吉比特以太网-10ge-和更快的以太网"},{default:(0,_.w5)((()=>[Tl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_3-5-4-使用以太网进行宽带接入"},{default:(0,_.w5)((()=>[Cl])),_:1})])])])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#第四章-网络层"},{default:(0,_.w5)((()=>[Il])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-1-网络层提供的两种服务"},{default:(0,_.w5)((()=>[Al])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-2-网际协议ip"},{default:(0,_.w5)((()=>[Nl])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-2-1-虚拟互连网络"},{default:(0,_.w5)((()=>[Ml])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-2-2-分类的ip地址"},{default:(0,_.w5)((()=>[yl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-2-3-ip地址与硬件地址"},{default:(0,_.w5)((()=>[El])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-2-4-地址解析协议arp"},{default:(0,_.w5)((()=>[Sl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-2-5-ip数据报的格式"},{default:(0,_.w5)((()=>[Dl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-2-6-ip层转发分组的流程"},{default:(0,_.w5)((()=>[Fl])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-3-划分子网和构造子网"},{default:(0,_.w5)((()=>[Ll])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-3-1-划分子网"},{default:(0,_.w5)((()=>[Rl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-3-2-使用子网时分组的转发"},{default:(0,_.w5)((()=>[Bl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-3-3-无分类编址cidr-构造超网"},{default:(0,_.w5)((()=>[ql])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-4-网际控制报文协议icmp"},{default:(0,_.w5)((()=>[Gl])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-4-1-icmp报文的种类"},{default:(0,_.w5)((()=>[Hl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-4-2-icmp的应用举例"},{default:(0,_.w5)((()=>[Ql])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-5-互联网的路由选择协议"},{default:(0,_.w5)((()=>[Vl])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-5-1-有关路由选择协议的几个基本概念"},{default:(0,_.w5)((()=>[Zl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-5-2-内部网关协议rip"},{default:(0,_.w5)((()=>[Ol])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-5-3-内部网关协议ospf"},{default:(0,_.w5)((()=>[Kl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-5-4-外部网关协议bgp"},{default:(0,_.w5)((()=>[Yl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-5-5-路由器的构成"},{default:(0,_.w5)((()=>[Xl])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-6-ipv6"},{default:(0,_.w5)((()=>[zl])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-6-1-ipv6的基本首部"},{default:(0,_.w5)((()=>[jl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-6-2-ipv6的地址"},{default:(0,_.w5)((()=>[Jl])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-6-3-从ipv4向ipv6过渡"},{default:(0,_.w5)((()=>[$l])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-6-4-icmpv6"},{default:(0,_.w5)((()=>[le])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-7-ip多播-✘"},{default:(0,_.w5)((()=>[ee])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-7-1-ip多播的基本概念"},{default:(0,_.w5)((()=>[ae])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-7-2-在局域网上进行硬件多播"},{default:(0,_.w5)((()=>[_e])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-7-3-网际组管理协议igmp和多播路由选择协议"},{default:(0,_.w5)((()=>[te])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-8-虚拟局域网vpn和网络地址转换nat"},{default:(0,_.w5)((()=>[ie])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-8-1-虚拟局域网vpn"},{default:(0,_.w5)((()=>[de])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-8-2-网络地址转换nat"},{default:(0,_.w5)((()=>[re])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-9-多协议交换mpls-✘"},{default:(0,_.w5)((()=>[ne])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-9-1-mpls的工作原理"},{default:(0,_.w5)((()=>[he])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_4-9-2-mpls首部的位置与格式"},{default:(0,_.w5)((()=>[ue])),_:1})])])])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#第五章-运输层"},{default:(0,_.w5)((()=>[se])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-1-运输层协议概述"},{default:(0,_.w5)((()=>[ce])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-1-1-进程之间的通信"},{default:(0,_.w5)((()=>[oe])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-1-2-运输层的两个主要协议"},{default:(0,_.w5)((()=>[ke])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-1-3-运输层的端口"},{default:(0,_.w5)((()=>[Ue])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-2-用户数据报协议udp"},{default:(0,_.w5)((()=>[fe])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-2-1-udp概述"},{default:(0,_.w5)((()=>[pe])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-2-2-udp的首部格式"},{default:(0,_.w5)((()=>[ge])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-3-传输控制协议tcp概述"},{default:(0,_.w5)((()=>[me])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-3-1-tcp最主要的特点"},{default:(0,_.w5)((()=>[be])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-3-2-tcp的连接"},{default:(0,_.w5)((()=>[xe])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-4-可靠传输的工作原理"},{default:(0,_.w5)((()=>[ve])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-4-1-停止等待协议"},{default:(0,_.w5)((()=>[we])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-4-2-连续arq协议"},{default:(0,_.w5)((()=>[We])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-5-tcp报文段的首部格式"},{default:(0,_.w5)((()=>[Pe])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-6-tcp可靠传输的实现"},{default:(0,_.w5)((()=>[Te])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-6-1-以字节为单位的滑动窗口"},{default:(0,_.w5)((()=>[Ce])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-6-2-超时重传时间的选择"},{default:(0,_.w5)((()=>[Ie])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-6-3-选择确认sack"},{default:(0,_.w5)((()=>[Ae])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-7-tcp的流量控制"},{default:(0,_.w5)((()=>[Ne])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-7-1-利用滑动窗口实现流量控制"},{default:(0,_.w5)((()=>[Me])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-7-2-tcp的传输效率"},{default:(0,_.w5)((()=>[ye])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-8-tcp的拥塞机制"},{default:(0,_.w5)((()=>[Ee])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-8-1-拥塞机制的一般原理"},{default:(0,_.w5)((()=>[Se])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-8-2-tcp的拥塞控制办法"},{default:(0,_.w5)((()=>[De])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-8-3-主动队列管理aqm"},{default:(0,_.w5)((()=>[Fe])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-9-tcp的运输连接管理"},{default:(0,_.w5)((()=>[Le])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-9-1-tcp连接的建立"},{default:(0,_.w5)((()=>[Re])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-9-2-tcp连接释放"},{default:(0,_.w5)((()=>[Be])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_5-9-3-tcp的有限状态机"},{default:(0,_.w5)((()=>[qe])),_:1})])])])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#第六章-应用层"},{default:(0,_.w5)((()=>[Ge])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-1-域名系统dns"},{default:(0,_.w5)((()=>[He])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-1-1-域名系统概述"},{default:(0,_.w5)((()=>[Qe])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-1-2-互联网的域名系统"},{default:(0,_.w5)((()=>[Ve])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-1-3-域名服务器"},{default:(0,_.w5)((()=>[Ze])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-2-文件传送协议"},{default:(0,_.w5)((()=>[Oe])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-2-1-ftp概述"},{default:(0,_.w5)((()=>[Ke])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-2-2-ftp的基本工作原理"},{default:(0,_.w5)((()=>[Ye])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-2-3-简单文件传送协议tftp"},{default:(0,_.w5)((()=>[Xe])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-3-远程终端协议telnet"},{default:(0,_.w5)((()=>[ze])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-4-万维网www"},{default:(0,_.w5)((()=>[je])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-4-1-万维网概述"},{default:(0,_.w5)((()=>[Je])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-4-2-统一资源定位符url"},{default:(0,_.w5)((()=>[$e])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-4-3-超文本传送协议http"},{default:(0,_.w5)((()=>[la])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-4-4-万维网的文档"},{default:(0,_.w5)((()=>[ea])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-4-5-万维网的信息检索系统"},{default:(0,_.w5)((()=>[aa])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-4-6-博客和微博"},{default:(0,_.w5)((()=>[_a])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-4-7-社交网站"},{default:(0,_.w5)((()=>[ta])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-5-电子邮件"},{default:(0,_.w5)((()=>[ia])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-5-1"},{default:(0,_.w5)((()=>[da])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-5-2"},{default:(0,_.w5)((()=>[ra])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-5-3"},{default:(0,_.w5)((()=>[na])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-5-4"},{default:(0,_.w5)((()=>[ha])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-5-5"},{default:(0,_.w5)((()=>[ua])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-5-6"},{default:(0,_.w5)((()=>[sa])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-6-动态主机配置协议dhcp"},{default:(0,_.w5)((()=>[ca])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-7-简单网络管理协议snmp"},{default:(0,_.w5)((()=>[oa])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-7-1"},{default:(0,_.w5)((()=>[ka])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-7-2"},{default:(0,_.w5)((()=>[Ua])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-7-3"},{default:(0,_.w5)((()=>[fa])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-7-4"},{default:(0,_.w5)((()=>[pa])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-8-应用进程跨越网络的通信"},{default:(0,_.w5)((()=>[ga])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-8-1"},{default:(0,_.w5)((()=>[ma])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-8-2"},{default:(0,_.w5)((()=>[ba])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-9-p2p应用"},{default:(0,_.w5)((()=>[xa])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-9-1"},{default:(0,_.w5)((()=>[va])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-9-2"},{default:(0,_.w5)((()=>[wa])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-9-3"},{default:(0,_.w5)((()=>[Wa])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_6-9-4"},{default:(0,_.w5)((()=>[Pa])),_:1})])])])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#第七章-网络安全-✘"},{default:(0,_.w5)((()=>[Ta])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-1"},{default:(0,_.w5)((()=>[Ca])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-1-1"},{default:(0,_.w5)((()=>[Ia])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-1-2"},{default:(0,_.w5)((()=>[Aa])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-1-3"},{default:(0,_.w5)((()=>[Na])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-2"},{default:(0,_.w5)((()=>[Ma])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-2-1"},{default:(0,_.w5)((()=>[ya])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-2-2"},{default:(0,_.w5)((()=>[Ea])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-3"},{default:(0,_.w5)((()=>[Sa])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-4"},{default:(0,_.w5)((()=>[Da])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-4-1"},{default:(0,_.w5)((()=>[Fa])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-4-2"},{default:(0,_.w5)((()=>[La])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-5"},{default:(0,_.w5)((()=>[Ra])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-5-1"},{default:(0,_.w5)((()=>[Ba])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-5-2"},{default:(0,_.w5)((()=>[qa])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-6"},{default:(0,_.w5)((()=>[Ga])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-6-1"},{default:(0,_.w5)((()=>[Ha])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-6-2"},{default:(0,_.w5)((()=>[Qa])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-6-3"},{default:(0,_.w5)((()=>[Va])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-7"},{default:(0,_.w5)((()=>[Za])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-7-1"},{default:(0,_.w5)((()=>[Oa])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-7-2"},{default:(0,_.w5)((()=>[Ka])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_7-8"},{default:(0,_.w5)((()=>[Ya])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#第八章-互联网上的音频-视频服务-✘"},{default:(0,_.w5)((()=>[Xa])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-1"},{default:(0,_.w5)((()=>[za])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-2"},{default:(0,_.w5)((()=>[ja])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-2-1"},{default:(0,_.w5)((()=>[Ja])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-2-2"},{default:(0,_.w5)((()=>[$a])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-2-3"},{default:(0,_.w5)((()=>[l_])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-3"},{default:(0,_.w5)((()=>[e_])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-3-1"},{default:(0,_.w5)((()=>[a_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-3-2"},{default:(0,_.w5)((()=>[__])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-3-3"},{default:(0,_.w5)((()=>[t_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-3-4"},{default:(0,_.w5)((()=>[i_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-3-5"},{default:(0,_.w5)((()=>[d_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-3-6"},{default:(0,_.w5)((()=>[r_])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-4"},{default:(0,_.w5)((()=>[n_])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-4-1"},{default:(0,_.w5)((()=>[h_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-4-2"},{default:(0,_.w5)((()=>[u_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-4-3"},{default:(0,_.w5)((()=>[s_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_8-4-4"},{default:(0,_.w5)((()=>[c_])),_:1})])])])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#第九章-无线网络和移动网络"},{default:(0,_.w5)((()=>[o_])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-1"},{default:(0,_.w5)((()=>[k_])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-1-1"},{default:(0,_.w5)((()=>[U_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-1-2"},{default:(0,_.w5)((()=>[f_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-1-3"},{default:(0,_.w5)((()=>[p_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-1-4"},{default:(0,_.w5)((()=>[g_])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-2"},{default:(0,_.w5)((()=>[m_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-3"},{default:(0,_.w5)((()=>[b_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-4"},{default:(0,_.w5)((()=>[x_])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-4-1"},{default:(0,_.w5)((()=>[v_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-4-2"},{default:(0,_.w5)((()=>[w_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-4-3"},{default:(0,_.w5)((()=>[W_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-4-4"},{default:(0,_.w5)((()=>[P_])),_:1})]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-4-5"},{default:(0,_.w5)((()=>[T_])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#_9-5"},{default:(0,_.w5)((()=>[C_])),_:1})])])]),(0,_._)("li",null,[(0,_.Wm)(a,{to:"#二级标题"},{default:(0,_.w5)((()=>[I_])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#三级标题"},{default:(0,_.w5)((()=>[A_])),_:1}),(0,_._)("ul",null,[(0,_._)("li",null,[(0,_.Wm)(a,{to:"#四级标题"},{default:(0,_.w5)((()=>[N_])),_:1})])])])])])])])]),M_,y_,E_,S_,D_,F_,L_,R_,B_,q_,G_,H_,Q_,V_,Z_,O_,K_,Y_,X_,z_,j_,J_,$_,lt,et,at,_t,tt,it,dt,rt,nt,ht,ut,st,ct,ot,kt,Ut,ft,pt,gt,mt,bt,xt,vt,wt,Wt,Pt,Tt,Ct,It,At,Nt,Mt,yt,Et,St,Dt,Ft,Lt,Rt,Bt,qt,Gt,Ht,Qt,Vt,Zt,Ot,Kt,Yt,Xt,zt,jt,Jt,$t,li,ei,ai,_i,ti,ii,di,ri,ni,hi,ui,si,ci,oi,ki,Ui,fi,pi,gi,mi,bi,xi,vi,wi,Wi,Pi,Ti,Ci,Ii,Ai,Ni,Mi,yi,Ei,Si,Di,Fi,Li,Ri,Bi,qi,Gi,Hi,Qi,Vi,Zi,Oi,Ki,Yi,Xi,zi,ji,Ji,$i,ld,ed,ad,_d,td,id,dd,rd,nd,hd,ud,sd,cd,od,kd,Ud,fd,pd,gd,md,bd,xd,vd,wd,Wd,Pd,Td,Cd,Id,Ad,Nd,Md,yd,Ed,Sd,Dd,Fd,Ld,Rd,Bd,qd,Gd,Hd,Qd,Vd,Zd,Od,Kd,Yd,Xd,zd,jd,Jd,$d,lr,er,ar,_r,tr,ir,dr,rr,nr,hr,ur,sr,cr,or,kr,Ur,fr,pr,gr,mr,br,xr,vr,wr,Wr,Pr,Tr,Cr,Ir,Ar,Nr,Mr,yr,Er,Sr,Dr,Fr,Lr,Rr,Br,qr,Gr,Hr,Qr,Vr,Zr,Or,Kr,Yr,Xr,zr,jr,Jr,$r,ln,en,an,_n,tn,dn,rn,nn,hn,un,sn,cn,on,kn,Un,fn,pn,gn,mn,bn,xn,vn,wn,Wn,Pn,Tn,Cn,In,An,Nn,Mn,yn,En,Sn,Dn,Fn,Ln,Rn,Bn,qn,Gn,Hn,Qn,Vn,Zn,On,Kn,Yn,Xn,zn,jn,Jn,$n,lh,eh,ah,_h,th,ih,dh,rh,nh,hh,uh,sh,ch,oh,kh,Uh,fh],64)}]])},3744:(l,e)=>{e.Z=(l,e)=>{const a=l.__vccOpts||l;for(const[l,_]of e)a[l]=_;return a}},1670:(l,e,a)=>{l.exports=a.p+"assets/img/1-3_基于ISP的多层结构的互联网的概念示意图.91b2932e.svg"},4513:(l,e,a)=>{l.exports=a.p+"assets/img/图1-10_电路交换的用户始终占用端到端的通信资源.b8328caf.png"},5810:(l,e,a)=>{l.exports=a.p+"assets/img/图1-11_以分组为基本单位在网络中传送.9b952e52.png"},6317:(l,e,a)=>{l.exports=a.p+"assets/img/图1-13_三种交换的比较。电路交换;报文交换;分组交换,P1~P4表示4个分组.8e8a9640.png"},7719:(l,e,a)=>{l.exports=a.p+"assets/img/图1-6_互联网的边缘部分与核心部分.68ffbb7b.png"},9042:(l,e,a)=>{l.exports=a.p+"assets/img/图1-7_客户-服务器工作方式.35994256.png"},4252:(l,e,a)=>{l.exports=a.p+"assets/img/图1-8_对等连接工作方式(P2P方式).2b4fff05.png"},4696:(l,e,a)=>{l.exports=a.p+"assets/img/图1-9_电话机的不同连接方法.ec043257.png"}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/v-3706649a.859b00ff.js b/docs/.vuepress/dist/assets/js/v-3706649a.859b00ff.js new file mode 100644 index 0000000..9754557 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/v-3706649a.859b00ff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkvuepress=self.webpackChunkvuepress||[]).push([[88],{1801:(e,t,r)=>{r.r(t),r.d(t,{data:()=>n});const n={key:"v-3706649a",path:"/404.html",title:"",lang:"zh-CN",frontmatter:{layout:"404"},excerpt:"",headers:[],filePathRelative:null,git:{}}},8109:(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});const n={},s=(0,r(3744).Z)(n,[["render",function(e,t){return null}]])},3744:(e,t)=>{t.Z=(e,t)=>{const r=e.__vccOpts||e;for(const[e,n]of t)r[e]=n;return r}}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/v-45077b3a.d3add6dd.js b/docs/.vuepress/dist/assets/js/v-45077b3a.d3add6dd.js new file mode 100644 index 0000000..01515b1 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/v-45077b3a.d3add6dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkvuepress=self.webpackChunkvuepress||[]).push([[652],{4117:(e,l,n)=>{n.r(l),n.d(l,{data:()=>a});const a={key:"v-45077b3a",path:"/web-server/",title:"第一期学习活动",lang:"zh-CN",frontmatter:{sidebarDepth:2},excerpt:"",headers:[{level:2,title:"第1天",slug:"第1天",children:[{level:3,title:"任务:Web服务器基本工作原理学习",slug:"任务-web服务器基本工作原理学习",children:[]},{level:3,title:"作业",slug:"作业",children:[]}]},{level:2,title:"第2天",slug:"第2天",children:[{level:3,title:"任务:HTTP协议学习 & F12 & wireshark抓包",slug:"任务-http协议学习-f12-wireshark抓包",children:[]},{level:3,title:"作业",slug:"作业-1",children:[{level:4,title:"HTTP请求主要由哪几个部分组成?",slug:"http请求主要由哪几个部分组成",children:[]},{level:4,title:"HTTP响应主要由哪几部分组成?",slug:"http响应主要由哪几部分组成",children:[]},{level:4,title:"HTTP头部和数据如何组织在一起?",slug:"http头部和数据如何组织在一起",children:[]},{level:4,title:"Wireshark抓包",slug:"wireshark抓包",children:[]}]}]},{level:2,title:"第3天",slug:"第3天",children:[{level:3,title:"任务:套接字编程基础知识",slug:"任务-套接字编程基础知识",children:[]},{level:3,title:"作业",slug:"作业-2",children:[{level:4,title:"什么是套接字?",slug:"什么是套接字",children:[]},{level:4,title:"套接字有哪几个类型?",slug:"套接字有哪几个类型",children:[]},{level:4,title:"用套接字编写一个客户端和服务端,分别有哪几个步骤?",slug:"用套接字编写一个客户端和服务端-分别有哪几个步骤",children:[]}]}]},{level:2,title:"★ 第4天",slug:"★-第4天",children:[{level:3,title:"任务:编写一个TCP Client,发出一个简单的HTTP请求",slug:"任务-编写一个tcp-client-发出一个简单的http请求",children:[]},{level:3,title:"作业",slug:"作业-3",children:[]}]},{level:2,title:"★ 第5天",slug:"★-第5天",children:[{level:3,title:"任务:编写一个TCP Server,发出一个简单的HTTP响应",slug:"任务-编写一个tcp-server-发出一个简单的http响应",children:[]},{level:3,title:"作业",slug:"作业-4",children:[]}]},{level:2,title:"★ 第8天",slug:"★-第8天",children:[{level:3,title:"任务:改造TCP Server,发送一个HTML文件",slug:"任务-改造tcp-server-发送一个html文件",children:[]}]},{level:2,title:"★ 第9天",slug:"★-第9天",children:[{level:3,title:"任务:使用多线程",slug:"任务-使用多线程",children:[]},{level:3,title:"作业",slug:"作业-5",children:[]}]},{level:2,title:"第10天",slug:"第10天",children:[{level:3,title:"任务:设计并使用配置文件",slug:"任务-设计并使用配置文件",children:[]},{level:3,title:"作业",slug:"作业-6",children:[]},{level:3,title:"作业",slug:"作业-7",children:[]},{level:3,title:"作业",slug:"作业-8",children:[]},{level:3,title:"作业",slug:"作业-9",children:[]},{level:3,title:"作业",slug:"作业-10",children:[{level:4,title:"回答轩辕大佬的问题:",slug:"回答轩辕大佬的问题",children:[]},{level:4,title:"其他",slug:"其他",children:[]}]}]}],filePathRelative:"web-server/README.md",git:{updatedTime:1638721433e3,contributors:[{name:"Coding Zhang",email:"2291200076@qq.com",commits:1}]}}},740:(e,l,n)=>{n.r(l),n.d(l,{default:()=>ln});var a=n(6252),s=n(3806),r=n(8700),t=n(4777),i=n(2214),_=n(1319),u=n(897),c=n(9698);const h=(0,a._)("h1",{id:"第一期学习活动",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#第一期学习活动","aria-hidden":"true"},"#"),(0,a.Uk)(" 第一期学习活动")],-1),p=(0,a._)("h2",{id:"第1天",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#第1天","aria-hidden":"true"},"#"),(0,a.Uk)(" 第1天")],-1),o=(0,a._)("h3",{id:"任务-web服务器基本工作原理学习",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#任务-web服务器基本工作原理学习","aria-hidden":"true"},"#"),(0,a.Uk)(" 任务:Web服务器基本工作原理学习")],-1),d=(0,a._)("p",null,"学习资料: 1、https://www.cnblogs.com/BOHB-yunying/articles/10911192.html",-1),b=(0,a._)("p",null,"2、《Web工作原理》见附件",-1),m=(0,a._)("p",null,"作业:写一篇小短文,发布在星球,小短文中需要回答几个问题",-1),k=(0,a._)("p",null,"一个web服务器,最基本的由哪几个核心组件组成?",-1),g=(0,a._)("p",null,"讲述一下,web服务器从收到一个请求,到完成这个请求的响应,主要流程是什么?",-1),T=(0,a._)("p",null,"将自己理解的Web服务器工作原理,绘制一张图",-1),A=(0,a._)("p",null,[(0,a.Uk)("附件:"),(0,a._)("a",{href:"/web-server/files/day1-Web%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86.pdf"},"Web工作原理.pdf")],-1),f=(0,a._)("h3",{id:"作业",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),v=(0,a._)("p",null,"看了一下网上搜索出来的感觉大都很专业,我就说说我自己的看法叭",-1),w=(0,a._)("p",null,"web服务器组件我理解的是包含以下部分",-1),E=(0,a._)("ul",null,[(0,a._)("li",null,"配置文件、默认错误页面(像404, 500等错误页模板)"),(0,a._)("li",null,"日志记录模块"),(0,a._)("li",null,"端口监听模块"),(0,a._)("li",null,"业务处理模块"),(0,a._)("li",null,"请求响应模块"),(0,a._)("li",null,"扩展模块(如反向代理等)")],-1),U=(0,a._)("p",null,"web服务器主要完成以下几件事",-1),x=(0,a._)("ol",null,[(0,a._)("li",null,[(0,a._)("p",null,"监听到客户端发来的请求"),(0,a._)("p",null,"涉及到计算机网络结构方面的知识")]),(0,a._)("li",null,[(0,a._)("p",null,"处理请求"),(0,a._)("ol",null,[(0,a._)("li",null,[(0,a._)("p",null,"取得请求方法(GET, POST, PUT等),解析url,进行路由")]),(0,a._)("li",null,[(0,a._)("p",null,"通过路由知道客户端的请求"),(0,a._)("p",null,"分成静态、动态两类,静态资源直接返回给客户端就行了,动态资源需要去对应提供服务的业务取得(像php, java, asp.net等等)")])])]),(0,a._)("li",null,[(0,a._)("p",null,"将响应返回给用户 响应头中还包含一些扩展信息(像web服务器版本信息,MIME,缓存配置信息,静态资源还会有修改时间)")])],-1),P=(0,a._)("p",null,[(0,a._)("img",{src:s,alt:"Web服务器工作原理"})],-1),H=(0,a._)("h2",{id:"第2天",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#第2天","aria-hidden":"true"},"#"),(0,a.Uk)(" 第2天")],-1),W=(0,a._)("h3",{id:"任务-http协议学习-f12-wireshark抓包",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#任务-http协议学习-f12-wireshark抓包","aria-hidden":"true"},"#"),(0,a.Uk)(" 任务:HTTP协议学习 & F12 & wireshark抓包")],-1),C=(0,a._)("p",null,"学习资料: https://www.ruanyifeng.com/blog/2016/08/http.html",-1),D=(0,a._)("p",null,"https://zhuanlan.zhihu.com/p/77376952",-1),M=(0,a._)("p",null,"https://haokan.baidu.com/v?pd=wisenatural&vid=9883591515530208938",-1),R=(0,a._)("p",null,"作业:写一篇小短文,发布在星球,完成下面这些内容",-1),S=(0,a._)("ul",null,[(0,a._)("li",null,"HTTP请求主要由哪几个部分组成?"),(0,a._)("li",null,"HTTP响应主要由哪几部分组成?"),(0,a._)("li",null,"HTTP头部和数据如何组织在一起?"),(0,a._)("li",null,"这是世界上第一个网页: http://info.cern.ch/hypertext/WWW/TheProject.html")],-1),y=(0,a._)("p",null,"使用浏览器访问这个URL,并使用wireshark抓包,分析请求和响应。",-1),q=(0,a._)("p",null,"请求:Method、URI、HTTP版本、Headers",-1),N=(0,a._)("p",null,"响应:状态码、Headers、HTML内容",-1),F=(0,a._)("h3",{id:"作业-1",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业-1","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),L=(0,a._)("h4",{id:"http请求主要由哪几个部分组成",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#http请求主要由哪几个部分组成","aria-hidden":"true"},"#"),(0,a.Uk)(" HTTP请求主要由哪几个部分组成?")],-1),O=(0,a._)("p",null,[(0,a._)("strong",null,"请求报文")],-1),I=(0,a._)("ol",null,[(0,a._)("li",null,[(0,a._)("p",null,[(0,a._)("strong",null,"请求行"),(0,a.Uk)(":请求方法字段、URL字段和HTTP协议版本")]),(0,a._)("p",null,"例如:GET /index.html HTTP/1.1"),(0,a._)("p",null,"get方法将数据拼接在url后面,传递参数受限"),(0,a._)("p",null,"请求方法:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT")]),(0,a._)("li",null,[(0,a._)("p",null,[(0,a._)("strong",null,"请求头"),(0,a.Uk)("(key value形式)")]),(0,a._)("ul",null,[(0,a._)("li",null,[(0,a._)("p",null,"User-Agent:产生请求的浏览器类型。")]),(0,a._)("li",null,[(0,a._)("p",null,"Accept:客户端可识别的内容类型列表。")]),(0,a._)("li",null,[(0,a._)("p",null,"Host:主机地址")])])]),(0,a._)("li",null,[(0,a._)("p",null,[(0,a._)("strong",null,"请求数据")]),(0,a._)("p",null,"post方法中,会把数据以key value形式发送请求")]),(0,a._)("li",null,[(0,a._)("p",null,[(0,a._)("strong",null,"空行")]),(0,a._)("p",null,"发送回车符和换行符,通知服务器以下不再有请求头")])],-1),B=(0,a._)("h4",{id:"http响应主要由哪几部分组成",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#http响应主要由哪几部分组成","aria-hidden":"true"},"#"),(0,a.Uk)(" HTTP响应主要由哪几部分组成?")],-1),z=(0,a._)("p",null,[(0,a._)("strong",null,"响应报文")],-1),G=(0,a._)("ol",null,[(0,a._)("li",null,[(0,a._)("p",null,[(0,a._)("strong",null,"状态行")])]),(0,a._)("li",null,[(0,a._)("p",null,[(0,a._)("strong",null,"消息报头")])])],-1),K=(0,a._)("p",null,[(0,a._)("strong",null,"3. 响应正文")],-1),j=(0,a._)("h4",{id:"http头部和数据如何组织在一起",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#http头部和数据如何组织在一起","aria-hidden":"true"},"#"),(0,a.Uk)(" HTTP头部和数据如何组织在一起?")],-1),Q=(0,a._)("p",null,[(0,a._)("img",{src:r,alt:"HTTP请求报文"})],-1),X=(0,a._)("h4",{id:"wireshark抓包",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#wireshark抓包","aria-hidden":"true"},"#"),(0,a.Uk)(" Wireshark抓包")],-1),Y=(0,a._)("p",null,"首先打开Wireshark,访问:http://info.cern.ch/hypertext/WWW/TheProject.html",-1),Z=(0,a._)("p",null,[(0,a._)("img",{src:t,alt:""})],-1),V=(0,a._)("p",null,[(0,a.Uk)("使用Wireshark抓包(按照 "),(0,a._)("code",null,"ip.src == 188.184.21.108"),(0,a.Uk)(" 过滤,先 "),(0,a._)("code",null,"Ctrl+R"),(0,a.Uk)(" 清除记录一次)")],-1),J=(0,a._)("p",null,[(0,a._)("img",{src:i,alt:"day2-wireshark"})],-1),$=(0,a._)("p",null,[(0,a.Uk)("按 "),(0,a._)("code",null,"Ctrl+Alt+Shift+T"),(0,a.Uk)(" 追踪TCP流(右键 追踪流、TCP流)")],-1),ee=(0,a._)("p",null,[(0,a._)("img",{src:_,alt:"day2-trace-tcp-stream"})],-1),le=(0,a._)("div",{class:"language-text ext-text line-numbers-mode"},[(0,a._)("pre",{class:"language-text"},[(0,a._)("code",null,'GET /hypertext/WWW/TheProject.html HTTP/1.1\nHost: info.cern.ch\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\nAccept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\nAccept-Encoding: gzip, deflate\nConnection: keep-alive\nUpgrade-Insecure-Requests: 1\nPragma: no-cache\nCache-Control: no-cache\n\nHTTP/1.1 200 OK\nDate: Mon, 29 Nov 2021 12:28:56 GMT\nServer: Apache\nLast-Modified: Thu, 03 Dec 1992 08:37:20 GMT\nETag: "8a9-291e721905000"\nAccept-Ranges: bytes\nContent-Length: 2217\nConnection: close\nContent-Type: text/html\n\n
\nThe World Wide Web project\n\n
\n\n

World Wide Web

The WorldWideWeb (W3) is a wide-area\nhypermedia information retrieval\ninitiative aiming to give universal\naccess to a large universe of documents.

\nEverything there is online about\nW3 is linked directly or indirectly\nto this document, including an executive\nsummary of the project, Mailing lists\n, Policy , November\'s W3 news ,\nFrequently Asked Questions .\n

\n
What\'s out there?\n
Pointers to the\nworld\'s online information, subjects\n, W3 servers, etc.\n
Help\n
on the browser you are using\n
Software Products\n
A list of W3 project\ncomponents and their current state.\n(e.g. Line Mode ,X11 Viola , NeXTStep\n, Servers , Tools , Mail robot ,\nLibrary )\n
Technical\n
Details of protocols, formats,\nprogram internals etc\n
Bibliography\n
Paper documentation\non W3 and references.\n
People\n
A list of some people involved\nin the project.\n
History\n
A summary of the history\nof the project.\n
How can I help ?\n
If you would like\nto support the web..\n
Getting code\n
Getting the code by\nanonymous FTP , etc.\n
\n\n')]),(0,a._)("div",{class:"line-numbers"},[(0,a._)("span",{class:"line-number"},"1"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"2"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"3"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"4"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"5"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"6"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"7"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"8"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"9"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"10"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"11"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"12"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"13"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"14"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"15"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"16"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"17"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"18"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"19"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"20"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"21"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"22"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"23"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"24"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"25"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"26"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"27"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"28"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"29"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"30"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"31"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"32"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"33"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"34"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"35"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"36"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"37"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"38"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"39"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"40"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"41"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"42"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"43"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"44"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"45"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"46"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"47"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"48"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"49"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"50"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"51"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"52"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"53"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"54"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"55"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"56"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"57"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"58"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"59"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"60"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"61"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"62"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"63"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"64"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"65"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"66"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"67"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"68"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"69"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"70"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"71"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"72"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"73"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"74"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"75"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"76"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"77"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"78"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"79"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"80"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"81"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"82"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"83"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"84"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"85"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"86"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"87"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"88"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"89"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"90"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"91"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"92"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"93"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"94"),(0,a._)("br")])],-1),ne=(0,a._)("p",null,[(0,a._)("strong",null,"请求"),(0,a.Uk)(":")],-1),ae=(0,a._)("p",null,"Method:GET",-1),se=(0,a._)("p",null,"URI:/hypertext/WWW/TheProject.html",-1),re=(0,a._)("p",null,"HTTP版本:HTTP/1.1",-1),te=(0,a._)("p",null,"Headers:",-1),ie=(0,a._)("p",null,[(0,a.Uk)("Host: info.cern.ch User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,"),(0,a._)("em",null,"/"),(0,a.Uk)(";q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 Pragma: no-cache Cache-Control: no-cache")],-1),_e=(0,a._)("p",null,[(0,a._)("strong",null,"响应"),(0,a.Uk)(":")],-1),ue=(0,a._)("p",null,"状态码:HTTP/1.1 200 OK",-1),ce=(0,a._)("p",null,"Headers:",-1),he=(0,a._)("p",null,'Date: Mon, 29 Nov 2021 12:28:56 GMT Server: Apache Last-Modified: Thu, 03 Dec 1992 08:37:20 GMT ETag: "8a9-291e721905000" Accept-Ranges: bytes Content-Length: 2217 Connection: close Content-Type: text/html',-1),pe=(0,a._)("p",null,"HTML内容:",-1),oe=(0,a._)("p",null,"略",-1),de=(0,a._)("h2",{id:"第3天",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#第3天","aria-hidden":"true"},"#"),(0,a.Uk)(" 第3天")],-1),be=(0,a._)("h3",{id:"任务-套接字编程基础知识",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#任务-套接字编程基础知识","aria-hidden":"true"},"#"),(0,a.Uk)(" 任务:套接字编程基础知识")],-1),me=(0,a._)("p",null,"学习资料: 《网络编程》第六章(见附件)",-1),ke=(0,a._)("p",null,"https://www.jianshu.com/p/6ca1c102fc00",-1),ge=(0,a._)("p",null,"https://wenku.baidu.com/view/8d0f749881c758f5f71f6749.html",-1),Te=(0,a._)("p",null,"作业:写一篇小短文,发布在星球,回答几个问题",-1),Ae=(0,a._)("ul",null,[(0,a._)("li",null,"什么是套接字?"),(0,a._)("li",null,"套接字有哪几个类型?"),(0,a._)("li",null,"用套接字编写一个客户端和服务端,分别有哪几个步骤?")],-1),fe=(0,a._)("p",null,[(0,a.Uk)("附件:"),(0,a._)("a",{href:"/web-server/files/day3-Linux%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B.pdf"},"Linux网络编程.pdf")],-1),ve=(0,a._)("h3",{id:"作业-2",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业-2","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),we=(0,a._)("h4",{id:"什么是套接字",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#什么是套接字","aria-hidden":"true"},"#"),(0,a.Uk)(" 什么是套接字?")],-1),Ee=(0,a._)("p",null,"套接字(socket)为通信的端点,每个套接字由一个 IP 地址和一个端口号组成。通过网络通信的每对进程需要使用一对套接字,即每个进程各有一个。",-1),Ue=(0,a._)("h4",{id:"套接字有哪几个类型",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#套接字有哪几个类型","aria-hidden":"true"},"#"),(0,a.Uk)(" 套接字有哪几个类型?")],-1),xe=(0,a._)("p",null,"套接字的类型",-1),Pe=(0,a._)("p",null,"常用的TCP/IP协议的3种套接字类型如下所示。",-1),He=(0,a._)("p",null,"流套接字(SOCK_STREAM):",-1),We=(0,a._)("p",null,"流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。",-1),Ce=(0,a._)("p",null,"数据包套接字(SOCK_DGRAM):",-1),De=(0,a._)("p",null,"数据包套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据包套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。",-1),Me=(0,a._)("p",null,"原始套接字(SOCK_RAW):",-1),Re=(0,a._)("p",null,"原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。比如,我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包,或者接收TCP/IP栈不能够处理的IP包,也可以用来发送一些自定包头或自定协议的IP包。网络监听技术很大程度上依赖于SOCKET_RAW",-1),Se=(0,a._)("p",null,"原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据包套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。",-1),ye=(0,a._)("h4",{id:"用套接字编写一个客户端和服务端-分别有哪几个步骤",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#用套接字编写一个客户端和服务端-分别有哪几个步骤","aria-hidden":"true"},"#"),(0,a.Uk)(" 用套接字编写一个客户端和服务端,分别有哪几个步骤?")],-1),qe=(0,a._)("p",null,[(0,a._)("strong",null,"服务端"),(0,a.Uk)(":")],-1),Ne=(0,a._)("ol",null,[(0,a._)("li",null,"返回socket句柄"),(0,a._)("li",null,"设置套接字"),(0,a._)("li",null,"绑定端口,开始监听"),(0,a._)("li",null,"等待客户端连接")],-1),Fe=(0,a._)("p",null,[(0,a._)("strong",null,"客户端"),(0,a.Uk)(":")],-1),Le=(0,a._)("ol",null,[(0,a._)("li",null,"创建连接"),(0,a._)("li",null,"发送请求")],-1),Oe=(0,a._)("hr",null,null,-1),Ie=(0,a._)("p",null,"下面是网上找到的:",-1),Be=(0,a._)("p",null,[(0,a._)("strong",null,"服务器"),(0,a.Uk)(":")],-1),ze=(0,a._)("ol",null,[(0,a._)("li",null,[(0,a._)("p",null,"socketfd = socket(........); 返回一个socket文件句柄")]),(0,a._)("li",null,[(0,a._)("p",null,"设置套接字 setsockopt(socketfd , SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) // int on =1; SO_REUSEADDR表示可以重复使用一个端口")]),(0,a._)("li",null,[(0,a._)("p",null,[(0,a.Uk)("memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = ; (端口号) "),(0,a._)("em",null,"/ addr.sin_addr.s_addr = htonl(INADDR_ANY); /"),(0,a.Uk)(" 可以监听本地的所有的ip */")])]),(0,a._)("li",null,[(0,a._)("p",null,"bind(socketfd , (struct sockaddr*)&addr, sizeof(addr)) != 0 ) // 绑定端口和IP")]),(0,a._)("li",null,[(0,a._)("p",null,"listen(socketfd , 10) != 0 /* 启动监测数据,最多可以同时连接10个客服端 */")]),(0,a._)("li",null,[(0,a._)("p",null,[(0,a.Uk)("clientfd = accept(socketfd , (struct sockaddr "),(0,a._)("em",null,")&client_addr, &addr_len); /"),(0,a.Uk)(" 等待客服端的链接,如果有链接,则建立链接 返回一个客服端的clientfd 会堵塞*/")])])],-1),Ge=(0,a._)("p",null,[(0,a._)("strong",null,"客户端"),(0,a.Uk)(":")],-1),Ke=(0,a._)("ol",null,[(0,a._)("li",null,[(0,a._)("p",null,"iSocketClient = socket(AF_INET, SOCK_DGRAM, 0); // SOCK_DGRAM 表示UDP")]),(0,a._)("li",null,[(0,a._)("p",null,"tSocketServerAddr.sin_family = AF_INET; tSocketServerAddr.sin_port = htons(端口号); /* host to net, short */ //tSocketServerAddr.sin_addr.s_addr = INADDR_ANY;")]),(0,a._)("li",null,[(0,a._)("p",null,"iRet = connect(iSocketClient, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr)); // 连接")])],-1),je=(0,a._)("p",null,"参考:https://blog.csdn.net/lgz929974811/article/details/106006925",-1),Qe=(0,a._)("h2",{id:"★-第4天",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#★-第4天","aria-hidden":"true"},"#"),(0,a.Uk)(" ★ 第4天")],-1),Xe=(0,a._)("h3",{id:"任务-编写一个tcp-client-发出一个简单的http请求",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#任务-编写一个tcp-client-发出一个简单的http请求","aria-hidden":"true"},"#"),(0,a.Uk)(" 任务:编写一个TCP Client,发出一个简单的HTTP请求")],-1),Ye=(0,a._)("p",null,"学习资料:",-1),Ze=(0,a._)("li",null,"C/C++ socket编程:《网络编程》(见附件)",-1),Ve=(0,a.Uk)("Python socket编程:"),Je={href:"https://www.cnblogs.com/george92/p/9291394.html",target:"_blank",rel:"noopener noreferrer"},$e=(0,a.Uk)("https://www.cnblogs.com/george92/p/9291394.html"),el=(0,a.Uk)("Java socket编程:"),ll={href:"https://m.runoob.com/java/java-networking.html",target:"_blank",rel:"noopener noreferrer"},nl=(0,a.Uk)("https://m.runoob.com/java/java-networking.html"),al=(0,a._)("p",null,"作业:",-1),sl=(0,a._)("p",null,"编写一个TCP Client程序,向http://www.baidu.com发起一个GET请求,并把服务器返回的数据打印出来",-1),rl=(0,a._)("p",null,[(0,a.Uk)("附件:"),(0,a._)("a",{href:"/web-server/files/day3-Linux%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B.pdf"},"Linux网络编程.pdf")],-1),tl=(0,a._)("h3",{id:"作业-3",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业-3","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),il=(0,a._)("p",null,"面向连接的socket的工作流程👇",-1),_l=(0,a._)("p",null,[(0,a._)("img",{src:u,alt:"day4-the-workflow-of-connection-oriented-sockets"})],-1),ul=(0,a._)("p",null,"无连接的socket工作流程👇",-1),cl=(0,a._)("p",null,[(0,a._)("img",{src:u,alt:"day4-the-workflow-of-connection-oriented-sockets"})],-1),hl=(0,a._)("h2",{id:"★-第5天",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#★-第5天","aria-hidden":"true"},"#"),(0,a.Uk)(" ★ 第5天")],-1),pl=(0,a._)("h3",{id:"任务-编写一个tcp-server-发出一个简单的http响应",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#任务-编写一个tcp-server-发出一个简单的http响应","aria-hidden":"true"},"#"),(0,a.Uk)(" 任务:编写一个TCP Server,发出一个简单的HTTP响应")],-1),ol=(0,a._)("p",null,"学习资料:同昨天相同",-1),dl=(0,a._)("p",null,"作业:",-1),bl=(0,a._)("p",null,"编写一个TCP Server程序,当收到客户发来GET请求时(先不用管请求的具体是什么),都返回一个网页,网页的内容如下:",-1),ml=(0,a._)("div",{class:"language-html ext-html line-numbers-mode"},[(0,a._)("pre",{class:"language-html"},[(0,a._)("code",null,[(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token punctuation"},"<"),(0,a.Uk)("html")]),(0,a._)("span",{class:"token punctuation"},">")]),(0,a.Uk)("\n "),(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token punctuation"},"<"),(0,a.Uk)("body")]),(0,a._)("span",{class:"token punctuation"},">")]),(0,a.Uk)("\n "),(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token punctuation"},"<"),(0,a.Uk)("h1")]),(0,a._)("span",{class:"token punctuation"},">")]),(0,a.Uk)("这是我的第一个网页!"),(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token punctuation"},"")]),(0,a.Uk)("\n "),(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token punctuation"},"")]),(0,a.Uk)("\n"),(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token tag"},[(0,a._)("span",{class:"token punctuation"},"")]),(0,a.Uk)("\n")])]),(0,a._)("div",{class:"line-numbers"},[(0,a._)("span",{class:"line-number"},"1"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"2"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"3"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"4"),(0,a._)("br"),(0,a._)("span",{class:"line-number"},"5"),(0,a._)("br")])],-1),kl=(0,a._)("p",null,"使用浏览器去访问自己写的这个TCP Server,截图展示访问效果",-1),gl=(0,a._)("p",null,"然后使用前一天自己编写的TCP Client去请求这个Server,通过Client将这个网页内容打印出来!",-1),Tl=(0,a._)("h3",{id:"作业-4",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业-4","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),Al=(0,a._)("h2",{id:"★-第8天",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#★-第8天","aria-hidden":"true"},"#"),(0,a.Uk)(" ★ 第8天")],-1),fl=(0,a._)("h3",{id:"任务-改造tcp-server-发送一个html文件",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#任务-改造tcp-server-发送一个html文件","aria-hidden":"true"},"#"),(0,a.Uk)(" 任务:改造TCP Server,发送一个HTML文件")],-1),vl=(0,a._)("p",null,"学习资料:同任务4 作业:今天的任务只有一个改动,就是将第五天任务中的TCP Server返回的那个网页内容,改为从文件中加载,而不是固定写死在代码中。",-1),wl=(0,a._)("h2",{id:"★-第9天",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#★-第9天","aria-hidden":"true"},"#"),(0,a.Uk)(" ★ 第9天")],-1),El=(0,a._)("h3",{id:"任务-使用多线程",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#任务-使用多线程","aria-hidden":"true"},"#"),(0,a.Uk)(" 任务:使用多线程")],-1),Ul=(0,a._)("p",null,"学习资料:同任务4 作业: 在原来TCP Server基础上进行改造:当服务器收到连接请求时,启动一个单独的线程进行处理。并且不要关闭连接,继续监听这个客户端后续的请求。",-1),xl=(0,a._)("p",null,[(0,a.Uk)("附件:"),(0,a._)("a",{href:"/web-server/files/day3-Linux%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B.pdf"},"Linux网络编程.pdf")],-1),Pl=(0,a._)("h3",{id:"作业-5",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业-5","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),Hl=(0,a._)("h2",{id:"第10天",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#第10天","aria-hidden":"true"},"#"),(0,a.Uk)(" 第10天")],-1),Wl=(0,a._)("h3",{id:"任务-设计并使用配置文件",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#任务-设计并使用配置文件","aria-hidden":"true"},"#"),(0,a.Uk)(" 任务:设计并使用配置文件")],-1),Cl=(0,a._)("p",null,"学习资料:无 作业: Web服务器一般会拥有多个参数,将服务器绑定的IP、端口、HTML文件所在的目录,写在配置文件中,程序启动的时候进行加载。",-1),Dl=(0,a._)("p",null,"需要自己设计自己的Web服务器的文件格式,可以参考JSON、XML、YML等格式",-1),Ml=(0,a._)("h3",{id:"作业-6",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业-6","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),Rl=(0,a._)("iframe",{src:"/web-server/files/day10-conf.json"},null,-1),Sl=(0,a._)("p",null,[(0,a._)("img",{src:c,alt:"day10-conf-image"})],-1),yl=(0,a._)("h3",{id:"作业-7",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业-7","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),ql=(0,a._)("h3",{id:"作业-8",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业-8","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),Nl=(0,a._)("h3",{id:"作业-9",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业-9","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),Fl=(0,a._)("h3",{id:"作业-10",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#作业-10","aria-hidden":"true"},"#"),(0,a.Uk)(" 作业")],-1),Ll=(0,a._)("hr",null,null,-1),Ol=(0,a._)("p",null,"11.29 11:01 其他人的作业",-1),Il=(0,a._)("h1",{id:"笔记",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#笔记","aria-hidden":"true"},"#"),(0,a.Uk)(" 笔记")],-1),Bl=(0,a._)("h4",{id:"回答轩辕大佬的问题",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#回答轩辕大佬的问题","aria-hidden":"true"},"#"),(0,a.Uk)(" 回答轩辕大佬的问题:")],-1),zl=(0,a._)("h5",{id:"_1-web服务器-约等于-http服务器-其他服务",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#_1-web服务器-约等于-http服务器-其他服务","aria-hidden":"true"},"#"),(0,a.Uk)(" 1.Web服务器 约等于 HTTP服务器 + 其他服务")],-1),Gl=(0,a._)("p",null,"(先不去管它这些操作具体的名称,单纯记录他的操作,后面再补) 包含:拿到数据包之后解包的东西、解析客户端的意图的东西、进行分类处理,或是提供某种文件、或是处理数据的东西、将结果装入缓冲区的东西、将以HTTP协议格式打包的东西、将该数据包推入Internet的东西",-1),Kl=(0,a._)("h5",{id:"_2-主要流程是-接收数据-⇒-http解析-⇒-逻辑处理-⇒-http封包-⇒-发送数据",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#_2-主要流程是-接收数据-⇒-http解析-⇒-逻辑处理-⇒-http封包-⇒-发送数据","aria-hidden":"true"},"#"),(0,a.Uk)(" 2.主要流程是:接收数据 ⇒ HTTP解析 ⇒ 逻辑处理 ⇒ HTTP封包 ⇒ 发送数据")],-1),jl=(0,a._)("h5",{id:"_3-用电脑画图画的-有点丑哈哈哈",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#_3-用电脑画图画的-有点丑哈哈哈","aria-hidden":"true"},"#"),(0,a.Uk)(" 3.用电脑画图画的,有点丑哈哈哈")],-1),Ql=(0,a._)("h4",{id:"其他",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#其他","aria-hidden":"true"},"#"),(0,a.Uk)(" 其他")],-1),Xl=(0,a._)("p",null,"顺便熟悉一下Markdown语法哈哈哈 稍微浏览了一下计网的书,感觉轩辕大佬的模式很好,通过项目学习,补充细节 在公众号搜到几篇文章,感觉挺有意思的,特别是有画小人的那个图解的",-1),Yl=(0,a._)("h5",{id:"网址信息收集",tabindex:"-1"},[(0,a._)("a",{class:"header-anchor",href:"#网址信息收集","aria-hidden":"true"},"#"),(0,a.Uk)(" 网址信息收集")],-1),Zl=(0,a._)("p",null,[(0,a._)("strong",null,[(0,a._)("em",null,"下面四个是一个系列的")]),(0,a.Uk)(" [# 自己动手开发一个 Web 服务器(一)](https://mp.weixin.qq.com/s/cTfLlJNpKhixk31zlvaFgg) [# 自己动手开发一个 Web 服务器(二)](https://mp.weixin.qq.com/s/2ulVC3L3w3YLcN4QS6lEvA) [# 自己动手开发一个 Web 服务器(三)《https://wx.zsxq.com/mweb/views/weread/search.html?keyword=A》](https://mp.weixin.qq.com/s/Yn_4XhwNSAuqNFGAilSmAA) [# 自己动手开发一个 Web 服务器(三)《https://wx.zsxq.com/mweb/views/weread/search.html?keyword=B》](https://mp.weixin.qq.com/s/B0CRXwKs8Z8FrW5tbEVHpg)")],-1),Vl=(0,a._)("hr",null,null,-1),Jl=(0,a._)("p",null,"[#Web服务器工作原理详解(基础篇)](https://mp.weixin.qq.com/s/eb7xOT0-2uE9caaEfAqSCg)(就是轩辕大佬发的) [# Linux下Web服务器详解](https://mp.weixin.qq.com/s/RZFQLpgjHj1V89BWyT8pQA) [# Linux | 搭建Web服务器](https://mp.weixin.qq.com/s/X6u3SBhZ7A54-uczToD9Kw) [# 来写一个属于自己的Web服务器](https://mp.weixin.qq.com/s/W5eDKKcHwlHtc-ssWOWBAg) [# 开发一个属于自己的 web 服务器](https://mp.weixin.qq.com/s/zX8JGTQ-GwC2q63UuIQKFw) [# 如何开发一个web静态服务器](https://mp.weixin.qq.com/s/H_t4jPSiBdogYVscoqUVaA) [# 开发一个 web 服务器](https://mp.weixin.qq.com/s/EoDV6g93TzKMGDV-R12jqA) [# web服务器开发之理论篇](https://mp.weixin.qq.com/s/ufQ68pdC7ZR3aI2gKZdsgw) [# 手写一个 web 服务器!](https://mp.weixin.qq.com/s/cKgoSqIk97M1M9Q-gBOLBw) [# Python 高手之路:从零开始打造一个Web服务器](https://mp.weixin.qq.com/s/3OWFXRTfhL30twQF4UzFUQ)",-1),$l=(0,a._)("p",null,"https://t.zsxq.com/YNZNRnm",-1),en={},ln=(0,n(3744).Z)(en,[["render",function(e,l){const n=(0,a.up)("OutboundLink");return(0,a.wg)(),(0,a.iD)(a.HY,null,[h,p,o,d,b,m,k,g,T,A,f,v,w,E,U,x,P,H,W,C,D,M,R,S,y,q,N,F,L,O,I,B,z,G,K,j,Q,X,Y,Z,V,J,$,ee,le,ne,ae,se,re,te,ie,_e,ue,ce,he,pe,oe,de,be,me,ke,ge,Te,Ae,fe,ve,we,Ee,Ue,xe,Pe,He,We,Ce,De,Me,Re,Se,ye,qe,Ne,Fe,Le,Oe,Ie,Be,ze,Ge,Ke,je,Qe,Xe,Ye,(0,a._)("ul",null,[Ze,(0,a._)("li",null,[Ve,(0,a._)("a",Je,[$e,(0,a.Wm)(n)])]),(0,a._)("li",null,[el,(0,a._)("a",ll,[nl,(0,a.Wm)(n)])])]),al,sl,rl,tl,il,_l,ul,cl,hl,pl,ol,dl,bl,ml,kl,gl,Tl,Al,fl,vl,wl,El,Ul,xl,Pl,Hl,Wl,Cl,Dl,Ml,Rl,Sl,yl,ql,Nl,Fl,Ll,Ol,Il,Bl,zl,Gl,Kl,jl,Ql,Xl,Yl,Zl,Vl,Jl,$l],64)}]])},3744:(e,l)=>{l.Z=(e,l)=>{const n=e.__vccOpts||e;for(const[e,a]of l)n[e]=a;return n}},3806:(e,l,n)=>{e.exports=n.p+"assets/img/day1-How-the-Web-server-works.200e1050.svg"},9698:(e,l,n)=>{e.exports=n.p+"assets/img/day10-conf-image.07fa24a3.png"},8700:(e,l,n)=>{e.exports=n.p+"assets/img/day2-HTTP-request-message.ac379a72.png"},4777:(e,l,n)=>{e.exports=n.p+"assets/img/day2-World-Wide-Web-shortcut.ae1b396c.png"},1319:(e,l,n)=>{e.exports=n.p+"assets/img/day2-trace-tcp-stream.69b2b430.png"},2214:(e,l,n)=>{e.exports=n.p+"assets/img/day2-wireshark.bc4bb754.png"},897:(e,l,n)=>{e.exports=n.p+"assets/img/day4-the-workflow-of-connection-oriented-sockets.81b480c8.png"}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/v-5d7259d4.b4e6193d.js b/docs/.vuepress/dist/assets/js/v-5d7259d4.b4e6193d.js new file mode 100644 index 0000000..87249f0 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/v-5d7259d4.b4e6193d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkvuepress=self.webpackChunkvuepress||[]).push([[352],{1753:(e,t,r)=>{r.r(t),r.d(t,{data:()=>n});const n={key:"v-5d7259d4",path:"/guide.html",title:"",lang:"zh-CN",frontmatter:{home:!0,heroText:"目录",tagline:"🎉欢迎来到Coding Zhang的笔记小站🎊",actions:[{text:"回首页",link:"/",type:"secondary"}]},excerpt:"",headers:[],filePathRelative:"guide.md",git:{updatedTime:1638721323e3,contributors:[{name:"Coding Zhang",email:"2291200076@qq.com",commits:1}]}}},9784:(e,t,r)=>{r.r(t),r.d(t,{default:()=>o});var n=r(6252);const a={align:"center",style:{"margin-top":"70px","font-size":"larger"}},s=[(0,n._)("p",null,[(0,n._)("a",{href:"computer-networks"},"计算机网络笔记")],-1),(0,n._)("p",null,[(0,n._)("a",{href:"web-server"},"web服务器")],-1)],i={},o=(0,r(3744).Z)(i,[["render",function(e,t){return(0,n.wg)(),(0,n.iD)("div",a,s)}]])},3744:(e,t)=>{t.Z=(e,t)=>{const r=e.__vccOpts||e;for(const[e,n]of t)r[e]=n;return r}}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/v-8daa1a0e.fbae5ea0.js b/docs/.vuepress/dist/assets/js/v-8daa1a0e.fbae5ea0.js new file mode 100644 index 0000000..ac7f1c6 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/v-8daa1a0e.fbae5ea0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkvuepress=self.webpackChunkvuepress||[]).push([[509],{6464:(e,t,r)=>{r.r(t),r.d(t,{data:()=>a});const a={key:"v-8daa1a0e",path:"/",title:"",lang:"zh-CN",frontmatter:{home:!0,heroImage:"/images/logo.png",heroAlt:" ",tagline:"🎉欢迎来到Coding Zhang的笔记小站🎊",actions:[{text:"查看目录",link:"/guide",type:"primary"}],footerHtml:!0,footer:'MIT Licensed | Copyright © 2021 张小弟之家',sidebar:!1},excerpt:"",headers:[],filePathRelative:"README.md",git:{updatedTime:1638721323e3,contributors:[{name:"Coding Zhang",email:"2291200076@qq.com",commits:1}]}}},720:(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var a=r(6252);const n={align:"center",style:{"margin-top":"70px"}},o={},i=(0,r(3744).Z)(o,[["render",function(e,t){return(0,a.wg)(),(0,a.iD)("p",n,"梦想需要付诸行动,否则只能是梦")}]])},3744:(e,t)=>{t.Z=(e,t)=>{const r=e.__vccOpts||e;for(const[e,a]of t)r[e]=a;return r}}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/computer-networks/index.html b/docs/.vuepress/dist/computer-networks/index.html new file mode 100644 index 0000000..ffa1c61 --- /dev/null +++ b/docs/.vuepress/dist/computer-networks/index.html @@ -0,0 +1,15 @@ + + + + + + + 计算机网络 学习笔记 | Coz的学习笔记 + + + + +

计算机网络 学习笔记

参考书籍:计算机网络 第7版 谢希仁

📔📕📖📗📘📙📚📓📒★⭐🌟🌠

回到正在整理的地方

目录(点击展开)

第一章 概述

1.1 计算机在信息时代中的作用

1.2 互联网概述

🌠1.2.1 网络的网络

📓4-5

计算机网络由若干结点和连接这些结点的链路组成。

结点:计算机、集线器、交换机、路由器等。

网络把许多计算机连接在一起,而互联网则把许多网络通过路由器连接在一起。与网络相连的计算机常称为主机。

🌠1.2.2 互联网基础结构发展的三个阶段

📓5

第一阶段:从单个网络ARPANET向互联网发展。

internet:互连网,通用名词,泛指由多个计算机网络互连而成的计算机网络。

Internet:互联网、因特网,专用名词,指当前全球最大的、开放的、由众多网络相互连接而成的特定互连网,它采用TCP/IP协议族作为通信的规则,且其前身是美国的ARPANET。

第二阶段:建成了三级结构互联网。

📓6

分为主干网、地区网、校园网(或企业网)

第三阶段:逐渐形成了多层次ISP结构的互联网。

📓6

互联网服务提供者ISP(Internet Service Provider),常译为互联网服务提供商

互联网交换点IXP(Internet eXchange Point)

1-3 基于ISP的多层结构的互联网的概念示意图

1.2.3 互联网的标准化工作

📓10

边缘部分(资源子网):由所连接在互联网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。

核心部分(通信子网):由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换)。

图1-6_互联网的边缘部分与核心部分

🌠1.3互联网的形成

🌠1.3.1 互联网的边缘部分

📓11-12

主机A和主机B进行通信主机A的某个进程和主机B上的另一个进程进行通信,简称为计算机之间的通信

(1)客户-服务器方式(C/S) Client/Server

客户是请求方,服务器是服务提供方。

图1-7_客户-服务器工作方式

(2)对等方式(P2P) Peer-to-Peer

两台主机在通信时并不区分哪一个是服务请求方哪一个是服务提供方。

图1-8_对等连接工作方式(P2P方式)

🌠1.3.2 互联网的核心部分

📓12-17

路由器:分组交换,存储转发

(1)电路交换:整个报文的比特流持续地从源点直达终点,好像在一个管道中传输

在通话的全部时间内,通话的两个用户始终占用端到端的通信资源。

线路的传输效率往往很低。

图1-9_电话机的不同连接方法

图1-10_电路交换的用户始终占用端到端的通信资源

(2)报文交换:整个报文先传送到相邻结点,全部存储下来之后查找转发表,转发到下一个结点。
(3)分组交换:单个分组(这只是整个报文的一部分)传达到相邻结点,存储下来后查找转发表,转发到下一个结点。

图1-11_以分组为基本单位在网络中传送

分组交换

优点所采用的手段
高效在传输分组的过程中动态分配传输带宽,对通信链路是逐段占用。
灵活为每一个分组独立地选择最合适的转发路由。
迅速以分组作为传送单位,可以不建立连接就能向其他主机发送分组。
可靠保证可靠性的网络协议;分布式多路由的分组交换网,使网络有很好的生存性。

图1-13_三种交换的比较。电路交换;报文交换;分组交换,P1~P4表示4个分组

1.4 计算机网络在我国的发展

1.5 计算机网络的类别

1.5.1 计算机网络的定义

🌠1.5.2 几种不同类别的计算机网络

📓20

按照网络的作用范围进行分类
中文简写英文
广域网WANWide Area Network
城域网MANMetropolitan Area Network
局域网LANLocal Area Network
个人局域网
无线个人局域网
PAN
WPAN
Personal Area Network
Wireless PAN
按照网络的使用者进行分类
中文简写英文
广域网WANWide Area Network
城域网MANMetropolitan Area Network
局域网LANLocal Area Network
个人局域网
无线个人局域网
PAN
WPAN
Personal Area Network
Wireless PAN

1.6 计算机网络的性能⭐

1.6.1 计算机网络的性能指标

📓21-25

比特(bit):binary digit,一个二进制数字。

换算:

单位英文数量级中文
kkilo103
MMega106
GGiga109
TTera1012
PPeta1015
EExa1018
ZZetta1021
YYotta1024
(1)速率(数据率(data rate),比特率(bit rate))

定义:数据的传送速率。

单位:bit/s(比特每秒)

(2)带宽

两种意义

(1)本指

定义:信号具有的频带宽度。

单位:赫(千赫、兆赫、吉赫等)

(2)计算机网络中指 ✔(默认是这个意思)

定义:网络中某通道传送数据的能力,网络表示在单位时间内网络中的某信道所能通过的“最高数据率”。

单位:bit/s(比特每秒)(带宽的单位就是数据率的单位)

(3)吞吐量

定义:单位时间内通过某个网络(或信道、接口的实际数据量)

有时吞吐量还可用每秒传送的字节数或帧数来表示。

(4)时延(延迟、迟延)

定义:数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。

由以下几部分组成

  1. 发送时延:主机或路由器发送数据帧所需要的时间。

    计算公式:

(5)
(6)
正在整理......

1.6.2 计算机网络的非性能特征

1.7 计算机网络体系结构⭐

1.7.1 计算机网络体系结构的组成

1.7.2 协议与划分层次

1.7.3 具有五层协议的

1.7.4 实体、协议、服务和服务访问点

1.7.5 TCP/IP的体系结构

第二章 物理层

2.1 物理层的基本概念

2.2 数据通信的基础知识

2.2.1 数据通信系统的概述

2.2.2 有关信道的几个基本概念

2.2.3 信道的极限容量

2.3 物理层下面的传输媒体

2.3.1 导引型传输媒体

2.3.2 非导引型传输媒体

2.4 信道复用技术

2.4.1 频分复用、时分复用和统计时分复用

2.4.2 波分复用

2.4.3 码分复用

2.5 数字传输系统

2.6 宽带接入技术

2.6.1 ADSL技术

2.6.2 光纤同轴混合网(HFC网)

2.6.3 FTTx技术

第三章 数据链路层

3.1 使用点对点信道的数据链路层

3.1.1 数据链路和帧

3.1.2 三个基本问题

3.2 点对点协议PPP

3.2.1 PPP协议的特点

3.2.2 PPP协议的帧格式

3.2.3 PPP协议的工作状态

3.3 使用广播信道的数据链路层

广播信道以太网

3.3.1 局域网的数据链路层

3.3.2 CSMA/CD协议

3.3.3 使用集线器的星型拓扑

3.3.4 以太网的信道利用率

3.3.5 以太网的MAC层

3.4 扩展的以太网

交换型以太网

3.4.1 在物理层扩展以太网

3.4.2 在数据链路层扩展以太网

3.4.3 虚拟局域网

3.5 高速以太网

交换型以太网

3.5.1 100BASE-T以太网

3.5.2 吉比特以太网

3.5.3 10吉比特以太网(10GE)和更快的以太网

3.5.4 使用以太网进行宽带接入

第四章 网络层

4.1 网络层提供的两种服务

4.2 网际协议IP

4.2.1 虚拟互连网络

4.2.2 分类的IP地址

4.2.3 IP地址与硬件地址

4.2.4 地址解析协议ARP

4.2.5 IP数据报的格式

4.2.6 IP层转发分组的流程

4.3 划分子网和构造子网

4.3.1 划分子网

4.3.2 使用子网时分组的转发

4.3.3 无分类编址CIDR(构造超网)

4.4 网际控制报文协议ICMP

4.4.1 ICMP报文的种类

4.4.2 ICMP的应用举例

4.5 互联网的路由选择协议

4.5.1 有关路由选择协议的几个基本概念

4.5.2 内部网关协议RIP

4.5.3 内部网关协议OSPF

4.5.4 外部网关协议BGP

4.5.5 路由器的构成

4.6 IPv6

4.6.1 IPv6的基本首部

4.6.2 IPv6的地址

4.6.3 从IPv4向IPv6过渡

4.6.4 ICMPv6

4.7 IP多播 ✘

4.7.1 IP多播的基本概念

4.7.2 在局域网上进行硬件多播

4.7.3 网际组管理协议IGMP和多播路由选择协议

4.8 虚拟局域网VPN和网络地址转换NAT

4.8.1 虚拟局域网VPN

4.8.2 网络地址转换NAT

4.9 多协议交换MPLS ✘

4.9.1 MPLS的工作原理

4.9.2 MPLS首部的位置与格式

第五章 运输层

5.1 运输层协议概述

5.1.1 进程之间的通信

5.1.2 运输层的两个主要协议

5.1.3 运输层的端口

5.2 用户数据报协议UDP

5.2.1 UDP概述

5.2.2 UDP的首部格式

5.3 传输控制协议TCP概述

5.3.1 TCP最主要的特点

5.3.2 TCP的连接

5.4 可靠传输的工作原理

5.4.1 停止等待协议

5.4.2 连续ARQ协议

5.5 TCP报文段的首部格式

5.6 TCP可靠传输的实现

5.6.1 以字节为单位的滑动窗口

5.6.2 超时重传时间的选择

5.6.3 选择确认SACK

5.7 TCP的流量控制

5.7.1 利用滑动窗口实现流量控制

5.7.2 TCP的传输效率

5.8 TCP的拥塞机制

5.8.1 拥塞机制的一般原理

5.8.2 TCP的拥塞控制办法

5.8.3 主动队列管理AQM

5.9 TCP的运输连接管理

5.9.1 TCP连接的建立

5.9.2 TCP连接释放

5.9.3 TCP的有限状态机

第六章 应用层

6.1 域名系统DNS

6.1.1 域名系统概述

6.1.2 互联网的域名系统

6.1.3 域名服务器

6.2 文件传送协议

6.2.1 FTP概述

6.2.2 FTP的基本工作原理

6.2.3 简单文件传送协议TFTP

6.3 远程终端协议TELNET

6.4 万维网WWW

6.4.1 万维网概述

6.4.2 统一资源定位符URL

6.4.3 超文本传送协议HTTP

6.4.4 万维网的文档

6.4.5 万维网的信息检索系统

6.4.6 博客和微博

6.4.7 社交网站

6.5 电子邮件

6.5.1

6.5.2

6.5.3

6.5.4

6.5.5

6.5.6

6.6 动态主机配置协议DHCP

6.7 简单网络管理协议SNMP

6.7.1

6.7.2

6.7.3

6.7.4

6.8 应用进程跨越网络的通信

6.8.1

6.8.2

6.9 P2P应用

6.9.1

6.9.2

6.9.3

6.9.4

第七章 网络安全 ✘

7.1

7.1.1

7.1.2

7.1.3

7.2

7.2.1

7.2.2

7.3

7.4

7.4.1

7.4.2

7.5

7.5.1

7.5.2

7.6

7.6.1

7.6.2

7.6.3

7.7

7.7.1

7.7.2

7.8

第八章 互联网上的音频/视频服务 ✘

8.1

8.2

8.2.1

8.2.2

8.2.3

8.3

8.3.1

8.3.2

8.3.3

8.3.4

8.3.5

8.3.6

8.4

8.4.1

8.4.2

8.4.3

8.4.4

第九章 无线网络和移动网络

9.1

9.1.1

9.1.2

9.1.3

9.1.4

9.2

9.3

9.4

9.4.1

9.4.2

9.4.3

9.4.4

9.4.5

9.5

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题
(1)
(2)
(3)
(4)
(5)
(6)
Last Updated: 2021/12/6 上午12:24:06
Contributors: Coding Zhang
+ + + diff --git a/docs/.vuepress/dist/css/search.css b/docs/.vuepress/dist/css/search.css new file mode 100644 index 0000000..6c3c32e --- /dev/null +++ b/docs/.vuepress/dist/css/search.css @@ -0,0 +1,36 @@ +/* 搜索框样式 */ +:root { + --search-input-width: 12rem; + --search-result-width: 25rem; +} + +/* 暗黑模式下,透明图内容看不清,设置为白色背景 */ +/* 文章的图片 */ +html.dark .page img, + +/* 点击放大的大图 */ +html.dark .medium-zoom-image { + background-color: white; + background-color: yellow; +filter:alpha(style=0, opacity=40, finishopacity=40); +} + +/* + +:root { + --search-bg-color: #ffffff; + --search-accent-color: #3eaf7c; + --search-text-color: #2c3e50; + --search-border-color: #eaecef; + + --search-item-text-color: #5d81a5; + --search-item-focus-bg-color: #f3f4f5; + + --search-input-width: 8rem; + --search-result-width: 20rem; +} + +body { + background: black; +} + */ \ No newline at end of file diff --git a/docs/.vuepress/dist/guide.html b/docs/.vuepress/dist/guide.html new file mode 100644 index 0000000..cf336d8 --- /dev/null +++ b/docs/.vuepress/dist/guide.html @@ -0,0 +1,15 @@ + + + + + + + Coz的学习笔记 + + + + + + + + diff --git a/docs/.vuepress/dist/images/logo.png b/docs/.vuepress/dist/images/logo.png new file mode 100644 index 0000000..8e5386c Binary files /dev/null and b/docs/.vuepress/dist/images/logo.png differ diff --git a/docs/.vuepress/dist/index.html b/docs/.vuepress/dist/index.html new file mode 100644 index 0000000..7214969 --- /dev/null +++ b/docs/.vuepress/dist/index.html @@ -0,0 +1,15 @@ + + + + + + + Coz的学习笔记 + + + + +

Coz的学习笔记

🎉欢迎来到Coding Zhang的笔记小站🎊

查看目录

梦想需要付诸行动,否则只能是梦

+ + + diff --git a/docs/.vuepress/dist/web-server/files/day1-Web工作原理.pdf b/docs/.vuepress/dist/web-server/files/day1-Web工作原理.pdf new file mode 100644 index 0000000..46e4f50 Binary files /dev/null and b/docs/.vuepress/dist/web-server/files/day1-Web工作原理.pdf differ diff --git a/docs/.vuepress/dist/web-server/files/day10-conf.json b/docs/.vuepress/dist/web-server/files/day10-conf.json new file mode 100644 index 0000000..b8b42b5 --- /dev/null +++ b/docs/.vuepress/dist/web-server/files/day10-conf.json @@ -0,0 +1,139 @@ +{ + "_comment": "Web服务器配置文件,配置后请重启服务器", + "default_comment": "Web服务器站点默认配置,站点配置中未配置项将以默认配置为准", + "default": { + "comment_comment": "默认配置说明(仅做备注用,无实际作用)", + "comment": "默认配置", + "web_comment": "网站相关配置", + "web": { + "host_comment": "绑定的IP或域名(字符串或数组)", + "host": "127.0.0.1", + "port_comment": "绑定的端口号(数字或数组)", + "port": 80 + }, + "path_comment": "网站目录相关配置", + "path": { + "websitePath_comment": "网站目录(绝对路径,以 '/' 结尾)", + "websitePath": "/www/wwwroot/", + "runPath_comment": "网站运行目录(相对路径,相对网站目录,以 '/' 结尾)", + "runPath": "./", + "accessLogPath_comment": "访问日志目录", + "accessLogPath": "/www/wwwlogs/", + "errorLogPath_comment": "错误日志目录", + "errorLogPath": "/www/wwwlogs/" + }, + "page_comment": "默认文档相关配置", + "page": { + "defaultPage_comment": "默认文档(数组)", + "defaultPage": [ + "index.html", + "index.htm", + "default.html", + "default.htm" + ], + "errorPage_comment": "默认错误页(键值对)", + "errorPage": { + "403": "./403.html", + "404": "./404.html", + "500": "./500.html", + "default": "./error.html" + } + }, + "ssl_comment": "SSL证书公钥、私钥配置", + "ssl": { + "private_comment": "私钥所在目录", + "private": "./private.pem", + "public_comment": "公钥所在目录", + "public": "./public.pem" + }, + "reverseProxy_comment": "反向代理", + "reverseProxy": { + "state_comment": "'on' / 1 / true 表示开启,'off' / 0 / false 表示关闭", + "state": "off", + "origin_comment": "代理源配置 [Todo] 待完善", + "origin": { + "host_comment": "被代理主机(字符串)", + "host": "127.0.0.1", + "port_comment": "被代理端口号(数字)", + "port": 8080 + } + }, + "logs": { + "format_comment": "日志记录默认格式,需以'\r\n'结尾。设计时参考Nginx [Todo] 待完善", + "format_comment_options": { + "_": "格式(以下是可选参数)", + "{remoteAddr}": "发起请求的客户端所在IP地址", + "{remoteUser}": "发起请求的客户端用户名称,获取不到则显示为'-'", + "{timeLocal}": "用来记录访问时间与时区(依赖服务器本地时间),形如'20/Aug/2017:21:15:19 +0800',获取不到则显示为'-'", + "{request}": "记录发起的请求,形如'POST /index.html?page=1 HTTP/1.1'", + "{status}": "记录响应状态,比如'200'", + "{requestTime}": "记录请求处理时间(以秒为单位、精确到毫秒)。从读取客户端第一个字节开始算起,到发送最后一个字节给客户端的时间间隔", + "{upstreamResponseTime}": "记录Web服务器从后端服务获取响应的时间(以秒为单位、精确到毫秒),多个请求的时间以逗号分隔", + "{requestLength}": "记录请求长度(包括请求行,请求头,请求体)", + "{gzipRatio}": "记录nginx gzip压缩比例,获取不到则显示为'-'", + "{bytesSent}": "发送给客户端的字节数", + "{bodyBytesSent}": "发送给客户端的响应体字节数", + "{connectionRequests}": "单个连接的并发请求数", + "{httpReferer}": "记录请求引用页面地址", + "{httpUserAgent}": "记录用户代理信息(通常是浏览器信息)", + "{httpXForwardedFor}": "当为了承受更大的负载使用反向代理时,web服务器不能获取真实的客户端IP,$remote_addr获取到的是反向代理服务器的ip,这种情况下,代理服务器通常会增加一个叫做x_forwarded_for的信息头,把连接它的真实客户端IP加到这个信息头里,这样就能保证网站的web服务器能获取到真实IP,获取不到则显示为'-'", + "{connection}": "连接序列号", + "{msec}": "写入日志的时间(以秒为单位、精确到毫秒)", + "{pipe}": "如果为管道请求则显示为p,否则显示为'.'" + }, + "format": "{timeLocal}\t{remoteAddr}\t{status}\t{request}\t{httpUserAgent}\r\n" + } + }, + "server_comment": "Web服务器服务的站点,每一个站点都作为server数组的一个元素", + "server": [ + { + "comment": "网站首页", + "web": { + "host": "www.only4.work", + "port": [ + 80, + 443 + ] + }, + "ssl": { + "private": "./ssl/private.pem", + "public": "./ssl/public.pem" + }, + "path": { + "path": "/www/wwwroot/www.only4.work", + "runPath": "./public/" + }, + "page": { + "defaultPage": [ + "index.php", + "index.html", + "index.htm", + "default.html", + "default.htm" + ], + "errorPage_comment": "默认错误页(键值对)", + "errorPage": { + "403": "./error.html?code=403", + "404": "./error.html?code=404", + "500": "./error.html?code=500", + "default": "./error.html?code=unknown" + } + } + }, + { + "comment": "网站首页(代理页面)", + "web": { + "host": "www.only4.work", + "port": 888 + }, + "reverseProxy": { + "state": true, + "origin": { + "host": "127.0.0.1", + "port_comment": "被代理端口号", + "port": 80 + } + } + } + ] +} \ No newline at end of file diff --git a/docs/.vuepress/dist/web-server/files/day3-Linux网络编程.pdf b/docs/.vuepress/dist/web-server/files/day3-Linux网络编程.pdf new file mode 100644 index 0000000..045ef8d Binary files /dev/null and b/docs/.vuepress/dist/web-server/files/day3-Linux网络编程.pdf differ diff --git a/docs/.vuepress/dist/web-server/index.html b/docs/.vuepress/dist/web-server/index.html new file mode 100644 index 0000000..a1b6353 --- /dev/null +++ b/docs/.vuepress/dist/web-server/index.html @@ -0,0 +1,114 @@ + + + + + + + 第一期学习活动 | Coz的学习笔记 + + + + +

第一期学习活动

第1天

任务:Web服务器基本工作原理学习

学习资料: 1、https://www.cnblogs.com/BOHB-yunying/articles/10911192.html

2、《Web工作原理》见附件

作业:写一篇小短文,发布在星球,小短文中需要回答几个问题

一个web服务器,最基本的由哪几个核心组件组成?

讲述一下,web服务器从收到一个请求,到完成这个请求的响应,主要流程是什么?

将自己理解的Web服务器工作原理,绘制一张图

附件:Web工作原理.pdf

作业

看了一下网上搜索出来的感觉大都很专业,我就说说我自己的看法叭

web服务器组件我理解的是包含以下部分

  • 配置文件、默认错误页面(像404, 500等错误页模板)
  • 日志记录模块
  • 端口监听模块
  • 业务处理模块
  • 请求响应模块
  • 扩展模块(如反向代理等)

web服务器主要完成以下几件事

  1. 监听到客户端发来的请求

    涉及到计算机网络结构方面的知识

  2. 处理请求

    1. 取得请求方法(GET, POST, PUT等),解析url,进行路由

    2. 通过路由知道客户端的请求

      分成静态、动态两类,静态资源直接返回给客户端就行了,动态资源需要去对应提供服务的业务取得(像php, java, asp.net等等)

  3. 将响应返回给用户 响应头中还包含一些扩展信息(像web服务器版本信息,MIME,缓存配置信息,静态资源还会有修改时间)

Web服务器工作原理

第2天

任务:HTTP协议学习 & F12 & wireshark抓包

学习资料: https://www.ruanyifeng.com/blog/2016/08/http.html

https://zhuanlan.zhihu.com/p/77376952

https://haokan.baidu.com/v?pd=wisenatural&vid=9883591515530208938

作业:写一篇小短文,发布在星球,完成下面这些内容

  • HTTP请求主要由哪几个部分组成?
  • HTTP响应主要由哪几部分组成?
  • HTTP头部和数据如何组织在一起?
  • 这是世界上第一个网页: http://info.cern.ch/hypertext/WWW/TheProject.html

使用浏览器访问这个URL,并使用wireshark抓包,分析请求和响应。

请求:Method、URI、HTTP版本、Headers

响应:状态码、Headers、HTML内容

作业

HTTP请求主要由哪几个部分组成?

请求报文

  1. 请求行:请求方法字段、URL字段和HTTP协议版本

    例如:GET /index.html HTTP/1.1

    get方法将数据拼接在url后面,传递参数受限

    请求方法:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT

  2. 请求头(key value形式)

    • User-Agent:产生请求的浏览器类型。

    • Accept:客户端可识别的内容类型列表。

    • Host:主机地址

  3. 请求数据

    post方法中,会把数据以key value形式发送请求

  4. 空行

    发送回车符和换行符,通知服务器以下不再有请求头

HTTP响应主要由哪几部分组成?

响应报文

  1. 状态行

  2. 消息报头

3. 响应正文

HTTP头部和数据如何组织在一起?

HTTP请求报文

Wireshark抓包

首先打开Wireshark,访问:http://info.cern.ch/hypertext/WWW/TheProject.html

使用Wireshark抓包(按照 ip.src == 188.184.21.108 过滤,先 Ctrl+R 清除记录一次)

day2-wireshark

Ctrl+Alt+Shift+T 追踪TCP流(右键 追踪流、TCP流)

day2-trace-tcp-stream

GET /hypertext/WWW/TheProject.html HTTP/1.1
+Host: info.cern.ch
+User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
+Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
+Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
+Accept-Encoding: gzip, deflate
+Connection: keep-alive
+Upgrade-Insecure-Requests: 1
+Pragma: no-cache
+Cache-Control: no-cache
+
+HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2021 12:28:56 GMT
+Server: Apache
+Last-Modified: Thu, 03 Dec 1992 08:37:20 GMT
+ETag: "8a9-291e721905000"
+Accept-Ranges: bytes
+Content-Length: 2217
+Connection: close
+Content-Type: text/html
+
+<HEADER>
+<TITLE>The World Wide Web project</TITLE>
+<NEXTID N="55">
+</HEADER>
+<BODY>
+<H1>World Wide Web</H1>The WorldWideWeb (W3) is a wide-area<A
+NAME=0 HREF="WhatIs.html">
+hypermedia</A> information retrieval
+initiative aiming to give universal
+access to a large universe of documents.<P>
+Everything there is online about
+W3 is linked directly or indirectly
+to this document, including an <A
+NAME=24 HREF="Summary.html">executive
+summary</A> of the project, <A
+NAME=29 HREF="Administration/Mailing/Overview.html">Mailing lists</A>
+, <A
+NAME=30 HREF="Policy.html">Policy</A> , November's  <A
+NAME=34 HREF="News/9211.html">W3  news</A> ,
+<A
+NAME=41 HREF="FAQ/List.html">Frequently Asked Questions</A> .
+<DL>
+<DT><A
+NAME=44 HREF="../DataSources/Top.html">What's out there?</A>
+<DD> Pointers to the
+world's online information,<A
+NAME=45 HREF="../DataSources/bySubject/Overview.html"> subjects</A>
+, <A
+NAME=z54 HREF="../DataSources/WWW/Servers.html">W3 servers</A>, etc.
+<DT><A
+NAME=46 HREF="Help.html">Help</A>
+<DD> on the browser you are using
+<DT><A
+NAME=13 HREF="Status.html">Software Products</A>
+<DD> A list of W3 project
+components and their current state.
+(e.g. <A
+NAME=27 HREF="LineMode/Browser.html">Line Mode</A> ,X11 <A
+NAME=35 HREF="Status.html#35">Viola</A> ,  <A
+NAME=26 HREF="NeXT/WorldWideWeb.html">NeXTStep</A>
+, <A
+NAME=25 HREF="Daemon/Overview.html">Servers</A> , <A
+NAME=51 HREF="Tools/Overview.html">Tools</A> ,<A
+NAME=53 HREF="MailRobot/Overview.html"> Mail robot</A> ,<A
+NAME=52 HREF="Status.html#57">
+Library</A> )
+<DT><A
+NAME=47 HREF="Technical.html">Technical</A>
+<DD> Details of protocols, formats,
+program internals etc
+<DT><A
+NAME=40 HREF="Bibliography.html">Bibliography</A>
+<DD> Paper documentation
+on  W3 and references.
+<DT><A
+NAME=14 HREF="People.html">People</A>
+<DD> A list of some people involved
+in the project.
+<DT><A
+NAME=15 HREF="History.html">History</A>
+<DD> A summary of the history
+of the project.
+<DT><A
+NAME=37 HREF="Helping.html">How can I help</A> ?
+<DD> If you would like
+to support the web..
+<DT><A
+NAME=48 HREF="../README.html">Getting code</A>
+<DD> Getting the code by<A
+NAME=49 HREF="LineMode/Defaults/Distribution.html">
+anonymous FTP</A> , etc.</A>
+</DL>
+</BODY>
+
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

请求

Method:GET

URI:/hypertext/WWW/TheProject.html

HTTP版本:HTTP/1.1

Headers:

Host: info.cern.ch User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 Pragma: no-cache Cache-Control: no-cache

响应

状态码:HTTP/1.1 200 OK

Headers:

Date: Mon, 29 Nov 2021 12:28:56 GMT Server: Apache Last-Modified: Thu, 03 Dec 1992 08:37:20 GMT ETag: "8a9-291e721905000" Accept-Ranges: bytes Content-Length: 2217 Connection: close Content-Type: text/html

HTML内容:

第3天

任务:套接字编程基础知识

学习资料: 《网络编程》第六章(见附件)

https://www.jianshu.com/p/6ca1c102fc00

https://wenku.baidu.com/view/8d0f749881c758f5f71f6749.html

作业:写一篇小短文,发布在星球,回答几个问题

  • 什么是套接字?
  • 套接字有哪几个类型?
  • 用套接字编写一个客户端和服务端,分别有哪几个步骤?

附件:Linux网络编程.pdf

作业

什么是套接字?

套接字(socket)为通信的端点,每个套接字由一个 IP 地址和一个端口号组成。通过网络通信的每对进程需要使用一对套接字,即每个进程各有一个。

套接字有哪几个类型?

套接字的类型

常用的TCP/IP协议的3种套接字类型如下所示。

流套接字(SOCK_STREAM):

流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。

数据包套接字(SOCK_DGRAM):

数据包套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据包套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。

原始套接字(SOCK_RAW):

原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。比如,我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包,或者接收TCP/IP栈不能够处理的IP包,也可以用来发送一些自定包头或自定协议的IP包。网络监听技术很大程度上依赖于SOCKET_RAW

原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据包套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。

用套接字编写一个客户端和服务端,分别有哪几个步骤?

服务端

  1. 返回socket句柄
  2. 设置套接字
  3. 绑定端口,开始监听
  4. 等待客户端连接

客户端

  1. 创建连接
  2. 发送请求

下面是网上找到的:

服务器

  1. socketfd = socket(........); 返回一个socket文件句柄

  2. 设置套接字 setsockopt(socketfd , SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) // int on =1; SO_REUSEADDR表示可以重复使用一个端口

  3. memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = ; (端口号) / addr.sin_addr.s_addr = htonl(INADDR_ANY); / 可以监听本地的所有的ip */

  4. bind(socketfd , (struct sockaddr*)&addr, sizeof(addr)) != 0 ) // 绑定端口和IP

  5. listen(socketfd , 10) != 0 /* 启动监测数据,最多可以同时连接10个客服端 */

  6. clientfd = accept(socketfd , (struct sockaddr )&client_addr, &addr_len); / 等待客服端的链接,如果有链接,则建立链接 返回一个客服端的clientfd 会堵塞*/

客户端

  1. iSocketClient = socket(AF_INET, SOCK_DGRAM, 0); // SOCK_DGRAM 表示UDP

  2. tSocketServerAddr.sin_family = AF_INET; tSocketServerAddr.sin_port = htons(端口号); /* host to net, short */ //tSocketServerAddr.sin_addr.s_addr = INADDR_ANY;

  3. iRet = connect(iSocketClient, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr)); // 连接

参考:https://blog.csdn.net/lgz929974811/article/details/106006925

★ 第4天

任务:编写一个TCP Client,发出一个简单的HTTP请求

学习资料:

作业:

编写一个TCP Client程序,向http://www.baidu.com发起一个GET请求,并把服务器返回的数据打印出来

附件:Linux网络编程.pdf

作业

面向连接的socket的工作流程👇

day4-the-workflow-of-connection-oriented-sockets

无连接的socket工作流程👇

day4-the-workflow-of-connection-oriented-sockets

★ 第5天

任务:编写一个TCP Server,发出一个简单的HTTP响应

学习资料:同昨天相同

作业:

编写一个TCP Server程序,当收到客户发来GET请求时(先不用管请求的具体是什么),都返回一个网页,网页的内容如下:

<html>
+    <body>
+        <h1>这是我的第一个网页!</h1>
+    </body>
+</html>
+
1
2
3
4
5

使用浏览器去访问自己写的这个TCP Server,截图展示访问效果

然后使用前一天自己编写的TCP Client去请求这个Server,通过Client将这个网页内容打印出来!

作业

★ 第8天

任务:改造TCP Server,发送一个HTML文件

学习资料:同任务4 作业:今天的任务只有一个改动,就是将第五天任务中的TCP Server返回的那个网页内容,改为从文件中加载,而不是固定写死在代码中。

★ 第9天

任务:使用多线程

学习资料:同任务4 作业: 在原来TCP Server基础上进行改造:当服务器收到连接请求时,启动一个单独的线程进行处理。并且不要关闭连接,继续监听这个客户端后续的请求。

附件:Linux网络编程.pdf

作业

第10天

任务:设计并使用配置文件

学习资料:无 作业: Web服务器一般会拥有多个参数,将服务器绑定的IP、端口、HTML文件所在的目录,写在配置文件中,程序启动的时候进行加载。

需要自己设计自己的Web服务器的文件格式,可以参考JSON、XML、YML等格式

作业

day10-conf-image

作业

作业

作业

作业


11.29 11:01 其他人的作业

笔记

回答轩辕大佬的问题:

1.Web服务器 约等于 HTTP服务器 + 其他服务

(先不去管它这些操作具体的名称,单纯记录他的操作,后面再补) 包含:拿到数据包之后解包的东西、解析客户端的意图的东西、进行分类处理,或是提供某种文件、或是处理数据的东西、将结果装入缓冲区的东西、将以HTTP协议格式打包的东西、将该数据包推入Internet的东西

2.主要流程是:接收数据 ⇒ HTTP解析 ⇒ 逻辑处理 ⇒ HTTP封包 ⇒ 发送数据
3.用电脑画图画的,有点丑哈哈哈

其他

顺便熟悉一下Markdown语法哈哈哈 稍微浏览了一下计网的书,感觉轩辕大佬的模式很好,通过项目学习,补充细节 在公众号搜到几篇文章,感觉挺有意思的,特别是有画小人的那个图解的

网址信息收集

下面四个是一个系列的 [# 自己动手开发一个 Web 服务器(一)](https://mp.weixin.qq.com/s/cTfLlJNpKhixk31zlvaFgg) [# 自己动手开发一个 Web 服务器(二)](https://mp.weixin.qq.com/s/2ulVC3L3w3YLcN4QS6lEvA) [# 自己动手开发一个 Web 服务器(三)《https://wx.zsxq.com/mweb/views/weread/search.html?keyword=A》](https://mp.weixin.qq.com/s/Yn_4XhwNSAuqNFGAilSmAA) [# 自己动手开发一个 Web 服务器(三)《https://wx.zsxq.com/mweb/views/weread/search.html?keyword=B》](https://mp.weixin.qq.com/s/B0CRXwKs8Z8FrW5tbEVHpg)


[#Web服务器工作原理详解(基础篇)](https://mp.weixin.qq.com/s/eb7xOT0-2uE9caaEfAqSCg)(就是轩辕大佬发的) [# Linux下Web服务器详解](https://mp.weixin.qq.com/s/RZFQLpgjHj1V89BWyT8pQA) [# Linux | 搭建Web服务器](https://mp.weixin.qq.com/s/X6u3SBhZ7A54-uczToD9Kw) [# 来写一个属于自己的Web服务器](https://mp.weixin.qq.com/s/W5eDKKcHwlHtc-ssWOWBAg) [# 开发一个属于自己的 web 服务器](https://mp.weixin.qq.com/s/zX8JGTQ-GwC2q63UuIQKFw) [# 如何开发一个web静态服务器](https://mp.weixin.qq.com/s/H_t4jPSiBdogYVscoqUVaA) [# 开发一个 web 服务器](https://mp.weixin.qq.com/s/EoDV6g93TzKMGDV-R12jqA) [# web服务器开发之理论篇](https://mp.weixin.qq.com/s/ufQ68pdC7ZR3aI2gKZdsgw) [# 手写一个 web 服务器!](https://mp.weixin.qq.com/s/cKgoSqIk97M1M9Q-gBOLBw) [# Python 高手之路:从零开始打造一个Web服务器](https://mp.weixin.qq.com/s/3OWFXRTfhL30twQF4UzFUQ)

https://t.zsxq.com/YNZNRnm

Last Updated: 2021/12/6 上午12:23:53
Contributors: Coding Zhang
+ + + diff --git a/docs/computer-networks/README.md b/docs/computer-networks/README.md index d8057ef..5f363ad 100644 --- a/docs/computer-networks/README.md +++ b/docs/computer-networks/README.md @@ -240,30 +240,26 @@ sidebarDepth: 4 1. 发送时延:主机或路由器发送数据帧所需要的时间。 - 计算公式:$\sqrt{3x-1}+(1+x)^2$ - - - -###### 正在整理...... - -$1 *2* 3$ - -$$1 *2* 3$$ - -$\sqrt{3x-1}+(1+x)^2$ - -[百度](https://baidu.com/)111 - - + 计算公式:$发送时延={数据帧长度(bit)}/{发送速率(bit/s)}$ 2. + ##### (5) ##### (6) + + + + + +###### 正在整理...... + + + #### 1.6.2 计算机网络的非性能特征