网络协议系列之三:IP
前言
这篇博客主要对IP协议中一些基础知识点加以总结,并将书中一些晦涩难懂的部分去除了。IP地址协议是网络层中最重要的协议,IP地址协议能够对因特网上的全部设备进行唯一标识。也正由于有了IP协议,我们的计算机才干实现与全球随意一台设备进行通信。
同一时候这也是网络层存在的意义,我将对部分的内容分为两个部分加以总结:一、首先对IP协议部分的知识加以总结。二、对网络层其它的协议加以总结,包含ICMP、IGMP、ARP等协议。
IP协议基础篇
地址空间
这个概念非常好理解,假设一个协议用a位(a个bit)表示,那么其地址空间就是2^a。
我们要讲的IPv4地址协议(简称IP协议)使用32位表示一个地址,所以其地址空间是2^32(超过40亿)
记法
在IP协议中,有三种记法表示一个IP地址:
- 基2(二进制表示法)
- 基16(16进制表示法)
- 基256(10进制表示法)
基256:也叫点分十进制记法。也是最经常使用的记法。在每8个字节用点
隔开,共同拥有4个十进制数
基16:一个16进制等于4位二进制数。而一个IP地址有32个二进制数,所以使用基16进制表示的时候有8个二进制数
基2:採用01串的方式表示
分类编址
认识编址
分类编址是最早出现的编址体系。在分类编址中一共分为五类:A、B、C、D、E。每一类占用地址空间的一部分。当中A类地址有2^31个地址,占50%,B类有2^30个地址,占25%。C类有2^29个地址,占12.5%,D类和E类各有2^28个地址。各占6.25%。那么怎样辨别这5类地址呢?
假设是使用点分十进制记法,仅仅要看左边第一个数。假设小于128,那么就是A类,假设小于192,那么就是B类。假设小于224,那么就是C类,假设小于240,那么就是D类,假设不在上面的范围,那么就是E类。
举例说明
一个IP地址包含了网络号和主机号(网络号标识了设备处于哪个网络下,主机号标识了该网络下的哪台设备)。对于上述A、B、C类地址,分别用前一个字节、两个字节、三个字节表示网络号,后面的字节表示主机号。
D类和E类地址不划分网络号和主机号。由于D类用来多播、E类地址被设计为保留地址。这样的编址方法也称为两级编址方法,假设某一类地址中使用了n位表示网络号。那么便有32-n位表示主机号。在A、B、C类地址中,n的值各自等于8、16、24。那么了解了这点后,我们能够依据随意一个IP地址得到至少三个信息:地址数
、首地址
、末地址
。
假设给定了n,那么
1)地址数N=2^32-n
2)首地址:保持最左边n位不变,并将右边32-n位置为0
3)末地址:保持最左边n位不变,并将右边32-n位置为1
比如对于IP地址73.22.17.25。其地址数N=2^32-8=2^24。首地址为73.0.0.0,末地址为73.255.255.255
通过IP地址,我们与另外一台计算机的通信须要到达其所在的网络,才找到该网络下的特定的主机。随着计算机设备的增多,32位的IP地址差点儿被分配完成。后来出现把一个网络划分为一个个子网络的思想,这样每一个子网都有自己的网络地址(被划分的网络是拥有原来A类或者B类地址的网络)。那么问题来了,划分的子网的网络地址怎么表示呢?这里使用了子网掩码
来解决问题。子网掩码是左边n位全为1。右边32-n位为0的IP地址,那么把原IP地址与子网掩码进行与运算就能够得到子网地址
无分类编址
简单介绍
无分类编址使用可变长度的地址块,这些地址块不属于不论什么类,只是规定每一个地址块中的地址数必须是2的乘方。要注意的是在无分类编址中,使用的仍然是两级编址。使用左边n位(也叫前缀长度
)标识网络,右边32-n位(也叫后缀长度
)标识主机号。
前缀长度能够在1~32之间。同一时候,在无分类编址中会使用斜线记法
来表示IP地址,如230.8.24.56/12。
两级编址
通过斜线记法表示的地址。我们能够得到该地址块表示的地址数、首地址和末地址。
这点和分类编址是一样的。能够发现。当n各自等于8、16和24的时候刚好就是分类编址的情况,所以分类编址是无分类编址的一个特例。在无分类编址中,计算上述三个信息有一点点出入。看计算方法:
1)地址数N=2^32-n
2)首地址= (随意地址) and (子网掩码)
3)末地址= (随意地址) OR (NOT (子网掩码))
比如对于17.63.110.114/24。子网掩码为255.255.255.0。
地址数N=2^32-24=16。
地址: 17.63.110.114
子网掩码:255.255.255.0
首地址: 17.63.110.0
地址: 17.63.110.114
NOT 子网掩码: 0.0.0.255
末地址: 17.63.110.255
子网划分
在无分类编址中,最常见的应用就是子网划分了。
子网划分就是把ISP分配的一个地址块进一步划分为若干子网,每一个子网还能够继续划分为子网的子网,没有不论什么限制。假设有一个地址块的地址数是N,前缀长度为n。要划分为s个子网,每一个子网的前缀长度是n2。每一个子网的可用地址数是N2。
那么有例如以下计算公式:
n2 = n + log2(N/N2)
比方某组织的可用地址块为130.34.12.64/26,须要划分为4个子网,每一个子网的地址数同样,则每一个子网的信息能够例如以下求得:
1) 可用的地址数N=2^32-26=64
2) 首地址=130.34.12.64/26,末地址=130.34.12.127/26
3) 每一个子网的地址数N2=64/4=16
4) n2 = 26 + log2(64/16) = 28
特殊地址
1)全0地址
即0.0.0.0/32,该地址被保留用于主机发送一个分组而又不知道自己地址的情况下
2)全1地址
即255.255.255.255/32。被设计为当前网络的受限广播地址,一个主机假设想把报文发给网络上的全部主机,就能够把这个地址作为目的地址
IP协议高级篇
IP协议在TCP/IP模型中的位置
在这部分的内容中。将对IP报文的格式做一个具体的了解,同一时候为学习TCP传输层做铺垫。
有一点非常重要,IP协议是不可靠的无连接数据报协议————一种尽最大努力交付的服务。就是说IP协议不保证数据的完整性和安全性,数据报有可能丢失、乱序、损坏或者延迟到达
IP数据报
网络层的分组称为数据报,。也能够简单理解为网络中传输的数据
下图是一个完整的IP数据报格式:
IP数据报由两部分组成:首部和数据。首部长度能够是20~60字节。以下对IP数据报中的各个字段加以说明:
版本号(VER)
:这个4位版本号定义了IP协议的版本号,眼下的版本号是4(IPv4)
首部长度(HLEN)
:定义了IP数据报首部的长度,以4字节的字为单位计算,若为20字节,则值为5
服务类型(TOS)
:指明了怎样处理数据报,了解就可以
总长度
:定义了包含首部在内的数据报总长度
标识
:分片时实用
标志
:分片时实用
分片偏移
:分片时实用
生存时间(TTL)
:指明数据报的生存时间
协议
:定义了使用IP层服务的高层协议
源地址
:发送主机的IP地址
目的地址
:接收主机的IP地址
IP分片
所谓IP分片就是把数据量过大的数据拆分成较小的数据报进行传输,这里涉及一个概念:MTU
(最大传输单元),这个字段的意思就是拆分后的数据报的长度不能超过这个值,对于以太网来说,这个字段的值是1500字节。
IP分片要改动IP数据报中的标志、分片偏移和总长度的值,其它的不变。
注意:分片的仅仅是数据报中的数据,首部并不会被分片
以下我们来看看分片的时候。上述三个字段(总长度须要依据分片的数据长度确定,再加上首部长度)发生了什么变化:
标识
此字段尽管没有改变,每一个分片要复制这个字段的值。
这个字段与源主机的IP唯一确定一个数据报。当目的主机收到全部分片后,能够依据这个标识重装数据报,由于目的主机觉得标识号同样的是属于同一个数据报的。
标志
这是一个3位的字段,第1位保留不用。第2位称为不分片
位,就是说当其值是1的时候,不会对数据报进行分片。
第3位是还有分片
位,就是说假设其值是1就说明这个分片后面还有分片,假设是0,则说明是最后一个分片或者第一个分片(由于当仅仅有一个分片的时候,第一个也是最后一个)
分片偏移
这个字段表示的是分片在正个数据报中的相对位置。以8字节为单位。通过这个字段,目的主机能够依据分片偏移的值从第一个分片開始组装到最后一个分片,直至形成一个完整的IP数据报。那么目的主机是怎样重装分片的呢?
1) 分片偏移为0的分片是第一个分片
2) 把第一个分片的长度除以8得到第二个分片的偏移值,于是目的主机从接收到的分片中寻找该分片偏移值的分片,组装第二个分片
3) 把第一个分片和第二个分片的长度除以8得到第三个分片的偏移值,于是目的主机从接收到的分片中找到该分片,这样就把前三个分片组装好了
4) 继续以上过程,直到最后的一个分片的还有分片
的值为0
选项
选项字段主要用于网络測试与排错,前面提到IP数据报首部的长度是20字节~60字节。当中20字节是固定部分,剩余的字节数是选项部分多出来的。
选项部分的格式可分为:一个字节的类型字段、一个字节的长度字段以及可变长度的值的字段。
当中选项的类型能够分为六种:无操作、选项结束、记录路由、严格的源路由、不严格的源路由、时间戳。前两种是单字节的。后四种是多字节的
校验和
绝大多数TCP/IP协议採用差错控制的方法称为校验和。
校验和能够防止分组在传输期间出现损坏。以下说一下IP分组中的校验和:
首先把校验和字段置为0。然后把整个首部划分为16位的段,再将各段相加,把结果取反码插入到校验和字段中。要注意的是,IP分组中校验和仅仅覆盖首部,不包含数据。这个字段了解就可以
网络协议系列之三:IP的更多相关文章
- TCP/IP网络编程系列之三(初级)
TCP/IP网络编程系列之三-地址族与数据序列 分配给套接字的IP地址和端口 IP是Internet Protocol (网络协议)的简写,是为首发网络数据而分配给计算机的值.端口号并非赋予计算机值, ...
- 完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三
手把手叫你玩转网络编程系列之三 完毕port(Completion Port)具体解释 ...
- 网络协议: TCP/IP 和UDP/IP
网络协议: TCP/IP 和UDP/IP TCP/IP TCP/IP(Transmission Control Protocol/Internet Protocol)是一种可靠的网络数据传输控制协议. ...
- iOS网络协议 HTTP/TCP/IP浅析
一.TCP/IP协议 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电 ...
- linux网络编程系列-TCP/IP模型
### OSI:open system interconnection ### 开放系统互联网模型是由ISO国际标准化组织定义的网络分层模型,共七层 1. 物理层:物理定义了所有电子及物理设备的规范, ...
- 网络协议之TCP/IP协议
沙漏计时器型TCP/IP协议族,允许IP on everyting,即支持多种形式和物理层和数据链路层实现:同时支持多种多样的应用层协议,扩展了各式各样的服务. IP协议(网际协议) 与IP协议配套使 ...
- 【网络协议】TCP/IP:数据链路层
物理层负责把计算机中的0.1数字信号转换为具体传输媒介的物理信号(电压的高低.电波的强弱.光的闪灭) 数据链路层协议定义了(通过通信介质互连的设备间的)数据传输规范 (常见的通信介质有同轴电缆.双绞线 ...
- 协议系列之IP协议
1.协议 协议(protocol)的定义:为计算机网络中进行数据交换而建立的规则.标准或约定的集合.两个终端相互通信时双方达成的一种约定,规定了一套通信规则,双方通信必须遵守这些规则.这些规则规定了分 ...
- 无线传感网络协议——Smart Mesh IP
前言: SmartMesh IP 专为实现 IP 兼容性而设计,并基于 6LoWPAN 和 802.15.4e 标准.SmartMesh IP 产品线实现了网络适应性.可靠性和可扩展性水平,并拥有高级 ...
随机推荐
- centos6.5 安装vlc播放器【超简单】
# cd /etc/yum.repos.d/ # wget http://pkgrepo.linuxtech.net/el6/release/linuxtech.repo //我试了3次才下载下来 # ...
- NYOJ 6.喷水装置(一)-贪心
喷水装置(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...
- DFS之奇偶剪枝
问题描述: 给定一个 N * M的迷宫+起点+终点 ,迷宫中有一些障碍无法穿过,问能否不重复也不停留地在刚好一共走 t 步出迷宫. 先上结论: 在理想情况下,s到e需要的最小步数为m=|ex-sx|+ ...
- 15、Flask实战第15天:Flask-WTF
WTForms表单验证基本使用 Flask-WTF是简化了WTForms操作的一个第三方库.WTForm表单的两个主要功能是验证用户提交数据的合法性以及渲染模板.当然还包括一些其他的功能:CSRF保护 ...
- 【DFS】bzoj2079 [Poi2010]Guilds
对一棵树黑白染色一定符合题意. 图一定有生成树. 因此,仅有一个孤立节点的联通块不合题意. DFS. #include<cstdio> using namespace std; int n ...
- 友情链接&部分题目的密码
YPL: https://www.cnblogs.com/Sdchr/ ZWL: https://www.cnblogs.com/acha XJ: https://blog.csdn.net/boyx ...
- React Native学习之自定义Navigator
Navigator还是最常用的组件, 所以自己封装了一个, 使用起来也比较简单, 如下: 首先导入组件 var MLNavigator = require('../Lib/MLNavigator'); ...
- gzip压缩目录
很遗憾,gzip不能针对整个目录进行压缩,只能递归压缩目录下的每一个文件. 当然,替代方案是只用tar进行打包,比如 tar cfz dir.tar.gz dirname
- Delphi 设置时间格式
// 设置WINDOWS系统的短日期的格式SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, 'yyyy-MM-dd'); Applicat ...
- 开发板无法ping通虚拟机的问题解决一例
先描述一下遇到的问题: 使用的开发板是Tq2440,我将虚拟机和开发板都设在在了同一个网段,并且虚拟机使用的是桥接的方式,我用nfs的方式挂载根文件系统是失败,系统无法起来,后来我进入uboot命令模 ...