网络协议系列之三: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分组中校验和只覆盖首部,不包括数据。这个字段了解即可

时间: 2024-12-08 12:25:21

网络协议系列之三:IP的相关文章

完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三

转载自 PiggyXP(小猪) 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三 手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                              ----- By PiggyXP(小猪) 前 言         本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中

网络协议系列之十一:互联网协议入门(一)

前言 我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信.上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗? 互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite).它们对电脑如何连接和组网,做出了详尽的规定.理解了这些协议,就理解了互联网的原理. 下面就是我的学习笔记.因为这些协议实在太复杂.太庞大,我想整理一个简洁的框架,帮助自己

网络协议系列之十二:互联网协议入门(二)

(接上文) 七.一个小结 先对前面的内容,做一个小结. 我们已经知道,网络通信就是交换数据包.电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的通信.数据包的结构,基本上是下面这样: 发送这个包,需要知道两个地址: * 对方的MAC地址 * 对方的IP地址 有了这两个地址,数据包才能准确送到接收者手中.但是,前面说过,MAC地址有局限性,如果两台电脑不在同一个子网络,就无法知道对方的MAC地址,必须通过网关(gateway)转发. 上图中,1号电脑要向4号电脑发送一

网络协议系列之一:HTTP(1)

HTTP协议是web开发必须掌握的协议之一,文章的内容并没有按照教科书式对协议本身进行说明.这里特意将一些web开发遇到的常见问题进行了总结.也方便以后自己开发进行迅速查阅. 1.Http的报文结构 http的报文分为请求报文和响应报文,请求报文结构包括:请求行.请求头.请求体:响应报文结构包括响应行.响应头.响应体.下图简要表示了请求报文的结构: 下面是我输入www.baidu.com获取的请求信息和响应信息: 请求报文: /*请求行,get是请求方法,http://www.baidu.com

协议系列之IP协议

1.协议 协议(protocol)的定义:为计算机网络中进行数据交换而建立的规则.标准或约定的集合.两个终端相互通信时双方达成的一种约定,规定了一套通信规则,双方通信必须遵守这些规则.这些规则规定了分组报文的交换方式.报文的结构.报文每部分所代表的意思(例如从n位到m位表示目的地址),以及规定了怎样解析次协议的报文.举个例子,我们打开浏览器后,输入http://www.baidu.com,此时即是使用了HTTP协议进行通信,HTTP协议的设定就是为了约束规范浏览器跟服务器双方的通信.浏览器发送的

网络协议系列之四:IGMP、ICMP和ARP

前言 IGMP协议是一个组管理协议,它帮助多播路由器创建以及更新与每一个路由接口相连的忠实成员列表(就是与该路由接口连接频率较高).ICMP协议实际上就是差错控制协议,弥补了IP协议没有差错纠正机制以及差错报告的缺憾.ARP是一个地址映射协议,可以把一个IP地址映射为MAC地址. IGMP协议 1.IGMP是管理组成员关系的协议 2.IGMP报文分为成员关系报告报文和成员关系查询报文.成员关系查询报文是为了查找网络中活跃的组成员而发送的报文,而成员关系报告报文是为了记录响应者在网络中的成员关系而

网络协议系列之二:HTTP(2)

这篇文章继续对HTTP协议进行说明. 一个http事务包括客户向HTTP服务器发送请求以及服务器向客户端发送响应两个过程.根据事务的特点,这两个过程具有原子性,任何一个过程失败都会进行回滚(恢复事务之前的状态).从请求与响应的角度出发,http的知识点都是围绕这两个角度展开的.每次客户的请求都会向服务器发送一个请求报文,请求报文的结构包括请求行.首部行.空行和请求体,一个http响应包括响应行.首部行.空行和响应体.http是基于TCP协议之上的应用层协议,默认使用80端口进行传输,也有基于SS

网络协议系列之七:TCP拥塞控制

拥塞控制是TCP传输中很重要的一环,TCP拥塞控制使用一个拥塞窗口以及拥塞策略来进行拥塞控制.在前面的流量控制中提到发送端的发送窗口取决于接收窗口,实际上,发送方的窗口大小是接收窗口与拥塞窗口中的较小值.拥塞窗口的大小又取决于网络的拥塞状况.而具体确定拥塞窗口大小则需要拥塞策略来决定. 拥塞策略包括慢开始.拥塞避免.拥塞检测.TCP的一般是从一个比较小的传输速率开始,然后迅速增大到阈值,到达阈值后以一个比较小的速率继续传输,如果传输过程中遇到了网络拥塞就执行拥塞避免或者拥塞检测算法传输数据,直到

网络协议系列之六:TCP流量控制

TCP的流量控制就是TCP接收端对发送端发送多少字节的数据进行控制,防止接收端处理不及而丢失数据.差错控制就是保证接收端接收的数据是完整未受损伤的,是可靠性的重要保证. 这里以TCP连接的建立过程说明流量控制,则流量控制的过程如下: TCP发送端向接收端发送一个SYN=1.seqNo=100的连接请求.这里的SYN=1表示一个建立连接的标志位,seqNo表示发送端发送数据的起始字节的编号是100 接收端收到SYN=1.seqNo=100的报文后,给客户端发送ACK=1.seqNo=1000.ac