网络学习笔记.docx
《网络学习笔记.docx》由会员分享,可在线阅读,更多相关《网络学习笔记.docx(14页珍藏版)》请在冰豆网上搜索。
网络学习笔记
IPV4报文结构&IP子网划分
IPV4头部结构
IP报文头部信息用于指导网络设备对报文进行路由和分片。
同一个网段内的数据转发通过链路层即可实现,而跨网段的数据转发需要使用网络设备的路由功能。
分片是指数据包超过一定长度时,需要被划分成不同的片段使其能够在网络中传输。
IP报文头部长度为20到60字节,报文头中的信息可以用来指导网络设备如何将报文从源设备发送到目的设备。
其中,版本字段表示当前支持的IP协议版本,当前的版本号为4。
DS字段早期用来表示业务类型,现在用于支持QoS中的差别服务模型,实现网络流量优化。
源和目的IP地址是分配给主机的逻辑地址,用于在网络层标识报文的发送方和接收方。
根据源和目的IP地址可以判断目的端是否与发送端位于同一网段,如果二者不在同一网段,则需要采用路由机制进行跨网段转发。
第一行:
Version(版本):
长度为4bit,填充为4
IHL(头部长度):
长度为4bit,最大填充值为15,携带的不是IPV4头部的长度,而是携带的数据行数,每一行数据的长度为4个字节。
通过用行数X4字节的方式计算IPV4头部长度。
TOS(服务类型):
可以为IP包标识优先级,主要用于区分不同的IP包。
在TOS中还有两个概念,IP优先级和DSCP值。
totallength(总长度):
IP数据包的长度(IP头部长度+填充的数据长度)
DSField(用于标识特权优先转发)
第二行:
(用于IP分片)
Identification(标识位):
用于标识每一个不同的IP包
flags(标志位):
第一个bit位:
Reserver(保留位):
不使用
第二个bit位:
DF位(Don'tfragment)不分片位:
如果DF位置0(默认为0),表示IP包可以被分片,如果DF位为1,表示IP包不能被分片。
第三个bit位:
MF位(Morefragment)更多分片位:
如果MF位置0,表示是最后一片,如果为1,表示后面还有更多的分片。
Fragmentoffset(分片偏移):
用于标识每一个分片的数据起始位置,每一片携带的数据是从哪里开始的。
通过这种方式可以区分IP分片的先后顺序,用于IP报文重组。
第三行:
Timetolive(TTL):
用于限制IP包的传输范围和防止IP数据包的转发环路,每经过一个设备减少一个字节,最小只为0,最大值为255.
protocolid(协议标识):
(2个字节)用于标识上层封装协议,协议举例:
TCP=6UDP=17ICMP=1IGMP=2
headerchecksum(头部效验):
用于效验IPV4报文头部的完整性,防止IP包在传输中被破坏或者篡改(2个字节)
第四行:
Sourceaddress(源IP地址):
填充IP包发送者的IP地址(4个字节)
第五行:
Destinationaddress(源IP地址):
填充IP包接收者的IP地址(
第六行:
option选项:
(0-40个字节)常见的是20个字节
最后一个字段是任选项,是数据报中的一个可变长的可选信息。
目前,这些任选项定义
如下:
•安全和处理限制(用于军事领域,详细内容参见RFC1108[Kent1991])
•记录路径(让每个路由器都记下它的IP地址,见7.3节)
•时间戳(让每个路由器都记下它的IP地址和时间,见7.4节)
•宽松的源站选路(为数据报指定一系列必须经过的IP地址,见8.5节)
•严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能
经过其他的地址)。
padding(垫片):
如果填充的option选项数据长度不足4个字节,需要用padding填充0来补全4个字节。
IP编址
IPv4地址为32比特的二进制数,(一个IP编制有32位=4个字节) 通常用点分十进制表示。
IP地址用来标识网络中的设备,具有IP地址的设备可以在同一网段内或跨网段通信。
IP地址包括两部分,第一部分是网络号,表示IP地址所属的网段,第二部分是主机号,用来唯一标识本网段上的某台网络设备。
IP地址分为网络位和主机位;而网络位的作用是给路由器进行路由寻址,主机位的作用是给主机配置IP地址
(网段与网段之间网络位不同,主机与主机之间网络位不同)
每个网段上都有两个特殊地址不能分配给主机或网络设备。
第一个是该网段的网络地址,该IP地址的主机位为全0,表示一个网段。
第二个地址是该网段中的广播地址,目的地址为广播地址(.255)的报文会被该网段中的所有网络设备接收。
广播地址的主机位为全1。
除网络地址和广播地址以外的其他IP地址可以作为网络设备的IP地址。
二进制、十进制和十六进制
网络中的数据可以采用二进制、十进制、或十六进制来表示,了解这些进制对理解IP网络基础知识很有必要。
每种进制使用不同的基值表示每一位的数值。
二进制每一位只有0和1两个值,基值为2,二进制数的每一位都可以用2的x次幂来表示,x表示二进制数的位数。
十六进制的每一位可以有16个数值,范围为0-F(即0-9和A-F),A对应十进制的10,F对应十进制的15(二进制的1111)。
二进制和十进制转换
例如:
1.我们通过上图的表来用加减法转换一下172
[172]十进制转换成二进制的方法:
首先用172对着上图的表从左往右从128到1依次去减(如果当前值≥表上当前相减的值时置”1“,当前值≤表上当前相减的值时置”0“)
172=172-128=44-32=12-8=4-4=0-0=0
10101100
(说明:
172大于2^7=128 可减128,二进制第一位写1
44小于2^6=64不能减,二进制第二位写0
44大于2^5=32 可减,二进制第三位写1
12小于2^4=16 不能减,二进制第四位写0
12小于2^3=8可减,二进制第五位写1
4等于2^2可减4,二进制第六位为1
0小于2^1,二进制第七位写0
0等于2^0,二进制第八位写0
172的二进制为:
10101100
2.将二进制数10101100转换为十进制(套用上面的进制表从左往右8个数对应相乘再把每位得出的数依次相加)
10101100=128+0+32+8+4=172
二进制第1位1x128(2^7)=128
二进制第2位0x64(2^6)=0
二进制第3位1x32(2^5)=32
二进制第4位0x16(2^4)=0
二进制第5位1x8(2^3)=8
二进制第6位1x4(2^2)=4
二进制第7位0x2(2^1)=0
二进制第8位0x1(2^0)=0
32位的IP地址分为4个字节,每个字节有256个取值。
因此,理论上IPv4可以有4,294,967,296个IP地址,但实际上只有其中一部分地址可以分配给网络设备使用。
本例中,IP地址的前三个字节表示网络号,最后一个字节表示该网络上网络设备可用的地址范围。
将二进制格式的IP地址转换为十进制格式时,需要把二进制中每一位1所代表的值加在一起,得出IP地址的十进制值。
IP地址分类:
IPv4地址被划分为A、B、C、D、E五类,每类地址的网络号包含不同的字节数。
A类,B类,和C类地址为可分配IP地址,每类地址支持的网络数和主机数不同。
比如,A类地址可支持126个网络,每个网络支持224 (16,777,216)个主机地址,另外每个网段中的网络地址和广播地址不能分配给主机。
C类地址支持200多万个网络,每个网络支持256个主机地址,其中254个地址可以分配给主机使用。
D类地址为组播地址。
主机收到以D类地址为目的地址的报文后,且该主机是该组播组成员,就会接收并处理该报文。
各类IP地址可以通过第一个字节中的比特位进行区分。
如A类地址第一字节的最高位固定为0,B类地址第一字节的高两位固定为10,C类地址第一字节的高三位固定为110,D类地址第一字节的高四位固定为1110,E类地址第一字节的高四位固定为1111。
∙私有地址范围
∙10.0.0.0~10.255.255.255
∙172.16.0.0~172.31.255.255
∙192.168.0.0~192.168.255.255
∙特殊地址
∙127.0.0.0~127.255.255.255(回环测试地址)(1~126)
∙0.0.0.0
∙255.255.255.255
子网掩码:
IP地址分类:
IPv4地址被划分为A、B、C、D、E五类,每类地址的网络号包含不同的字节数。
A类,B类,和C类地址为可分配IP地址,每类地址支持的网络数和主机数不同。
比如,A类地址可支持126个网络,每个网络支持224(16,777,216)个主机地址,另外每个网段中的网络地址和广播地址不能分配给主机。
C类地址支持200多万个网络,每个网络支持256个主机地址,其中254个地址可以分配给主机使用。
D类地址为组播地址。
主机收到以D类地址为目的地址的报文后,且该主机是该组播组成员,就会接收并处理该报文。
各类IP地址可以通过第一个字节中的比特位进行区分。
如A类地址第一字节的最高位固定为0,B类地址第一字节的高两位固定为10,C类地址第一字节的高三位固定为110,D类地址第一字节的高四位固定为1110,E类地址第一字节的高四位固定为1111。
∙私有地址范围
∙10.0.0.0~10.255.255.255
∙172.16.0.0~172.31.255.255
∙192.168.0.0~192.168.255.255
∙特殊地址
∙127.0.0.0~127.255.255.255(回环测试地址)(1~126)
∙0.0.0.0
∙255.255.255.255
子网掩码:
地址规划:
通过子网掩码可以判断主机所属的网段、网段上的广播地址、以及网段上支持的主机数。
图中这个例子,主机地址为192.168.1.7,子网掩码为24位(C类IP地址的缺省掩码),从中我们可以判断该主机位于192.168.1.0/24网段。
将IP地址中的主机位全部置为1,并转换为十进制数,即可得到该网段的广播地址192.168.1.255。
网段中支持的主机数为2n,n为主机位的个数。
本例中n=8,28=256,减去本网段的网络地址和广播地址,可知该网段支持254个有效主机地址。
无类域间路由CIDR(ClasslessInterDomainRouting)由RFC1817定义。
CIDR突破了传统IP地址的分类边界,将路由表中的若干条路由汇聚为一条路由,减少了路由表的规模,提高了路由器的可扩展性。
如上图所示,一个企业分配到了一段A类网络地址,10.24.0.0/22。
该企业准备把这些A类网络分配给各个用户群,目前已经分配了四个网段给用户。
如果没有实施CIDR技术,企业路由器的路由表中会有四条下连网段的路由条目,并且会把它通告给其他路由器。
通过实施CIDR技术,我们可以在企业的路由器上把这四条路由10.24.0.0/24,10.24.1.0/24,10.24.2.0/24,10.24.3.0/24汇聚成一条路由10.24.0.0/22。
这样,企业路由器只需通告10.24.0.0/22这一条路由,大大减少了路由表的规模。
ICMP协议
Internet控制报文协议ICMP(InternetControlMessageProtocol)是网络层的一个重要协议。
ICMP协议用来在网络设备间传递各种差错和控制信息,它对于收集各种网络信息、诊断和排除各种网络故障具有至关重要的作用。
使用基于ICMP的应用时,需要对ICMP的工作原理非常熟悉。
ICMP消息封装在IP报文中。
ICMP消息的格式取决于Type和Code字段,其中Type字段为消息类型,Code字段包含该消息类型的具体参数。
后面的校验和字段用于检查消息是否完整。
消息中包含32比特的可变参数,这个字段一般不使用,通常设置为0。
在ICMPRedirect消息中,这个字段用来指定网关IP地址,主机根据这个地址将报文重定向到指定网关。
在Echo请求消息中,这个字段包含标识符和序号,源端根据这两个参数将收到的回复消息与本端发送的Echo请求消息进行关联。
尤其是当源端向目的端发送了多个Echo请求消息时,需要根据标识符和序号将Echo请求和回复进行一一对应。
ICMP定义了多种消息类型,用于不同的场景。
有些消息不需要Code字段来描述具体类型参数,仅用Type字段表示消息类型。
比如,ICMPEcho回复消息的Type字段设置为0。
有些ICMP消息使用Type字段定义消息大类,用Code字段表示消息的具体类型。
比如,类型为3的消息表示目的不可达,不同的Code值表示不可达的原因,包括目的网络不可达(Code=0)、目的主机不可达(Code=1)、协议不可达(Code=2)、目的TCP/UDP端口不可达(Code=3)等。
ping?
-aSelectsourceIPaddress,thedefaultistheIPaddressoftheoutputinterface
-cSpecifythenumberofechorequeststobesent,thedefaultis5
-hSpecifyTTLvalueforechorequeststobesent,thedefaultis255
-tTimeoutinmillisecondstowaitforeachreply,thedefaultis2000ms
STRING<1-255>IPaddressorhostnameofaremotesystem
……
ping10.0.0.2
ICMP的一个典型应用是Ping。
Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。
用户可以在Ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数、等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。
Ping常用的配置参数说明如下:
1.-a source-ip-address指定发送ICMPECHO-REQUEST报文的源IP地址。
如果不指定源IP地址,将采用出接口的IP地址作为ICMPECHO-REQUEST报文发送的源地址。
2.-c count指定发送ICMPECHO-REQUEST报文次数。
缺省情况下发送5个ICMPECHO-REQUEST报文。
3.-h ttl-value指定TTL的值。
缺省值是255。
4.-t timeout指定发送完ICMPECHO-REQUEST后,等待ICMPECHO-REPLY的超时时间。
ICMP重定向场景:
ICMP重定向报文的用途:
避免次优路径
什么情况下才会触发ICMP的重定向报文?
1、如果IP包的发送源和到达目的地的下一跳在同一个网段
2、IP包的接收接口和发送接口是同一个接口