This commit is contained in:
周伟
2022-05-11 19:04:14 +08:00
parent 9440ac7291
commit d9c5ffd627
826 changed files with 0 additions and 481675 deletions

View File

@@ -1,820 +1,410 @@
<!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>13 我能给你安全感 - TCP.md.html</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.html">01 我应该站在谁的肩膀上 - OSI vs TCPIP模型.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/02 万丈高楼平地起- 物理层 + 数据链路层.md.html">02 万丈高楼平地起- 物理层 + 数据链路层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/03 OSI的灵魂就是我 - 网络层.md.html">03 OSI的灵魂就是我 - 网络层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/04 要快还是要稳你说好了 - 传输层.md.html">04 要快还是要稳你说好了 - 传输层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/05 是时候展现真正的技术了 - 应用层.md.html">05 是时候展现真正的技术了 - 应用层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/06 重回小学课堂 - 二进制101.md.html">06 重回小学课堂 - 二进制101.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/07 1+1 = 2吗 - 二进制的计算.md.html">07 1+1 = 2吗 - 二进制的计算.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/08 16进制又是个什么鬼 - 16进制的讲解.md.html">08 16进制又是个什么鬼 - 16进制的讲解.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/09 我想有个家 - 什么是IP地址.md.html">09 我想有个家 - 什么是IP地址.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/10 我可是住二环的人 - IP地址的组成和分类.md.html">10 我可是住二环的人 - IP地址的组成和分类.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/11 我已经没地方住了吗 - IPv6.md.html">11 我已经没地方住了吗 - IPv6.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/12 向左还是向右 - IP路由.md.html">12 向左还是向右 - IP路由.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/全解网络协议/13 我能给你安全感 - TCP.md.html">13 我能给你安全感 - TCP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/14 我那不为人知的秘密是什么 - TCP.md.html">14 我那不为人知的秘密是什么 - TCP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/15 不问收没收到,就问快不快 - UDP.md.html">15 不问收没收到,就问快不快 - UDP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/16 我为什么与众不同 - TCP高级篇拥塞模型.md.html">16 我为什么与众不同 - TCP高级篇拥塞模型.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/17 来,先看看我的家谱 - HTTP的身世.md.html">17 来,先看看我的家谱 - HTTP的身世.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html">18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/19 我老了,让我儿子来吧 - HTTP2.md.html">19 我老了,让我儿子来吧 - HTTP2.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/20 稳重的大外甥 - HTTPS.md.html">20 稳重的大外甥 - HTTPS.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/21 HTTP的高级篇 - HTTPClientJava.md.html">21 HTTP的高级篇 - HTTPClientJava.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/22 想来我家,你自己查呀 - DNS.md.html">22 想来我家,你自己查呀 - DNS.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/23 来的早,不如来得巧 - NAT.md.html">23 来的早,不如来得巧 - NAT.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/24 辛苦的邮政 - SMTP.md.html">24 辛苦的邮政 - SMTP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/25 你就是看不见我 - VPN.md.html">25 你就是看不见我 - VPN.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/26 黑客的好帮手 - SSH.md.html">26 黑客的好帮手 - SSH.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html">27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/28 你怎么证明你就是你 - 身份验证和访问控制.md.html">28 你怎么证明你就是你 - 身份验证和访问控制.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html">29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html">30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/31 如何保护我的考研资料 - 网络攻击防范.md.html">31 如何保护我的考研资料 - 网络攻击防范.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/32 Linux网络安全 - 安全实战.md.html">32 Linux网络安全 - 安全实战.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/33 结语.md.html">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>13 我能给你安全感 - TCP</h1>
<p>不知不觉我们已经来到了第四部分这里我们会开始来详细的讲解TCP和UDP也就是传输层部分。我们首先来看一下协议中的王者TCP。相信你最熟悉的就是三次握手了。</p>
<p>我们上一章详细讲解了IP也就是第三层网络层的主要协议现在我们开始看一下传输层的重要协议TCP。</p>
<h2>TCP</h2>
<p>TCP的全称是Transmission Control Protocol。这个协议的目的就是创建一个Session通过这个Session来传输数据。</p>
<p>我们在数据链路层查看了源和目标Mac地址并看到了这些Mac地址是使我们能够将流量从一台设备发送到其自己局域网中的另一台设备。我们又看了网络层也就是IP了解了网络层的地址如何使我们能够从一个网络上的一个设备与世界其他地方的另一个设备进行通信。现在又到了TCPTCP所要做的就是允许我们在网络上的两个设备之间创建会话然后通过这个会话来传输数据。</p>
<p>我们现在来看看它是如何工作的。TCP使用一种称为客户端服务器模型的东西。比如我有一台PC或一个客户端和一个Web服务器。我的客户端被认为是客户因为运行某一种Web浏览器比如Chrome或者FireFox。这个Web浏览器就是一个HTTP的客户端。HTTP超文本传输协议是我们用于传输Web页面的协议)。在HTTP的服务端需要有完全不同的软件在运行也就是我们说的服务器服务器是有很多的选择比如Apache是一个非常流行的开源Web服务器。当然还有老牌的微软IIS等等。现在这里要做的就是客户端看做是一个设备说“你能给我发送网站吗”。服务器会回答说给你这是你要的网站”。但是我们使用的是倒叙模式在我们能够做到这一点之前我们必须在两方之间建立一个会话。</p>
<p><img src="assets/20210202133201608.png" alt="在这里插入图片描述" /></p>
<h2>三次握手和四次挥手</h2>
<p><img src="assets/20210202133309953.png" alt="在这里插入图片描述" /></p>
<p>通过我这个灵魂画手的画作你应该可以看出三次握手的精髓那就是客户端会先向服务器端发送一个SYN然后服务器端会发送回一个SYN-ACK。ACK一般表示收到然后客户端会再回复一个ACK。经过了三次通信也就是三次握手之后这才能建立起连接说明双方都没有问题可以开始唠嗑了。就好像我们之前的例子还是美国队长和黑寡妇姐姐唠嗑。聊完之后。不能突然就断开了吧。这样太没有礼貌了。所以需要经过一个流程也就是我们说的四次分手。这是一个非常优雅的过程。首先服务端会发一个FIN消息。然后客户端回一个FIN-ACK。然后客户端会发送一个自己的FIN 消息。然后服务器发送一个FIN-ACK。这样双方就终止了通信。就好像黑寡妇姐不想和美国队长说话了她会说我要去给绿巨人做饭了BYE BYE然后美国队长会说好您了收到。那我也去给小美队抱孙子去了这是两条消息黑寡妇说好的您快去吧。这样两人就挂断了通信。这样是不是很容易理解。当然4次分手不是唯一的断开的方式。还有一种方式叫做Reset。</p>
<p>我们把整个的通信过程退后两步来看。想象一下客户端只是向Web服务器询问该网页。服务器回应说这是网页。现在可能发生的事情是任何时候任何一端都可以发送TCP重置消息reset。为什么它会发送TCP重置消息而不执行四次分手呢因为有时我们可能在PC和Web服务器之间安装了一个安全设备如果网络中发现某些不应该在网络上传入和传出的内容比如小电影一不小心就飙车了但是开车犯法呀切记。这些设备的安全措施可能会发送TCP重置。该设备通常被编程为发送TCP重置并仅关闭两个设备之间的通信所以这种情况的发生是很不友好的。其中一端在这种情况下可能是Web服务器将发送TCP重置。一旦这个客户收到了RST连接就会立即关闭。我们将无法再发送数据。哪端都可以发送这个RESET。任何时候都可以。完全取决于你使用的软件。还是看我们的例子。美国队长和黑寡妇聊天但是呢黑寡妇的老公在另一个房间默默的拿起了电话在监听这时候美国队长和志玲姐姐开个玩笑你的内衣真好看。绿巨人觉得你怎么可以开车和美国队长说了一句你给我滚RST然后就挂断了。这样是不是更容易理解。这些只是开玩笑的例子呀不要当真是为了加深你的理解如果你是任何一位的粉丝有冒犯到我提前说个对不起呀</p>
<p><img src="assets/20210202133228851.png" alt="在这里插入图片描述" /></p>
<h2>端口号</h2>
<p>我们看传输层寻址之前再来穿插一下端口号(我的思维就是这么活跃)。</p>
<p>端口号的范围从0到65535通过端口号被分为三个不同的类别。</p>
<ul>
<li>公认端口Well-Known0-1023</li>
<li>注册端口Registered1024-49151</li>
<li>临时端口Ephemeral49152-65535</li>
</ul>
<p>服务器端口号是为非常特定的服务器应用程序层协议设计的。客户端的这些临时端口号主要用于一个会话的临时时间段然后可以将该端口号扔掉或放回池中以后我们可能会也可能不会重复使用该端口号。这些客户端端口号将在我们网络上的不同TCP会话中重复使用。</p>
<p>你想一下,你所熟悉的公认端口号有哪些?</p>
<ul>
<li>HTTP - 80</li>
<li>HTTPS - 443</li>
<li>FTP - 20,21</li>
<li>SSH - 22</li>
<li>Telnet - 23</li>
</ul>
<h4>公认端口</h4>
<p>这些端口已经存在很长时间了是经过实践检验的协议所以称为公认端口。诸如Http使用端口80https这是HTTP的加密版本使用443。FTP出于不同的目的使用了两个不同的端口号这使它使用起来有点麻烦和复杂尤其是对于通过防火墙。SSH使用端口22。Telnet使用端口23。当然还有很多就不一一列举了。</p>
<h4>注册端口</h4>
<p>然后是注册端口它们可以是官方的也可以是非官方的。官方的意思就是该自定义应用程序的组织已经将使用的端口号注册到了Internet Assigned Numbers AuthorityIANA。比如微软的Microsoft Windows Internet Name Service (WINS)。它就是注册了端口号1512。还比如Cisco HSRP或者叫做Hot Standby Router Protocol注册了端口号1985。以及Microsoft Point-to-Point Tunneling Protocol (PPTP)点到点协议注册了1723。这三个例子都是正式注册的端口号。</p>
<p>还有另一种程序当然就是非官方的比如游戏Civilization文明。使用的就是端口号2033。这意味着我们知道这个游戏将使用这个端口但尚未正式注册。这是否意味着我们不能使用它了呢当然不是。我们可以使用它。我们只需要知道某个特定的程序会使用它即可。</p>
<p>所有这些公认和注册的端口号会赋给应用层上的程序。服务器会监听这些端口号。</p>
<p>我们还是用例子来讲解。看下图。</p>
<p><img src="assets/202102021333371.png" alt="在这里插入图片描述" /></p>
<p>我有一个PC的服务端在左边右边我放一个路由器在这个路由器端我配置的服务器是telnet将路由器配置为服务器似乎有点奇怪。但是在进行TCP通信时请记住我必须有一个设备作为客户端而另一个设备必须是服务器。所以为了使我的客户端可以Telnet到Router上我必须在路由器上启用Telnet服务或者设置Telnet服务器。PC端我将使用我们熟悉的Putty作为客户端来访问。现在这个路由器一直在监听端口23客户端将选择一些临时端口号比如49160用作其在传输层的源端口地址。我现在想将消息从客户端发送到服务端。我要使用源端口49160和目标端口23代表Telnet。这个时候需要做的是建立一个Segment也就是协议数据单元。</p>
<p><img src="assets/20210202133402425.png" alt="在这里插入图片描述" /></p>
<p>从上图可以看出这个数据单元里包含一个源端口一个目的端口一些标志一个序列号一个确认号然后是我们的有效负载。在那个标志的地方就是我们要发送的信息还记得前面握手和分手时候发送的SYNACK等等吗然后我们的客户端要发送这个给Router其实协议数据单元只是包裹的一部分。看下图我们来认识一下要发送的数据单元是什么样子。</p>
<p><img src="assets/20210202141228321.png" alt="在这里插入图片描述" /></p>
<p>而这个数据单元实际上只是包裹Packet的一部分。</p>
<p><img src="assets/20210202141300879.png" alt="在这里插入图片描述" /></p>
<p>从图上你可能会注意到我使用的地址是10.0.0.10:49160和10.0.0.1:23这个就是我们所说的SocketSocket就是IP地址和端口号的组合。我们下一步是要把我们的Packet做为一部分放到Frame里然后发送出去。然后路由器也就是服务器那边会像剖洋葱一样一层层的剖开把Packet从Frame里取出再把Segment从Packet里取出。然后再做出一个类似的动作形成一个新的SegmentPacketFrame然后再发送给客户端。。。这样是不是就形成了三次握手。然后就可以开始传输数据了。听我这么讲完是不是不仅仅知道了三次握手还知道了应该怎么握手以及握手前有没有洗手。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/全解网络协议/12 向左还是向右 - IP路由.md.html">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/全解网络协议/14 我那不为人知的秘密是什么 - TCP.md.html">下一页</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":"709976386bc53cfa","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>

View File

@@ -1,770 +1,385 @@
<!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>28 你怎么证明你就是你 - 身份验证和访问控制.md.html</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.html">01 我应该站在谁的肩膀上 - OSI vs TCPIP模型.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/02 万丈高楼平地起- 物理层 + 数据链路层.md.html">02 万丈高楼平地起- 物理层 + 数据链路层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/03 OSI的灵魂就是我 - 网络层.md.html">03 OSI的灵魂就是我 - 网络层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/04 要快还是要稳你说好了 - 传输层.md.html">04 要快还是要稳你说好了 - 传输层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/05 是时候展现真正的技术了 - 应用层.md.html">05 是时候展现真正的技术了 - 应用层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/06 重回小学课堂 - 二进制101.md.html">06 重回小学课堂 - 二进制101.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/07 1+1 = 2吗 - 二进制的计算.md.html">07 1+1 = 2吗 - 二进制的计算.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/08 16进制又是个什么鬼 - 16进制的讲解.md.html">08 16进制又是个什么鬼 - 16进制的讲解.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/09 我想有个家 - 什么是IP地址.md.html">09 我想有个家 - 什么是IP地址.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/10 我可是住二环的人 - IP地址的组成和分类.md.html">10 我可是住二环的人 - IP地址的组成和分类.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/11 我已经没地方住了吗 - IPv6.md.html">11 我已经没地方住了吗 - IPv6.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/12 向左还是向右 - IP路由.md.html">12 向左还是向右 - IP路由.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/13 我能给你安全感 - TCP.md.html">13 我能给你安全感 - TCP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/14 我那不为人知的秘密是什么 - TCP.md.html">14 我那不为人知的秘密是什么 - TCP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/15 不问收没收到,就问快不快 - UDP.md.html">15 不问收没收到,就问快不快 - UDP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/16 我为什么与众不同 - TCP高级篇拥塞模型.md.html">16 我为什么与众不同 - TCP高级篇拥塞模型.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/17 来,先看看我的家谱 - HTTP的身世.md.html">17 来,先看看我的家谱 - HTTP的身世.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html">18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/19 我老了,让我儿子来吧 - HTTP2.md.html">19 我老了,让我儿子来吧 - HTTP2.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/20 稳重的大外甥 - HTTPS.md.html">20 稳重的大外甥 - HTTPS.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/21 HTTP的高级篇 - HTTPClientJava.md.html">21 HTTP的高级篇 - HTTPClientJava.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/22 想来我家,你自己查呀 - DNS.md.html">22 想来我家,你自己查呀 - DNS.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/23 来的早,不如来得巧 - NAT.md.html">23 来的早,不如来得巧 - NAT.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/24 辛苦的邮政 - SMTP.md.html">24 辛苦的邮政 - SMTP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/25 你就是看不见我 - VPN.md.html">25 你就是看不见我 - VPN.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/26 黑客的好帮手 - SSH.md.html">26 黑客的好帮手 - SSH.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html">27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/全解网络协议/28 你怎么证明你就是你 - 身份验证和访问控制.md.html">28 你怎么证明你就是你 - 身份验证和访问控制.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html">29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html">30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/31 如何保护我的考研资料 - 网络攻击防范.md.html">31 如何保护我的考研资料 - 网络攻击防范.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/32 Linux网络安全 - 安全实战.md.html">32 Linux网络安全 - 安全实战.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/33 结语.md.html">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>28 你怎么证明你就是你 - 身份验证和访问控制</h1>
<h5>AAA</h5>
<p>我们先从AAA开始你一定很迷惑什么是AAA英文就是authentication, authorization, and accounting- 身份验证,授权和审计。我们先来看一下身份验证部分。</p>
<ol>
<li>身份验证就是你的用户名和密码。你输入用户名和密码以后,以此来获得进入的权限。没有此处的第二个组件,用户名和密码显得有一点毫无意义那就是 - 授权</li>
<li>授权就是你的特权和访问权限。换句话说,也就是在你登入的系统中,你可以访问哪些软件,你可以访问哪些文件共享,你可以访问哪些计算机和服务器?因此,你的用户名和密码与授权信息是相关联的,从而告诉你可以访问的内容。</li>
<li>从审计的角度来看,这里的最后一个组件很重要,你试想一下,如果出现问题,我们需要对问题进行故障排除,比如员工有没有按照预期的方式行事,我们会去将审查谁在何时何地做了什么;这就是这里的审计部分。</li>
</ol>
<p>所以我们有了身份验证那就是我们的用户名和密码授权该用户有权访问什么最后是审计该用户做了什么他们什么时候做的因此AAA身份验证就是这样。它是用户名访问权限以及它们所做的记录。有两个组织支持在现代网络中使用的AAA服务器。思科是其中之一。它称为Terminal Access Controller Accesses-Control System Plus- “终端访问控制器访问控制系统Plus”或简称为TACACS。</p>
<h5>身份验证</h5>
<p>我们在这里来对身份验证进行一下深度研究。有本地身份验证可以在其中对工作站本身进行身份验证。在家用设备中如果你在家中有一台计算机或笔记本电脑你最有可能通过无线网络将其连接到Internet但是你可能没有要连接到服务器。此处的本地身份验证只是用户名和密码使你可以直接在本地计算机上访问资源。一般会被分为两类-管理员和普通用户。与管理员相比,通常普通用户只是具有查看的权限,而管理员具有在工作站上配置的权限,尤其是对配置文件(这个很好理解,不需要解释呀)。</p>
<p>本地的身份验证只适用于用于本地工作站本身比如你电脑的登录输入的用户名和密码只是针对你的笔记本。域名Domain身份验证意味着我们将登录一台要加入某种Domain的计算机。通常是使用Active Directory这意味着我们将用户名和密码发送到domain控制器。然后域控制器会将我们的设备添加到该domain中。当我们将设备连接到域控制器时我们将使用称为Kerberos的协议来做该Kerberos协议是开源的由MIT及其包括IETF的联盟开发。 Kerberos所做的是对通信进行某种加密以便当我们向服务器发送用户名和密码时对通信进行加密这就是这里的组成部分之一。另一个组件是确保发送用户名和密码的计算机是他自己而不是在该网上其他试图假冒该设备的其他设备。因为这里可以进行某些类型的中间人攻击即侦听设备和服务器的通信然后稍后将通信重播回服务器以欺骗服务器。Kerberos是服务器和客户端验证其身份的一种方式。除此之外它还会加密该通信以允许该用户名和密码成功到达服务器对其进行验证以查看是否允许该设备加入domain。</p>
<p>当你需要使用域身份验证时或者是你早上准备开始工作了打开你的电脑输入用户名和密码来登录。这将与域控制器进行核对以验证你是谁并允许你登录并访问设备上的应用程序。现在假设你在会计部门工作并且需要使用一些会计软件比如QuickBook并且这个软件的依赖位于我们数据中心中的服务器。这里的问题是在大型公司你每天都会使用很多不同的程序。你可能有一个内部网站和电邮。你可能会使用特定的专业软件例如刚才提到的Quickbook你可能还会使用某些绘图软件等等。可能需要使用许多很多软件大公司就是有钱全是买license。这些软件中的大多数都将具有某种身份验证系统要确保只有你才能使用该软件该软件会阻止那些很熟练的程序员或其他工种但是不是会计的人。这就是术业有专攻你不是会计不要动我的软件。因此我们一般会使用一种叫做LDAP的东西。现在LDAP已内置到Microsoft Server系统特别是Active Directory它允许我们执行的操作是允许我们将用户名和密码发送到我们的比如会计软件。然后这个软件服务器会说“嘿Active Directory”该用户是否有权使用这个软件如果是的话说明此用户已被授权然后该用户就可以登录到这个会计软件。</p>
<p>以上的例子其实很接近于所谓的单点登录现在单点登录很火呀。单点登录是一个很重要的概念因为这意味着我只需要知道一个用户名和密码。这就和你的个人生活有一点不同比如在我的个人生活中我需要我的Gmail帐户密码我的netflix的帐户密码我的Facebook帐户密码我的HBO账户我的银行账户等等。对于所有不同的系统我都需要所有不同的用户名和密码你可以一个密码走天下但是会不安全并且没有一种很好的方法将它们统一在一起。 Facebook和Google对其单点登录产品进行了一些尝试但是效果不是那么好。可是当我们在企业中使用时效果就不一样了。用户只需要知道一个用户名和密码就会感到非常满意。此外它还提供了无与伦比的安全性因为你不再被迫去创建许多密码并且还需要记住许多不同的用户名和密码的组合。</p>
<p>你想一下这里是不是有一个小问题那就是假设用户名和密码遭到泄露是不是意味着拥有该用户名和密码的任何人都可以将设备加入网络中的domain这样会不会危险。因此我们可以采取的预防措施之一是向网络上的设备颁发证书。在设备联机时可以通过将证书的一部分发送到域控制器来验证它是否属于这个domain我喜欢用英文单词在这里中文的翻译总感觉有一点点变扭。域控制器可能说是的此设备在我们的网络上有效是自己人放进来把。这比仅使用用户名和密码来使设备加入Active Directory域要好一些因为现在Active Directory域控制器必须专门为我们要加入domain的设备颁发证书。因此我们使用证书和一些凭据在此处登录。这将防止有人携带自己的设备并将其加入domain。这就好比什么呢比如说天地会的密码是”天王盖地虎宝塔镇河妖“是不是每一个知道这个口号的人都是自己人呢不一定吧。你只要偷听到了就会知道但是你有一个证书上面陪着你的照片这样是不是就不好蒙混过关了可能有同学会说这样还是有漏洞不要抬扛呀任何软件和方案都有安全问题只要你钻研都能攻克只是简单和难得区别。我们通常会为无线设备使用基于证书的身份验证。这也确实非常有效。</p>
<h3>日志和审核</h3>
<p>在AAA中最后一个就是审核日志是属于审核的一部分。我们需要记录所有的traffic这使我们可以在将来审核这部分。美国有一个法律那就是关于美国健康法的一部分是医疗记录系统的用户不得查看不在其直接护理下的任何患者的健康信息。比如你在医院工作发现蔡x坤是你的病人你有接触病历软件的权限你可能想了解阿坤怎么了。可能是出于好奇。可能希望将该信息出售给某家机构来引起轰动。所以如果让你来设计这个审核来防止这种情况发生你怎么做呢设计目的是使我们能够准确的记录谁在何时何地做了什么然后出现问题的时候可以审核然后说那个人这样做是对的吗</p>
<h3>多因素身份验证</h3>
<p>我前面应该有提到过这个我们现在来细谈一下多因素身份验证。现在是我们有史以来第一次能够真正实现多因素身份验证的年代。尽管仍然存在很多挑战但比以前要好很多很多。多因素身份验证这个想法是收集有关你的东西与你有关的东西。因此我们在这里需要做的一件事情是你知道的事情你拥有的一些东西你是谁你在哪你在做什么。让我们看一下其中的例子。所以你知道的事情在这里可以是你的用户名。自定义ID一般会是你的电邮地址因为用户名通常是你的用户名而电邮地址一般都是公开的。所以公司不希望你的用户名成为唯一的标准这就是为什么我们还需要添加密码。因此你拥有或者说知道用户名和密码这就是我们对用户名和密码的单因素身份验证。这是我们知道的东西。我们可以通过添加我们拥有的东西来增强它。我们使用了一些我们知道的东西例如用户名密码我们还可以添加一些我们有的东西比如钥匙卡钥匙扣某种类型的数字生成器甚至可以是我们的智能手机。因此我们在这里所要做的就是输入用户名和密码然后可能还要刷智能卡。在银行工作的同学可能会知道员工会得到一些小的安全身份证这是一个随机生成数字的小设备。因此每隔30秒左右会弹出一个新号码然后你将使用该号码以及用户名和密码来在系统中进行身份验证。因为生成的数字有些随机很难预测。我们也可以使用智能手机来做同样的事情。还记得我前面提到的一个AppAuthenticator。当我们要登录到系统时我们可以请求我们的代码登录。然后我们登录到系统中可以输入我们的用户名密码然后还有就是这个App里的一个数字。这里的想法是你的用户名和密码就是你所知道的。如果有人出于某种原因得到了这些密码也许你写下了你的用户名和密码然后又有人从你那里偷了密码则可以使用第三种身份验证方式。</p>
<p>因此窃取你信息的人将无法登录除非他们有此第三因素。我们可以在这里使用的另一种东西就是你自己。这可能很简单例如指纹脸部扫描视网膜扫描手掌扫描。通常这将是某种生物特征识别而你很难复制给其他人。因此也许你会再次输入用户名密码和指纹。智能手机使用指纹读取器。有时指纹读取器仅用作身份验证的一种形式。这有点危险因为如果有人可以访问我的指纹并能够复制它那么他们实际上可以在我的手机上进行身份验证。但是手机上还有其他应用程序需要更多并且还需要用户名密码和指纹才能进入。这里的另一个因素是你所在的地方。我马上想到的一个例子就是这项技术我知道苹果称之为HomeKit。你可以做的就是在你要为自己做某事的地方使用它比如你在自己的家中你可以使用智能手机打开锁。这里是不需要用户名和密码的。从字面上看它将只是在你所处的某个地方你所拥有的某个事物以及你是谁。可以你你在家附近拥有你的智能手机并将指纹放在智能手机上。然后这三件事加在一起就可以解锁你的房门。因此在某个地方您可以将自己拥有的东西和自己所有的东西结合起来使用例如做一些事情例如打开房屋的门或者在回家后打开室内的灯。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/全解网络协议/27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/全解网络协议/29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html">下一页</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":"7099765bff413cfa","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>