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. 大数据笔记13:Hadoop安装之Hadoop的配置安装

    1.准备Linux环境 1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip ...

  2. ADO.NET之使用DataGridView控件显示从服务器上获取的数据

    今天回顾下ADO.NET中关于使用DataGridiew控件显示数据的相关知识 理论整理: 使用 DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据. SqlDataAd ...

  3. [c#]asp.net开发微信公众平台(6)阶段总结、服务搭建、接入

    经过前5篇,跟着一步步来的话,任何人都能搭建好一个能处理各种微信消息的框架了,总结一下最容易忽略的问题: 1.文本消息中可以使用换行符\n    : 2.微信发来的消息中带的那个长整型的时间,我们完全 ...

  4. ref参数的用途

    ref参数 能够将一个变量带入方法进行改变,改变完成后再将改变完成后的变量带出方法 ref参数要求在方法外必须为值赋值,而方法内可以不赋值 static void Main(string[] arr) ...

  5. python 登陆一个网站

    今天想用python写一个登陆的脚本,搜了一下,网上挺多的,看了一些后写了个登陆虎扑论坛的脚本. 原理: 只要在发送http请求时,带上含有正常登陆的cookie就可以了. 1.首先我们要先了解coo ...

  6. sublime3配置及插件安装

    1.下载https://github.com/wbond/sublime_package_control中的zip文件,解压后将文件夹名更改为Package Control. 2.将1中的文件夹放入s ...

  7. js控制TR的显示影藏

    在很多现实的场景中,有的文本框我们希望在选择“是”的按钮之后才出现,这就需要js控制TR的隐藏和显示,(div的影藏显示类似) 以下是一段选择是的按钮就显示身高和体重的文本框的代码.注意:ready方 ...

  8. Grunt使用心得

    1.安装npm 2.安装CLI ( npm install -g grunt-cli) 3.安装grunt (npm install grunt --save-dev) 4.添加gruntfile.j ...

  9. Python学习笔记整理(十一)Python的while和for循环

    while语句,提供了编写通用循环的一种方法,而for语句是用来遍历序列对象内的元素,并对每个元素运行一个代码块.break,continue用在循环内,跳出整个循环或者跳出一次循环. 一.while ...

  10. 关于vs2013error C4996: 'strcmpi': The POSIX name for this item is deprecated.的错误解决办法!

    1.出现如下错误(如图1) 2.解决办法(如图2)在头文件处添加#pragma warning(disable: 4996)