learn.lianglianglee.com/专栏/全解网络协议/12 向左还是向右 - IP路由.md.html
2022-05-11 18:57:05 +08:00

913 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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模型.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 class="current-tab" 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 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>12 向左还是向右 - IP路由</h1>
<p>我们上一小节了解了未来的这个钻石王老五IPV6现在让我们回来继续了解当今还高高在上的IPV4。这就是理想很丰满现实很骨感IPV6固然好但是现在还是IPV4的世界所以我们还是要知己知彼。</p>
<h3>子网的框架</h3>
<p>我们先来看一下子网的框架。还是先看一个例子</p>
<pre><code>IP203.0.113.10
子网255.255.255.0
复制
</code></pre>
<p>我们前面是不是已经讲过或者说介绍过了子网掩码的问题。为了进行子网划分,我们必须首先转换为二进制。也许还有别的方法,但是我始终觉得二进制是解决这类问题的杀手锏。所以,当我们使用这些地址时,请切记我们要先转换为二进制。</p>
<pre><code>IP11001011 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 -&gt; 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 -&gt; 203.0.113.63
写成CIDR的形式就是203.0.113.32/27
复制
</code></pre>
<p>所以以此类推你的8个网络写出来是这个样子的。自己先练习一下</p>
<pre><code>Network 1 -&gt; 203.0.113.0/27
Network 2 -&gt; 203.0.113.32/27
Network 3 -&gt; 203.0.113.64/27
Network 4 -&gt; 203.0.113.96/27
Network 5 -&gt; 203.0.113.128/27
Network 6 -&gt; 203.0.113.160/27
Network 7 -&gt; 203.0.113.192/27
Network 8 -&gt; 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" alt="在这里插入图片描述" /></p>
<p>比如上面这个图左边的这个表就是存在于Root里面里面会记录上不管你想去A::1A::2A::3A::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>