This commit is contained in:
周伟
2022-05-11 18:46:27 +08:00
commit 387f48277a
8634 changed files with 2579564 additions and 0 deletions

View File

@@ -0,0 +1,758 @@
<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>05 是时候展现真正的技术了 - 应用层.md</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/专栏/全解网络协议/01 我应该站在谁的肩膀上 - OSI vs TCPIP模型.md">01 我应该站在谁的肩膀上 - OSI vs TCPIP模型.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/02 万丈高楼平地起- 物理层 + 数据链路层.md">02 万丈高楼平地起- 物理层 + 数据链路层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/03 OSI的灵魂就是我 - 网络层.md">03 OSI的灵魂就是我 - 网络层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/04 要快还是要稳你说好了 - 传输层.md">04 要快还是要稳你说好了 - 传输层.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/全解网络协议/05 是时候展现真正的技术了 - 应用层.md">05 是时候展现真正的技术了 - 应用层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/06 重回小学课堂 - 二进制101.md">06 重回小学课堂 - 二进制101.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/07 1+1 = 2吗 - 二进制的计算.md">07 1+1 = 2吗 - 二进制的计算.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/08 16进制又是个什么鬼 - 16进制的讲解.md">08 16进制又是个什么鬼 - 16进制的讲解.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/09 我想有个家 - 什么是IP地址.md">09 我想有个家 - 什么是IP地址.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/10 我可是住二环的人 - IP地址的组成和分类.md">10 我可是住二环的人 - IP地址的组成和分类.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/11 我已经没地方住了吗 - IPv6.md">11 我已经没地方住了吗 - IPv6.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/12 向左还是向右 - IP路由.md">12 向左还是向右 - IP路由.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/13 我能给你安全感 - TCP.md">13 我能给你安全感 - TCP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/14 我那不为人知的秘密是什么 - TCP.md">14 我那不为人知的秘密是什么 - TCP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/15 不问收没收到,就问快不快 - UDP.md">15 不问收没收到,就问快不快 - UDP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/16 我为什么与众不同 - TCP高级篇拥塞模型.md">16 我为什么与众不同 - TCP高级篇拥塞模型.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/17 来,先看看我的家谱 - HTTP的身世.md">17 来,先看看我的家谱 - HTTP的身世.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md">18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/19 我老了,让我儿子来吧 - HTTP2.md">19 我老了,让我儿子来吧 - HTTP2.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/20 稳重的大外甥 - HTTPS.md">20 稳重的大外甥 - HTTPS.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/21 HTTP的高级篇 - HTTPClientJava.md">21 HTTP的高级篇 - HTTPClientJava.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/22 想来我家,你自己查呀 - DNS.md">22 想来我家,你自己查呀 - DNS.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/23 来的早,不如来得巧 - NAT.md">23 来的早,不如来得巧 - NAT.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/24 辛苦的邮政 - SMTP.md">24 辛苦的邮政 - SMTP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/25 你就是看不见我 - VPN.md">25 你就是看不见我 - VPN.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/26 黑客的好帮手 - SSH.md">26 黑客的好帮手 - SSH.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/27 你可以得到我的心,却得不到我的人 - 物理安全设备.md">27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/28 你怎么证明你就是你 - 身份验证和访问控制.md">28 你怎么证明你就是你 - 身份验证和访问控制.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/29 我要怎么藏好我的考研资料 - 网络攻击(一).md">29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/30 我要怎么藏好我的考研资料 - 网络攻击(二).md">30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/31 如何保护我的考研资料 - 网络攻击防范.md">31 如何保护我的考研资料 - 网络攻击防范.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/32 Linux网络安全 - 安全实战.md">32 Linux网络安全 - 安全实战.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/33 结语.md">33 结语.md.html</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content" style="max-width: 960px; margin: 0 auto;
overflow-x: auto;
overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><h1>05 是时候展现真正的技术了 - 应用层</h1>
<p>可能细心的小可爱-你已经观察到了我们虽然讲的是OSI章节却是按照TCP/IP四层来讲的。所以我们今天会把会话层表示层以及应用层一起讲。之所以这么讲就是也是因为第五和第六层可以不用考虑。在现代网络中我认为它们并不完全重要不重要在这里是说你在debug的时候可以不用考虑即使是网络工程师当然作为软件工程师的你也不需要考虑这些。我同意其他某些人的观点存在即合理。有些协议确实在第五层和第六层起作用当然是因为之前网络还没有那么发达或者类似于IBM这种一家独大的时候可以做一些事情来垄断现在已经不存在了就好像IBM这个公司你肯定知道但是提到TOP IT公司你还会想到IBM吗如果回答会那你可能有点过时了哈哈。让我们再看回要讨论的问题。在这里是不是五个六个和七个之间的区别并不是那么重要了。</p>
<h3>会话层</h3>
<p>会话层提供的服务可使应用建立和维持会话并能使会话获得同步。会话层使用校验点可使通信会话在通信失效时从校验点继续恢复通信。这种能力对于传送大的文件极为重要。会话层表示层应用层构成开放系统的高3层面对应用进程提供分布处理对话管理信息表示恢复最后的差错等。</p>
<h3>表示层</h3>
<p>表示层是为通信提供的一种公共语言以便能进行操作。这种类型的服务之所以需要是因为不同的计算机体系结构使用的数据表示法不同。例如IBM主机使用EBCDIC编码而大部分PC机使用的是ASCII码。在这种情况下便需要会话层来完成这种转换。现在当我们使用键盘输入某些内容时发生的事情是我们使用了一种称为ASCII的格式。 ASCII的作用是将每个字母小写和大写以及键盘上的所有符号都转换为十六进制值。在本课程的稍后部分我们将讨论十六进制编号系统但是现在只知道这是一种与十进制有点不同的计数方法但实际上它非常相似。它只从0到15计数但不能由单个值到15计数因此它从0到9计数然后将ABCDE和F加进来凑到15。现在仅需了解ASCII会将键盘上的任何字母都转换为该十六进制值。所以这里A是41。L是十六进制的6C数字实际上是一个数字。空格是20Y是79。如果我对其余所有字符都执行此操作则得到的所有基数都属于我们均以ASCII编写。你可以在这里看到一些相似之处对吗它表示为41 6c 6c 2079。好吧这就是所有空间y。因此在ASCII中我们具有这种格式。ASCII是用于编码文本的开放标准。在20世纪70年代IBM是一家规模庞大的硬件销售公司IBM希望与众不同以便你必须购买他们的硬件及其所有东西才能搭配使用因此他们使用了一个称为EBCDIC的不同编码系统EBCDIC所做的与ASCII相同。</p>
<p>它为不同的键盘字母分配了不同的十六进制值。表示层为我们做的是如果你有一个运行非IBM系统的大型系统并且需要与运行IBM的业务系统联网则需要某种协议将ASCII转换为EBCDIC你可以进行翻译以便IBM机器可以理解该语言而非IBM机器可以理解所传输的信息。表示层具有一些允许这种情况发生的协议。有时我们拥有允许在表示层进行加密的协议其中包括格式化图片等。在现代网络中大多数这种格式设置完全在网络之外的应用程序内部进行。 EBCDIC在很大程度上已经死了我们不再需要它了。</p>
<p>因此表示层最终是有点过时的协议。这里有些过时的第二层是会话层。在会话层运行的协议称为Citrix ICA协议。不过在大多数情况下对于设计防火墙网络故障排除和支持的网络工程师而言ICA协议在大多数情况下也可以在应用程序层运行。我们只是在规范中正式写了它即ICA是第五层协议而不是第七层协议。作为网络技术人员当你进行故障排除时不必担心自己是第五层还是第六层问题。所以这也是为什么现代的网络都是通过TCP/IP协议来进行实现的。OSI固然好让每一层都那么的清晰明了。但是作为程序员的你一定清楚多一层就多一点复杂度。多了两层肯定是有它的作用当然相对应的也添加了“多余”。所以还是那句话OSI是标准提到它就知道7层协议。它是那个标准它是那个元老但是随着网络的更新换代。很多东西可能已经不需要了。这一层基本就是介绍当做一个历史来看就好了。不需要记住</p>
<p><img src="assets/20210202132400424.png" alt="在这里插入图片描述" /></p>
<h3>现在我们来看一下应用层</h3>
<p>我在这里问一个很经典的面试题阿里有问过我这个面试题哦当你在浏览器上输入www.taobao.com会发生什么自己试着来回答一下。 敲Enter之后即告诉浏览器我想在www.taobao.com上获取该网页其中包含要观看的视频照片和文字。当你这样做时该https://www.taobao.com与服务器本身上的网站格式关联。所以我需要一个协议该协议可使我将服务器上的网站转移到客户端上的Web浏览器。我使用称为超文本传输协议或HTTP的协议。此外HTTPS为其加密版本。超文本传输协议的作用是将网页以称为超文本的格式编写这是文本文档的基本格式用于指示有关如何在Web浏览器中呈现信息的指令。这个超文本文档实际上是一个文件就像Microsoft Word文档一样。我们可以使用HTTP或HTTPS传输该文件以获取加密版本。这里是HTTP实际上是将网站从服务器传输到客户端的协议也就是应用程序层协议OSI模型的第七层。我没有提及DNS以及其他一些发生的事情因为我只是用这个作为一个例子。所以你面试的时候这个不是面试的答案哦只是提醒一下</p>
<p>如果我们现在看一下去掉第五层和第六层的OSI模型那么我们就有了物理层即电缆。我们具有数据链路层该层允许一个设备与下一个设备对话而下一个设备与下一个设备对话。我们拥有网络层它为我们提供了一种寻址方案和一种机制可将流量从Internet的一路一直移动到Internet的另一端。我们有第四层即传输层它使我们可以进行呼叫建立。因此如果我们知道目的地的IP地址则可以使用传输层和TCP来表示我想和你一起传输一些数据对吗然后我们有了应用程序层它实际上将负责将所需的应用程序从服务器一直移动到客户端。</p>
<p>我们到这里就已经把OSI的7层模型都大致的讲解完了希望你看完之后对OSI的7层模型有了一个全新的认识。当然其中还有很多没有细讲的东西比如IPTCPUDP。但是你已经比过去的你知道的要多得多了。我希望你对OSI模型已经有了一个大概的认识知道了每一层的作用和一些有用的协议。当然你对具体的协议还没有理解的那么深刻。但是不用着急我们后面会慢慢的讲解。但是在这之前我们要回归一下最基本的东西也就是二进制如果你很熟悉完全可以跳过下一章但是我相信你还是能从我讲的学到你不知道的知识。即使不是很熟悉你应该也多少有一些了解希望你可以温故而知新。有一个新的认识。</p>
<p>最后我们再来看一下在应用层都有什么协议。FTPWWWTelnetNFSSMTPGatewaySNMPHTTP 。还是和之前一样我们试着来匹配一下做一下月老看看你应该怎么连线。先来看一下FTP全称是File Transfer Protocol。文件传输协议是一种标准的网络协议用于在计算机网络上的客户端和服务器之间传输计算机文件。 FTP建立在客户端-服务器模型体系结构上在客户端和服务器之间使用单独的控制和数据连接。因为FTP 是文件传输协议是对话协议不属于基础层所以它就被定义在上层了也就是应用层了对不对。还有我们后面讲的重中之重HTTPHypertext Transfer Protocol- 超文本传输协议:它是用于分布式,协作的超媒体信息系统的应用程序层协议。从定义上已经知道了它是应用层的协议了。我就不一一的讲解了。感兴趣的你可以去查一下上面列的每一个协议。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/全解网络协议/04 要快还是要稳你说好了 - 传输层.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/全解网络协议/06 重回小学课堂 - 二进制101.md">下一页</a>
</div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"709976260ba73cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>