mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-29 22:56:42 +08:00
330 lines
19 KiB
HTML
330 lines
19 KiB
HTML
<!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>12 向左还是向右 - IP路由.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模型</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/02 万丈高楼平地起- 物理层 + 数据链路层.md.html">02 万丈高楼平地起- 物理层 + 数据链路层</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/03 OSI的灵魂就是我 - 网络层.md.html">03 OSI的灵魂就是我 - 网络层</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/04 要快还是要稳你说好了 - 传输层.md.html">04 要快还是要稳你说好了 - 传输层</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/05 是时候展现真正的技术了 - 应用层.md.html">05 是时候展现真正的技术了 - 应用层</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/06 重回小学课堂 - 二进制101.md.html">06 重回小学课堂 - 二进制101</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/07 1+1 = 2吗? - 二进制的计算.md.html">07 1+1 = 2吗? - 二进制的计算</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/08 16进制又是个什么鬼? - 16进制的讲解.md.html">08 16进制又是个什么鬼? - 16进制的讲解</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/09 我想有个家 - 什么是IP地址.md.html">09 我想有个家 - 什么是IP地址</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/10 我可是住二环的人 - IP地址的组成和分类.md.html">10 我可是住二环的人 - IP地址的组成和分类</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/11 我已经没地方住了吗 - IPv6.md.html">11 我已经没地方住了吗 - IPv6</a>
|
||
</li>
|
||
<li>
|
||
<a class="current-tab" href="/专栏/全解网络协议/12 向左还是向右 - IP路由.md.html">12 向左还是向右 - IP路由</a>
|
||
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/13 我能给你安全感 - TCP(一).md.html">13 我能给你安全感 - TCP(一)</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/14 我那不为人知的秘密是什么 - TCP(二).md.html">14 我那不为人知的秘密是什么 - TCP(二)</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/15 不问收没收到,就问快不快 - UDP.md.html">15 不问收没收到,就问快不快 - UDP</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/16 我为什么与众不同 - TCP高级篇(拥塞模型).md.html">16 我为什么与众不同 - TCP高级篇(拥塞模型)</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/17 来,先看看我的家谱 - HTTP的身世.md.html">17 来,先看看我的家谱 - HTTP的身世</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html">18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/19 我老了,让我儿子来吧 - HTTP2.md.html">19 我老了,让我儿子来吧 - HTTP2</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/20 稳重的大外甥 - HTTPS.md.html">20 稳重的大外甥 - HTTPS</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/21 HTTP的高级篇 - HTTPClient(Java).md.html">21 HTTP的高级篇 - HTTPClient(Java)</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/22 想来我家,你自己查呀 - DNS.md.html">22 想来我家,你自己查呀 - DNS</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/23 来的早,不如来得巧 - NAT.md.html">23 来的早,不如来得巧 - NAT</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/24 辛苦的邮政 - SMTP.md.html">24 辛苦的邮政 - SMTP</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/25 你就是看不见我 - VPN.md.html">25 你就是看不见我 - VPN</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/26 黑客的好帮手 - SSH.md.html">26 黑客的好帮手 - SSH</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html">27 你可以得到我的心,却得不到我的人 - 物理安全设备</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/28 你怎么证明你就是你 - 身份验证和访问控制.md.html">28 你怎么证明你就是你 - 身份验证和访问控制</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html">29 我要怎么藏好我的考研资料 - 网络攻击(一)</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html">30 我要怎么藏好我的考研资料 - 网络攻击(二)</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/31 如何保护我的考研资料 - 网络攻击防范.md.html">31 如何保护我的考研资料 - 网络攻击防范</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/32 Linux网络安全 - 安全实战.md.html">32 Linux网络安全 - 安全实战</a>
|
||
</li>
|
||
<li>
|
||
<a href="/专栏/全解网络协议/33 结语.md.html">33 结语</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>12 向左还是向右 - IP路由</h1>
|
||
<p>我们上一小节了解了未来的这个钻石王老五IPV6,现在让我们回来继续了解当今还高高在上的IPV4。这就是理想很丰满,现实很骨感,IPV6固然好,但是现在还是IPV4的世界,所以我们还是要知己知彼。</p>
|
||
<h3>子网的框架</h3>
|
||
<p>我们先来看一下子网的框架。还是先看一个例子</p>
|
||
<pre><code>IP:203.0.113.10
|
||
子网:255.255.255.0
|
||
复制
|
||
</code></pre>
|
||
<p>我们前面是不是已经讲过或者说介绍过了子网掩码的问题。为了进行子网划分,我们必须首先转换为二进制。也许还有别的方法,但是我始终觉得二进制是解决这类问题的杀手锏。所以,当我们使用这些地址时,请切记我们要先转换为二进制。</p>
|
||
<pre><code>IP:11001011 00000000 01110001 00001010
|
||
子网:11111111 11111111 11111111 00000000
|
||
复制
|
||
</code></pre>
|
||
<p>我们现在来看的是一种新的表示方法。这个例子中255.255.255.0 你来算一下,实际上是前多少位作为网络地址。是前24位对不对,所以你可以写成/24。这样看上去是不是就简洁了很多,那写出来的样子就是203.0.113.10/24。这么酷炫的写法怎么会没有名字呢,它叫做无类域间路由。英文全称是Classless Inter-domain Routing,一般使用简写CIDR。</p>
|
||
<h3>拆分子网到更小的网络</h3>
|
||
<p>我们来看一个稍微复杂一点的实例。比如说你听了我的课之后,充满了信心,决定要自己开一个公司。而且还要开一个连锁企业,直接就在全国部署8个办公地点。北京,上海,重庆,天津,杭州,苏州,武汉以及云南(老师地理知识有限)。你去找ISP(互联网服务提供商)帮忙,他们分给了你一个IP的区段203.0.113.0/24。但是你需要8个网络地址,你怎么办呢?让我们来分析一下</p>
|
||
<pre><code>203.0.113.0/24 这个是给你的
|
||
实际上的范围就是 203.0.113.0 - 203.0.113.255 写成二进制的话就是
|
||
11001011 00000000 01110001 00000000 我们之前讲过这个吧,这个是网络地址
|
||
11001011 00000000 01110001 11111111 这个是广播地址
|
||
所以我们可用的地址就是这个区间的地址吧。
|
||
复制
|
||
</code></pre>
|
||
<p>你需要的是8个网络对不对,你算一下2的几次方=8。结果是不是3,所以你需要3个bits就可以。说明什么问题,因为前24位是ISP给你的,你不可以变,所以你可以变得就是后8位,但是你又需要8个网络,所以你需要3个bits来帮助你划分,就是下面这样</p>
|
||
<pre><code>11001011 00000000 01110001 000xxxxx
|
||
11001011 00000000 01110001 001xxxxx
|
||
11001011 00000000 01110001 010xxxxx
|
||
11001011 00000000 01110001 011xxxxx
|
||
11001011 00000000 01110001 100xxxxx
|
||
11001011 00000000 01110001 101xxxxx
|
||
11001011 00000000 01110001 110xxxxx
|
||
11001011 00000000 01110001 111xxxxx
|
||
复制
|
||
</code></pre>
|
||
<p>既然是又多了3bits是固定的,那你是不是要使用/27来作为子网掩码了。小考题,如果需要10个网路,你怎么分? 好,我们继续来看,我们先看第一个网络11001011 00000000 01110001 000xxxxx</p>
|
||
<pre><code>Network 1
|
||
11001011 00000000 01110001 000xxx
|
||
第一个地址是不是
|
||
11001011 00000000 01110001 00000000 这个写成十进制是什么样子呢?203.0.113.0
|
||
最后一个是不是
|
||
11001011 00000000 01110001 00011111 -> 203.0.113.31
|
||
写成CIDR的形式就是203.0.113.0/27
|
||
复制
|
||
</code></pre>
|
||
<p>我再来带着你看下一个</p>
|
||
<pre><code>Network 2
|
||
11001011 00000000 01110001 001xxx
|
||
第一个地址是不是
|
||
11001011 00000000 01110001 00100000 这个写成十进制是什么样子呢?203.0.113.32
|
||
最后一个是不是
|
||
11001011 00000000 01110001 00111111 -> 203.0.113.63
|
||
写成CIDR的形式就是203.0.113.32/27
|
||
复制
|
||
</code></pre>
|
||
<p>所以以此类推,你的8个网络写出来是这个样子的。自己先练习一下</p>
|
||
<pre><code>Network 1 -> 203.0.113.0/27
|
||
Network 2 -> 203.0.113.32/27
|
||
Network 3 -> 203.0.113.64/27
|
||
Network 4 -> 203.0.113.96/27
|
||
Network 5 -> 203.0.113.128/27
|
||
Network 6 -> 203.0.113.160/27
|
||
Network 7 -> 203.0.113.192/27
|
||
Network 8 -> 203.0.113.224/27
|
||
复制
|
||
</code></pre>
|
||
<p>那以上的网络怎么进行通信呢?通过路由器。</p>
|
||
<h3>路由器的工作原理</h3>
|
||
<p>什么是路由器呢?我从百度百科上copy了这个无聊的定义。(专业的事情交给专业的人来做)</p>
|
||
<h4>无聊的定义</h4>
|
||
<p>路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议,例如某个局域网使用的以太网协议,因特网使用的TCP/IP协议。这样,路由器可以分析各种不同类型网络传来的数据包的目的地址,把非TCP/IP网络的地址转换成TCP/IP地址,或者反之;再根据选定的路由算法把各数据包按最佳路线传送到指定位置。所以路由器可以把非TCP/ IP网络连接到因特网上。</p>
|
||
<p>相信你和我一样,看完定义和没看一样,还是一头雾水,好,那怎么办呢?小实例走起,让你可以理解的更加透彻。假设我们现在有一个小的网络地址10.0.0.0/24。我们只需要把它拆分成两个网络,怎么拆呢?经过了上面的8个,这两个小意思吧。</p>
|
||
<pre><code>10.0.0.0/24
|
||
10.0.0.00000000
|
||
拆分成
|
||
10.0.0.00000000
|
||
10.0.0.10000000
|
||
所以写成的CIDR就是10.0.0.0/25 和10.0.0.128/25
|
||
复制
|
||
</code></pre>
|
||
<p>好,我现在有了两个网络,他们之间怎么通信呢?这个就是路由器登场的时候了,左边的网络是10.0.0.0/25 中间是路由器,右边是10.0.0.128/25。你要做的就是把这两个网络地址放到路由器的两端,路由器的作用就是在网络间传输数据的。说白了路由器就是在里面有一个路由表,里面写好了这个通信是从哪里来到哪里去。</p>
|
||
<p><img src="assets/20210127154314846.png.png" alt="img" /></p>
|
||
<p>比如上面这个图,左边的这个表就是存在于Root里面,里面会记录上,不管你想去A::1,A::2,A::3,A::4。你的下一站都是A::1。 再来看一下右上角的那个路由表,这个表示存在于A::1中的。当你想去A::2的时候,下一站就是A::2,当你想去A::3和A::4时,下一站都是A::3。 自己看一下右下角那个表应该明白了吧。</p>
|
||
<p>因为你毕竟不是网络工程师,所以不太需要知道更多关于路由器的细节。上面这个图我都可以不用讲,但是不说,总感觉缺点什么。看到这里就可以了。给自己一个鼓励。你已经完成了IP部分的学习,其实很是包含很多东西的,如果你只是简单的看看,估计什么也没有学会,IP的学习还是要坐下来,用心的去思考,去计算。毕竟好记性不如烂笔头吗。</p>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div style="float: left">
|
||
<a href="/专栏/全解网络协议/11 我已经没地方住了吗 - IPv6.md.html">上一页</a>
|
||
</div>
|
||
<div style="float: right">
|
||
<a href="/专栏/全解网络协议/13 我能给你安全感 - 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":"709976361ec33cfa","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>
|