IP地址的分类

在TCP/IP协议中,协议栈分为4层。从上到下依次是应用层、运输层、网络层、网络接口层。 IP协议就工作在网络层。IP协议将纷繁复杂的物理层协议屏蔽掉,对上层提供统一的描述和管理服务。

互联网上的每一台主机都有一个IP地址,IP地址由32比特的整数来表示,共分为5类。 分类方法是:根据网络号所占字节数来区分。

A类IP地址以0开始,网络号占用一个字节。

B类IP地址以10开始,网络号占用两个字节。

C类IP地址以110开始,网络号占用三个字节。

D类IP地址以1110开始,表示的是一个多播地址。

E类IP地址以1111开始,目前没有使用到。

其中比较常用的是前三类。

公网IP和私网IP

由于IP地址仅有32位,并且,受限于网络号+主机号的格式,实际可用的IP是非常有限的。而互联网上每一台主机都需要一个IP地址,必然会出现不够用的情况。于是有了私网IP地址,私网IP地址可以在一定程度上缓解IP地址不够用的问题。

所谓私网IP地址,可以看成是一个网络内部使用的IP地址,这些IP地址对外是不可见的。

以下IP段的地址都是内网IP地址。

(1)10.0.0.0 到 10.255.255.255

(2)172.16.0.0 到172.31.255.255

(3)192.168.0.0 到192.168.255.255

NAT

NAT(Network Address Translator)是网络地址转换,它实现内网的IP地址与公网的地址之间的相互转换,将大量的内网IP地址转换为一个或少量的公网IP地址,减少对公网IP地址的占用。

NAT的最典型应用是:在一个局域网内,只需要一台计算机连接上Internet,就可以利用NAT共享Internet连接,使局域网内其他计算机也可以上网。使用NAT协议,局域网内的计算机可以访问Internet上的计算机,但Internet上的计算机无法访问局域网内的计算机。

Windows操作系统的Internet连接共享、sygate、winroute、unix/linux的natd等软件,都是使用NAT协议来共享Internet连接。 所有ISP(Internet服务提供商)提供的内网Internet接入方式,几乎都是基于NAT协议的。

IP数据报

IP数据报,或称IP报文,分为首部和数据部分两部分。首部的前一部分是固定长度,共20个字节,是所有IP报文都必须携带的,用于描述报文本身的信息,诸如IP版本,IP报文长度,服务类型,分片信息等。其中最重要的发送方IP地址和接收方IP地址。

IP寻路

有了接收方IP地址,而IP地址又代表了一台主机,似乎寻路问题已经解决了。

但是IP地址仅仅是一个软件虚拟的地址,对于物理层来说,它并不了解什么是IP地址,以及如何定位到一个IP。

ARP协议称为地址解析协议,它可以为将IP地址解析为一个物理地址,以便在物理层进行转发。 ARP协议工作的过程类似于:我是路由器A,现在广播一条消息,我的IP地址是XXX,我的物理地址是XXX,请问谁知道IP地址XXX对应的物理地址是多少? 如果局域网内某个主机看到有其他路由器在寻找自己的物理地址,那么它就会做出回应。

有了IP地址和物理地址的对应关系之后,每次转发IP报文时,都会将接收方IP地址对应的物理地址填入下层报文中,这样物理层就知道怎么转发此报文了。 下一跳路由器收到此报文后,看到的依然是IP报文,但是已经完成了物理层的传输。

子网划分

由于IP地址是两层结构:网络号+主机号,在某些方面欠缺灵活性和扩展性。

比如:一个A类IP地址,包含超过1000万个主机号,但是通常一个网络内是没有这么多主机的,这就造成了很多IP地址的浪费。

另外,给每一个物理网络分配一个网络号,会造成路由器的路由表条目增多,降低了转发效率。

为了解决这些问题,有了IP子网的概念。子网的概念将IP地址从二层结构变成了三层结构。

IP地址 ::= {<网络号>,<子网号>,<主机号>}

子网扩展了网络号的长度,减少了主机号的长度。这样,就能划分出更多的网络了。

但是子网划分只是一个网络内部的事情,对于外部网络来说,它并了解这一点。因此路由器转发时,依然是根据网络号来进行转发的,只是在子网的网关时,才会根据子网号来定位到一台主机。

那么这个路由器怎么知道,子网号到底是多少呢? 为了描述子网的划分情况,需要引入子网掩码。

子网掩码的格式同IP地址,只是子网掩码的前部分为全1,后部分为全0. 子网掩码可以描述出来,所划分的子网占用了多少位主机号来作为子网号。

例如:

145.13.3.10配合子网掩码255.255.255.0,145开头的IP地址是B类IP地址,也就是说,网络号占用了两个字节,即145.13。剩下的3.10是主机号。掩码的第三字节为255,表示网络号中的第三字节全部被用来表示子网,只有最后一个字节是主机号,于是,就可以得知,子网号为145.13.3 主机号为10.

总结为一般规律就是:IP地址和子网掩码按位与,即可得到子网号。

CIDR(Classess Inter-Domain Routing) 无分类域间路由选择

从名字可以看出,cidr划分法不再区分IP地址是属于A类还是B类等了。 cidr直接将一个32位的IP地址划分为两部分,即网络号+主机号,但是借鉴了子网掩码的思想,它提供一个整数,表示此IP地址中,网络号占多少位(可以理解为子网掩码中1的个数)

比如:128.14.35.7/20 这种写法称为CIDR记法,或称斜线记法,表示一个地址块。它除了表示出了目的地址之外,还提供了一个信息,那就是,网络号占用了前20位,主机号占用剩下的12位。在这个信息的基础上,还能继续得出,处于同一地址块的最小IP地址为128.14.32.0,最大地址为128.14.47.255.

这种IP划分方法和之前的分类方法的区别在于,分类的IP地址,可以从一个IP地址直接看出是哪一类,也就知道了这类地址空间的范围。分类的IP地址,前缀都是不同的,也就是说,最多比较前面四个字节,即可知道此IP地址的分类。但是CIDR却要采用最长匹配方法。

*:first-child {
margin-top: 0 !important;
}

body>*:last-child {
margin-bottom: 0 !important;
}

/* BLOCKS
=============================================================================*/

p, blockquote, ul, ol, dl, table, pre {
margin: 15px 0;
}

/* HEADERS
=============================================================================*/

h1, h2, h3, h4, h5, h6 {
margin: 20px 0 10px;
padding: 0;
font-weight: bold;
-webkit-font-smoothing: antialiased;
}

h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {
font-size: inherit;
}

h1 {
font-size: 28px;
color: #000;
}

h2 {
font-size: 24px;
border-bottom: 1px solid #ccc;
color: #000;
}

h3 {
font-size: 18px;
}

h4 {
font-size: 16px;
}

h5 {
font-size: 14px;
}

h6 {
color: #777;
font-size: 14px;
}

body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
margin-top: 0;
padding-top: 0;
}

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
margin-top: 0;
padding-top: 0;
}

h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
margin-top: 10px;
}

/* LINKS
=============================================================================*/

a {
color: #4183C4;
text-decoration: none;
}

a:hover {
text-decoration: underline;
}

/* LISTS
=============================================================================*/

ul, ol {
padding-left: 30px;
}

ul li > :first-child,
ol li > :first-child,
ul li ul:first-of-type,
ol li ol:first-of-type,
ul li ol:first-of-type,
ol li ul:first-of-type {
margin-top: 0px;
}

ul ul, ul ol, ol ol, ol ul {
margin-bottom: 0;
}

dl {
padding: 0;
}

dl dt {
font-size: 14px;
font-weight: bold;
font-style: italic;
padding: 0;
margin: 15px 0 5px;
}

dl dt:first-child {
padding: 0;
}

dl dt>:first-child {
margin-top: 0px;
}

dl dt>:last-child {
margin-bottom: 0px;
}

dl dd {
margin: 0 0 15px;
padding: 0 15px;
}

dl dd>:first-child {
margin-top: 0px;
}

dl dd>:last-child {
margin-bottom: 0px;
}

/* CODE
=============================================================================*/

pre, code, tt {
font-size: 12px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}

code, tt {
margin: 0 0px;
padding: 0px 0px;
white-space: nowrap;
border: 1px solid #eaeaea;
background-color: #f8f8f8;
border-radius: 3px;
}

pre>code {
margin: 0;
padding: 0;
white-space: pre;
border: none;
background: transparent;
}

pre {
background-color: #f8f8f8;
border: 1px solid #ccc;
font-size: 13px;
line-height: 19px;
overflow: auto;
padding: 6px 10px;
border-radius: 3px;
}

pre code, pre tt {
background-color: transparent;
border: none;
}

kbd {
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
background-color: #DDDDDD;
background-image: linear-gradient(#F1F1F1, #DDDDDD);
background-repeat: repeat-x;
border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
border-image: none;
border-radius: 2px 2px 2px 2px;
border-style: solid;
border-width: 1px;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
line-height: 10px;
padding: 1px 4px;
}

/* QUOTES
=============================================================================*/

blockquote {
border-left: 4px solid #DDD;
padding: 0 15px;
color: #777;
}

blockquote>:first-child {
margin-top: 0px;
}

blockquote>:last-child {
margin-bottom: 0px;
}

/* HORIZONTAL RULES
=============================================================================*/

hr {
clear: both;
margin: 15px 0;
height: 0px;
overflow: hidden;
border: none;
background: transparent;
border-bottom: 4px solid #ddd;
padding: 0;
}

/* TABLES
=============================================================================*/

table th {
font-weight: bold;
}

table th, table td {
border: 1px solid #ccc;
padding: 6px 13px;
}

table tr {
border-top: 1px solid #ccc;
background-color: #fff;
}

table tr:nth-child(2n) {
background-color: #f8f8f8;
}

/* IMAGES
=============================================================================*/

img {
max-width: 100%
}
-->

IP转发和子网路由的更多相关文章

  1. IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式

    IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个 ...

  2. IP2——IP地址和子网划分学习笔记之《子网掩码详解》

    2018-05-04 16:21:21   在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...

  3. IP地址与子网划分

    IP地址与子网划分 目录 IP地址与子网划分 一.IP地址(Internet Protocol Address) 1.IP地址的表示 2.IP地址的组成 3.IP地址的分类 (1)A类IP地址 (2) ...

  4. linux ip 转发设置 ip_forward

    工作原理: 内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做任何回应.由于源主机ip是私有的,禁止在公网使用,所以必须将数 ...

  5. IP地址和子网划分学习笔记之《IP地址详解》

    2018-05-03 18:47:37   在学习IP地址和子网划分前,必须对进制计数有一定了解,尤其是二进制和十进制之间的相互转换,对于我们掌握IP地址和子网的划分非常有帮助,可参看如下目录详文. ...

  6. IP地址及子网--四种IP广播地址

    国际规定:把所有的IP地址划分为 A,B,C,D,E. 类默认子网掩码:A类为 255.0.0.0; B类为 255.255.0.0; C类为 255.255.255.0.子网掩码是一个32位地址,用 ...

  7. Ubuntu 防火墙IP转发做NAT,内网集群共享网络(简单)

    服务器架构: 系统: Ubuntu 16.04 x64 使用自带防火墙 UFW 操作: 在有公网的服务器上,进行防火墙基本操作开启自己所需业务的端口,并按下方设置启动NAT: 其他内网机器修改网关或者 ...

  8. Linux下启用IP转发功能(主要针对Ubuntu的使用)

    说明:以下的操作只要在Linux下都是通用的. Linux发行版默认情况下是不开启IP转发功能的.如果架设一个Linux路由或者VPN服务就需要开启该服务. 1.通过访问sysctl的内核ipv4.i ...

  9. IP 转发分组的流程

    IP 转发分组的流程 数据路由:路由器在不同网段转发数据包: 网络畅通的条件:数据包能去能回: 从源网络发出时,沿途的每一个路由器必须知道到目标网络下一跳给哪个接口: 从目标网络返回时,沿途的每一个路 ...

随机推荐

  1. i春秋30强挑战赛pwn解题过程

    80pts: 栈溢出,gdb调试发现发送29控制eip,nx:disabled,所以布置好shellcode后getshell from pwn import * #p=process('./tc1' ...

  2. <a>标签中href="javascript:;"

    javascript: 是一个伪协议,其他的伪协议还有 mail:  tel:  file:  等等. 1 <a id="jsPswEdit" class="set ...

  3. springmvc的讲解

    概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...

  4. .net对文件的操作之文件读写

    读写文件的步骤一般需要5步: 创建文件流 创建读写器 执行读或写的操作 关闭读写器 关闭文件流 需要引用:System.IO这个命名空间 代码演示: string path = @"F:\a ...

  5. SQL Server 2005无日志文件附加数据库

    公司网站运营两年多了,日志文件超级大,在重装系统的时候,为了省事,就没有备份日志文件,而且是没有分离就把日志文件给删掉了(下次一定要记得先分离再删日志文件).结果造成数据库怎么都附加不上.出现错误. ...

  6. Directory.GetFiles 方法

    Directory.GetFiles 方法 返回指定目录中文件的名称(包括其路径). 命名空间:   System.IO程序集:  mscorlib(mscorlib.dll 中) Enumerate ...

  7. c - 比较字符串的大小

    c的标准库中当然有现成的比较字符串的函数<string.h>中的 strcmp int __cdecl strcmp(_In_z_ const char * _Str1, _In_z_ c ...

  8. arcgis engine - 命令和工具

    在engine中, 命令是实现了 ICommand,我们可以通过使用 UID, progID 或 ICommand 将一个命令宿主到 ToolBarControl中. ICommand接口有一个 On ...

  9. linux添加JAVA环境变量

    root用户: 1.修改文件vim /etc/profile 添加以下信息: export JAVA_HOME=/home/jdk1..0_79 (这里需要添加自己的JDK安装目录) export C ...

  10. 什么是 Terminal

    从用户的角度来看,Terminal 是键盘和显示器的组合,也称为 TTY(电传打字机的缩写).键盘输入字符,显示器显示字符. 从进程的角度来看,终端是字符设备,可以通过 read.write.ioct ...