网络层协议以及IP编址
一、网络协议
IPX很难见到了,当初星际争霸就需要 有一个IPX协议支持才可以。
IP协议
- IP协议有版本之分,目前分为IPv4和IPv6,现在主用是IPv4,但是往IPv6发展(就像智能手机发展过程)
9
9
关于头部(首部)的概念
英文叫header,然后就机翻成头部,实际上就是增加在数据外面的包装盒,然后正常书写或者标识过程就是在数据的左边。
但是wireshark的呈现形式是叠罗汉式的,也算是头部。
IPv4报文格式
版本号(Version) 4bit
IPv4,因此就是4,二进制表示为0100
头部长度(Header Length) 4bit
首部长度表示整个IP头部包含多少个4字节,而不是首部长度为多少首部就多长。
例如下面的首部长度为5(二进制为0101),那么就表示IP首部包含5个四字节,因为IP首部长度为20字节。
由于首部长度总共只有4bit(最大为1111),因此IP首部最大就是15x4=60字节,换言之,IP选项字段最大40字节。
服务类型(TOS) 8bit
(现阶段仅作了解)
传统用法
一共8bit,前3bit叫做IP precedence,由于是3bit,因此取值范围是0~7。
紧接着4bit为TOS位。
这四个bit要么全部置零,表示一般服务,要么就只有一个bit是置一的。当第一bit置一,表示最小延迟,接着依次是最大吞吐量,最高可用性,最小费用。
最后一bit不用。
现代用法
前六位作为DSCP位,后面两位没用。
总长度(Total Length) 16bit
表示整个IP报文(头部+数据)的长度,由于是16bit,因此决定了IP报文最大不能超过65536字节。
针对这个不能超过65535字节的特性,有一种很老的攻击叫做ping of death。当98系统收到超过65535字节的报文的时候,就会挂掉。
可以使用分片技术,让超过65535的IP报文在途中进行分片,到了目的98系统之后,让系统进行重新组装。
标识字段identification(16bit)
发送出IP报文的设备都会对每一个报文进行标识,也就是表示字段,标识字段是各不相同的,发一个包标识字段增加1。
例如1.1.1.1 ping 1.1.1.2
9
标志位flags 3bit
第1bit:预留不用
Don’t fragment:置位(set,值为1)则标识任何情况下都不分片
MF(More Fragment):置位(set,值为1)表示后面还有分片,不置位(not set,值为0)表示后面没有分片,这个报文是最后一个分片了
片偏移fragment Offset 12bit
发送数据前,把出接口MTU(太网上能够传输的最大DATA字节数为1500)与即将发送数据包(除了以太网帧以外)的长度进行比较。
如果发送数据包大于出接口MTU那么就进行分片。
分片可以发生在原始发送端主机上,也可以在中间路由器上。
片偏移量:被分片的数据和原始数据相比,偏了多少。
如果一个IP报文出现了分片,无论分成多少片,标识位都是一样的。
eg.1 MTU的极限试探
MTU以太网最大的传输单元,数值为1500字节
EthernetII 18字节(6字节DMAC+6字节的SMAC+2字节的type+4字节的FCS校验)
以太网的报文大小最大1518字节
1500字节包含:IP头部(20字节)+ICMP头部(8字节)+数据(1472字节)!!!
构造PING报文
Step 1 配置IP地址
略
Step 2 保证路由全通
system-view
ospf 1
area 0
network 0.0.0.0 255.255.255.255
Step 3 联通性测试
Step 4 端口MTU观察
在AR2的G0/0/0端口通过命令display interface g0/0/0
Step 5 不分片发送
AR1上使用命令
ping -s 3000 -f 1.1.1.1
其中-s 表示发送的ICMP数据的字节数
-s Specify the number of data bytes to be sent, the default is 56bytes
-f表示誓死不分片
-f Set Don't Fragment flag in packet (IPv4-only)
说明这个吃不消
Q:在不做任何干预的情况下,请问-s最大配置多少?
A:1472字节
由于MTU=1500字节,这就决定了IP头部(20字节)+ICMP头部(8字节)+ICMP承载的数据(1472字节)≤1500字节
9
eg.2 分片观察
AR1上允许分片,并且发送ICMP 3500字节,即
ping -s 3500 -c 1 1.1.1.1
-c 1 表示发送1个ICMP报文,默认5个
-c Specify the number of echo requests to be sent, the default is 5
从抓包可以看出,ICMP request报文被分成了三个片
第1片
第二片
第三片
其他:
- 三个报文实际上是1个报文的分片,所以id号相同,均为352
- 由于只有第三片带有icmp头部信息,因此被识别为ping报文,上面两个只是分片
生存时间TTL (8bit)
主要是为了防止三层环路导致的数据包无线转发。TTL最大255跳,经过一个进行三层处理的设备(就是需要处理到网络层信息,即中转站)减少1。
设备收到减1,当该值为0的时候,还没到目的地就丢弃。
例子
AR1上
ping -h 10 -c 1 1.1.1.1
在AR1上抓包,
在AR2上抓包
Q:设置成多少正正好无法ping通1.1.1.1
A:3跳
协议号 protocol(8bit)
首部校验和(16bit)
不对数据部分进行校验。
源目IP地址 (64bit)
扩展头部
。。。。
IPv4地址介绍
计算机只能识别01010101的二进制,而人类比较能够接受点分十进制
A.如果不用点分十进制,那么IP地址32bit,就会出现2^31这么大的数值,人记不住!
点分后只要能知道2^7即可
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
然后相应的数字相加也要很敏感
128、192、224、240、258、252、253(几乎不用)、255
10101010 ===>2^7+2^5+2^3+2^1=128+32+8+2=170
是一个智力游戏
掩码
3.掩码一定是连续的1+连续的0(或者全1、全0),且1要在前,不可能出现101010101,或者0000011111
99
包含在自身的主机地址范围内的,在以太网中直接通过ARP请求MAC地址,并封装目的地的MAC地址进行访问。
不包含在自身的主机地址范围内的,在以太网中直接通过ARP请求网关MAC地址,并封装网关的MAC地址进行访问。
Q:192.168.10.1和192.168.20.1是否在一个网段中?
A:不同网段--->192.168.10.1/24 192.168.20.1/24
相同网段--->192.168.10.1/16 192.168.20.1/16
Q:192.168.10.1/24和192.168.10.129/25是否是同一个网段?
A:
A:
组播地址没有掩码的概念,一般都是作为目的IP使用
掩码的全1部分,对应的IP地址的网络部分,全0部分对应的是IP地址的就是主机部分
11111111.11111111.11111111.00000000
网络地址(网络号)
掩码0对应的IP地址(主机部分)全为0,则是网络地址(网络号)
11111111.11111111.11111111.00000000
广播地址
掩码0对应的IP地址(主机部分)全为1,则是该网络的广播地址
11111111.11111111.11111111.00000000
主机地址
可以配置在网卡上的
掩码0对应的IP地址(主机部分)既不是全1也不是全0,则是该网段的主机地址
11111111.11111111.11111111.00000000
1.IP地址单独出现其实意义不大,一定要结合掩码一起出现,才会知道哪些是网络位哪些是主机位。
例如:
2.一个网段的主机位个数是2^(32-掩码长度)-2(网络地址和广播地址)
比如192.168.1.0/24,则主机位位2^8-2=254个
私网IP地址
IPv4地址 2^32个地址(大概40亿个)(全球60亿),已经不够用了
Q:公网可以偷偷用私网IP地址吗?
A:可以
9
子网划分
9
不划分子网可能带来的不便
颗粒度太大,浪费
举例,互联地址只要两个IP地址,但是如果有用24位的,则会浪费252个IP地址,Q:能不能一个网段的配置在不同的接口呢?
A:不可以!因为路由器一个接口就必须是一个单独的网段,相同网段进行配置会报错
如何进行子网划分
99
子网划分后,所有的网络号、主机位、广播地址的算法是一样的。
9
ICMP协议
华为tracert (其他厂商是traceroute)
首跳AR1路由器发送一个目的UDP端口号以33434开始的TTL(Time to Live)为1的UDP数据包,第二跳路由器收到后,将TTL减1(变成0)就不再往目的传递,但是还没到目的地,而是回复一个Code为11,Type为0的ICMP超时信息。
每发送一个UDP的报文,目的端口号+1,每个下一跳发送三个这样的UDP报文。
收到后首跳路由器会将这源地址打印到出来。
此时首跳路由器再发送一个目的UDP端口号为33437的TTL为2的UDP数据包,第三条路由器收到后,发现TTL为1,就不再往目的传递,而是回复一个Type为11, Code为0的ICMP超时信息。
收到后首跳路由器会将这源地址打印到出来。
以此类推。
到了最后一跳路由器后,最后一跳路由器发现是给自己的,就无所谓TTL为多少,但是发现这个UDP报文是发给自己的,但是一看需要访问的是一个334xx如此高的端口,但是并没有应用程序侦听这个端口,因此会回复一个Type为3, Code为3的ICMP端口不可达的信息给第一跳路由器,第一跳路由器收到之后,就知道已到达目的。就将最后一条路由器打印出来。
总结:
1.前面都是TTL超时,最后一个是端口不可达。
IPv4地址配置
连续性 172.16.0.0/16-172.16.15.0/16
标签:编址,字节,04,IP,报文,分片,地址,IP地址 From: https://blog.csdn.net/J_JJD/article/details/140129686