mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-17 08:46:40 +08:00
925 lines
24 KiB
HTML
925 lines
24 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>09 我想有个家 - 什么是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 class="current-tab" 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的高级篇 - HTTPClient(Java).md.html">21 HTTP的高级篇 - HTTPClient(Java).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>09 我想有个家 - 什么是IP地址</h1>
|
||
|
||
<p>今天开始我们来看一下你可能听过的最多的一个概念,即使你不是工程师,你可能也听过这个词IP,当然可能IP的意思不一样。所以为了澄清,首先我们要来说一下我们的IP是什么?这里的IP不是Intellectual property,不是指的disney的Star wars。而是网络里面的IP即Internet Protocol。IP是一个很有用而且很复杂的概念。这也是为什么我要用一整章来讲解。</p>
|
||
|
||
<h3>什么是IP?</h3>
|
||
|
||
<p>那什么是IP或者说什么是IP地址呢?IP地址用由句点分隔的四组数字组成。我们前面的二进制里面也讲了这一点对不对。IP地址被分配给网络上设备的网络接口卡,并且我们的IP地址被分为两部分。它具有网络部分,另一部分是主机部分。网络部分标识联网设备。主机部分标识的是特定网络上的单个设备。这与我们的地址没有太大的区别。这与将特定的街道地址作为识别为个人的方式非常相似。将你房子周围的空气和邮政编码标识为区域,在一个区域里有很多房屋,但地址和门牌号都是不同的,你可能是住在一门,我是二门等等。但是它们都属于相同的邮政编码。我们的邮政编码,有点像我们的网络部分,还有我们的主机部分,有点像我们的地址。我们在邮编中具有唯一标识或邮政编码,并且在邮编中具有通用标识。</p>
|
||
|
||
<p>IP地址以四个十进制数字的格式写入。这些十进制数字中的每一个我们称为八位字节。因此203.0.113.10那里有四个八位字节。它包含八个二进制位。因此,我们的IPv4地址始终为32位长。我们将其分为四组,每组八位,然后将它们转换回十进制,以便将它们编程到计算机中并进行讨论。你想一下,那在每一组里的数字最大是多少?</p>
|
||
|
||
<p>1982年提出Ipv4时犯了一个巨大的错误,这也是我们需要克服的一个大障碍,这是将二进制转换成十进制而不是其他更有效的方式。(这像不像是你写的代码,会为后面的扩展产生影响和阻碍?其实很正常,你想想IP虽然有问题,但是也使用了将近30年。现在有了IPV6但是还需要一段时间来全面使用或者一起使用。)这里我们来思考一下或者是发散一下你的思维,现在这种形式如何识别地址的网络和主机部分呢?我们的地址始终包含网络部分和主机部分。但是应该如何确定哪个是网络部分哪个是主机部分呢?</p>
|
||
|
||
<h3>地址类型</h3>
|
||
|
||
<p>我们来看一下地址类型。我们可以从功能上来分类地址类型。基本上可以分为三类。</p>
|
||
|
||
<ul>
|
||
|
||
<li>网络地址-它是系统中一组设备或一组IP地址的标识符。网络地址有点像我们的邮政编码,而没有与之关联的街道地址。邮政编码代表一个地理区域。我们的网络地址代表IP地址范围。网络地址有时称为网络前缀,或简称为前缀。</li>
|
||
|
||
<li>广播地址是第二种地址。广播地址是网络上所有设备的标识符。举个例子来说,在美国的话,纸质的邮件还是非常普及的。所以每家都会经常收到纸质的广告,比如说某某超市商品促销了之类的。这个就是广播,你会发现住在某一个区域的住户都会收到相同的广告促销。这个就有点像是广播地址。如果我有一个小公司想要发类似的广告,只需要去邮局然后说,我想把这个广告发给邮政编码xxxxx的住户,然后邮局就会帮我去投放了。广播地址的目的是可以一次将消息发送到网络上所有设备的地址。</li>
|
||
|
||
<li>主机地址是第三种。主机地址是确认在网络中的独一的设备。比如一台电脑,打印机或者是一个路由器。如果我们有一台设备比如说电脑想有一个IP地址。那么该计算机必须具有主机地址,并且不能为其分配网络地址或广播地址。前两种地址主要用于描述我们的网络,但是主机地址才是我们需要显示的应用到我们的设备上。</li>
|
||
|
||
</ul>
|
||
|
||
<p>我们现在来深度剖析每一种地址类型,让你有一个更深层次的认识。</p>
|
||
|
||
<h4>网络地址</h4>
|
||
|
||
<p>先看一下这个例子</p>
|
||
|
||
<pre><code>203.0.113.0
|
||
|
||
11001011 00000000 01110001 00000000(下面讲解的是这部分)
|
||
|
||
11111111 11111111 11111111 00000000 (子网掩码)
|
||
|
||
255.255.255.0 子网掩码
|
||
|
||
相信前面认真学习的同学可以看出以上IP地址的端倪吧。
|
||
|
||
网络部分是203.0.113 主机部分是0
|
||
|
||
|
||
|
||
复制
|
||
|
||
</code></pre>
|
||
|
||
<p>你在这里如果对子网掩码陌生,先忽略,我们后面会讲到。</p>
|
||
|
||
<p>如果你的地址的主机部分全部为零,就好像上面的例子那样,那么这个是网络地址。你永远不能将其分配给任何网卡。我下图标记出来了。如果全0或者全1。那就注定这不是一个普通的地址。</p>
|
||
|
||
<p><img src="assets/20210127153800103.png" alt="在这里插入图片描述" /></p>
|
||
|
||
<h4>广播地址</h4>
|
||
|
||
<p>先看一下这个例子</p>
|
||
|
||
<pre><code>203.0.113.255
|
||
|
||
11001011 00000000 01110001 11111111(下面讲解的是这部分)
|
||
|
||
11111111 11111111 11111111 00000000 (子网掩码)
|
||
|
||
255.255.255.0 子网掩码
|
||
|
||
|
||
|
||
网络部分是203.0.113 主机部分是255
|
||
|
||
|
||
|
||
复制
|
||
|
||
</code></pre>
|
||
|
||
<p>如果你的地址的主机部分为全部为1,就好像上面的例子那样,那么这个是广播地址。同理,你也永远不能将其分配给任何网卡。就好像上面说的,全0和全1都是特殊的。全0是网络地址。全1是广播地址。</p>
|
||
|
||
<p><img src="assets/2021012715382022.png" alt="在这里插入图片描述" /></p>
|
||
|
||
<h4>主机地址</h4>
|
||
|
||
<p>先看一下这个例子</p>
|
||
|
||
<pre><code>203.0.113.10
|
||
|
||
11001011 00000000 01110001 00001010(下面讲解的是这部分)
|
||
|
||
11111111 11111111 11111111 00000000(子网掩码)
|
||
|
||
255.255.255.0 子网掩码
|
||
|
||
|
||
|
||
网络部分是203.0.10 主机部分是10
|
||
|
||
|
||
|
||
复制
|
||
|
||
</code></pre>
|
||
|
||
<p>我们上面讲的主机部分全是0的时候叫做网络地址,全是1的时候叫做广播地址,那其他的呢是不是就是我们需要的主机地址了。既然这个是主机地址了,是不是你就可以把它赋值给网卡了。可以赋给打印机,路由器等等。比如在这里,主机部分就是10。</p>
|
||
|
||
<p>所以,在这里子网掩码是一个不变量,那你的主机地址范围是不是就是在00000000 到 11111111之间的值。也就是1 到254。</p>
|
||
|
||
<h3>私有和公有地址</h3>
|
||
|
||
<p>私有地址只允许在一个公司内部使用,你仔细想一下,这说明什么,说明你在A公司的内部可以使用10.0.0.1,我在B公司也可以同样使用10.0.0.1对不对。这样会冲突吗?不会,因为是内部使用,互相是看不到的,为什么需要这样呢?开动你的小脑瓜想一下(下一小节会讲到)。当然不可能所有的IP地址都可以作为私有的,下面是所有私有地址的范围</p>
|
||
|
||
<pre><code>10.0.0.0 -- 10.255.255.255
|
||
|
||
172.16.0.0 -- 172.31.255.255
|
||
|
||
192.168.0.0 -- 192.168.255.255
|
||
|
||
|
||
|
||
复制
|
||
|
||
</code></pre>
|
||
|
||
<h3>看透IP</h3>
|
||
|
||
<p>我们之前说过数据的传输是靠Header来确定这是要传到哪里的数据。那我们来看一下IP的header是什么样子的?我懒得画了,就直接从网上找了一个。</p>
|
||
|
||
<p><img src="assets/20210127153840401.png" alt="在这里插入图片描述" /></p>
|
||
|
||
<p>我们还是一个一个的字段来讲解。</p>
|
||
|
||
<ul>
|
||
|
||
<li>Version(版本号)4bits:用来暗示版本号,我们一直说IPV4,那这里就是4对不对,那IPV6呢?</li>
|
||
|
||
<li>IHL(Internet Header Length头部长度) 4bits:头部的长度</li>
|
||
|
||
<li>Type of Service(服务类型)8 bits:因为是8 bits,所以可以分成下面的8个值。用于定义包的优先级,值越大,数据越重要,我就不翻译下面的意思了。感兴趣的自己查一下。
|
||
|
||
<ul>
|
||
|
||
<li>000 Routine</li>
|
||
|
||
<li>001 Priority</li>
|
||
|
||
<li>010 Immediate</li>
|
||
|
||
<li>011 Flash</li>
|
||
|
||
<li>100 Flash Override</li>
|
||
|
||
<li>101 CRI/TIC/ECP</li>
|
||
|
||
<li>110 Internet Control</li>
|
||
|
||
<li>111 Network Control</li>
|
||
|
||
</ul>
|
||
|
||
</li>
|
||
|
||
<li>Total Length(总长度)16 bits:总长度,包括头和数据</li>
|
||
|
||
<li>Identification(标识) 16 bits: 一个序列号,与源地址,目标地址和用户协议一起,旨在唯一地标识一个数据报(Datagram)</li>
|
||
|
||
<li>Flags(标志)3 bits: 当前仅定义了两个位。更多的位用于分段和重组。第二位是DF(Don't Fragment)位。如果已知目标没有重组片段的功能,则此位可能很有用。但是,如果设置了此位,数据报一旦超过路由网络的最大大小,则该数据报将被丢弃。</li>
|
||
|
||
<li>Fragment Offset(片偏移)(13 bits):此片段在原始数据报中的位置(以64位为单位)。这意味着除最后一个片段以外的其他片段必须包含长度为64位倍数的数据字段。</li>
|
||
|
||
<li>Time to Live(生存时间)(8 bits):定义一个电报允许在网络中存活的时间,以S来计算。</li>
|
||
|
||
<li>Protocol(协议)8 bits: 指示在目的地接收数据字段的下一个更高级别的协议,此字段标识ip头之后的数据包中下一个头的类型,举个例子。TCP的值是6,UDP的值是17。</li>
|
||
|
||
<li>Header Checksum(首部校验)16 bits: 仅应用于头部的错误检测。</li>
|
||
|
||
<li>Source Address(源地址)32 bits: 源IP地址</li>
|
||
|
||
<li>Destination Address(目标地址)32 bits: 目标IP地址</li>
|
||
|
||
<li>Options(选项)variable:编码发送用户请求的选项</li>
|
||
|
||
<li>Padding(填充)variable:用于确保数据报头是32位长度的倍数</li>
|
||
|
||
<li>Data(数据)variable:数据</li>
|
||
|
||
</ul>
|
||
|
||
<p>下面来看一个具体的例子。不知道你有没有听过wireshark,这是一个用于包裹分析的工具,感兴趣的可以下载来试一下。</p>
|
||
|
||
<p><img src="assets/20210127153856422.png" alt="在这里插入图片描述" /></p>
|
||
|
||
<p>从上图你可以看出,你们包含着我们上面讲的header里面的内容,上面的是理论概念,这个图是在实际发送中的具体数据包里面有什么。比如你可以看到version:4也就是IPV4。然后就是Header length,TotalLength。。。等,你可以对着上面的理论模型来找到一一对应。</p>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div>
|
||
|
||
<div style="float: left">
|
||
|
||
<a href="/专栏/全解网络协议/08 16进制又是个什么鬼? - 16进制的讲解.md.html">上一页</a>
|
||
|
||
</div>
|
||
|
||
<div style="float: right">
|
||
|
||
<a href="/专栏/全解网络协议/10 我可是住二环的人 - IP地址的组成和分类.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":"7099762f0fa63cfa","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>
|
||
|