IP报文的格式和各个字段的含义
掌握IP分片
如何避免IP分片( 在应用层做限制 在传输层做限制
如何确定分片顺序 接收端如何确定所有分片都到了
IP线路
路由表 路由表每个字段的含义
ICMP协议:查询+报错
ICMP协议的层次和作用
ICMP报文的分类
ICMP的主机不可达报文是在什么情况下发出的
什么情况下不会导致产生ICMP差错报文
ICMP重定向差错报文时怎么来的,在何种场合出现
重定向报文有什么规则
如何理解IP的不可靠和无连接
为什么IP首部中要有总长度字段
IP首部校验和怎么计算的,与ICMPP,IGMP,TCP,UDP的首部校验和有什么区别与共同点
主机和路由器的本质区别
IP路由选择的过程是怎么样的
IP路由选择的特征有什么
IP搜索路由表的步骤
如果路由表中没有默认项,而又没有找到匹配项,这时如何处理
IP地址分类,如何划分的以及计算各类地址支持的主机数
ping命令的具体过程时怎么样的
IP地址分类,子网划分
基础:
网络层负责为运输层的分组交换在不同主机之间,网络层会将运输层产生的报文段或用户数据封装成分组或包选择合适的路由进行传送,所以有两个任务:1,在不同网络之间转发数据包 2,选择合适的路由(选择路径的协议都是IP协议)
网络层具有三个主要组件:IP协议、因特网控制报文协议(ICMP)、因特网路由协议,正是通过这些组件使网络层可以在复杂的网络网中找到最合适的路径,将分组从源主机移动到目的主机
IP报文
IP数据包:数据部分是传输层的分片,到网络层需要在数据部分加网络地址等构成首部,首部有两部分组成,一部分是固定的20字节,另一部分是可选的
每一行32bit,即4个字节,固定部分一共5行,所以固定20字节
IP报文的格式和各个字段的含义
1)版本:用来标识TCP/IP是哪个版本,ipv4就是4,ipv6就是6
2)首部长度:4个字节为单位,最小为5,最长为15,所以最小长度20个字节(就是固定长度),最大为60个字节
3)服务类型:略,不怎么使用
4)总长度:确定数据部分长度,一共16位,最多有2^16-1=65535字节
注意:网络层数据包最大有65535字节,而数据链路层最大时1500字节,所以网络层的数据部分超过1480字节,数据包就会分片
5)标识:如果出现数据包分片,用标识来确定哪些数据包是需要组合的
6)标志位:确定该数据包时完整的还是分片中的一部分,占3位但只有前两位有用,最低位是MF(more fragment),MF=1表示后面还有分片,MF=0表示是最后一个分片。中间位是DF(Don‘t Fragment),只有DF=0才允许分片
7)片偏移:偏移等于当前字节在数据部分的第几个再除以8
8)TTL生存时间:每经过一个路由器就减1,字段为0时,数据包就被丢弃,并且发送ICMP报文通知源主机,目的时防止数据包再选路时循环流动
9)协议:用协议号标识数据部分是什么数据,协议字段指出应该将数据部分交给哪一个进程,1为ICMP
其中ICMP协议号:1; IGMP协议号:2; TCP协议号:6;UDP协议号:17;OSPF协议号:89
10)首部检验和:16位,只检验数据报的首部,不检验数据部分,每经过一个路由器就会检验一次记得要对比ICM IGMP TCP UDP 分别对首部和数据进行校验的区别:ip仅仅只检验首部,而其他检验同时覆盖首部和数据,这里就是采用简单的计算方法来进行校验的
11)源地址和目的地址:都是IP地址
12)可变部分:一般没用
IP首部校验和是怎么计算的
- 先把校验字段和置为0
- 对首部中每个16位比特进行二进制反码求和
- 结果存在检验和字段中
- 收到一份IP数据包后,同样对首部中每个16bit二进制反码求和
- (再取反码),最后结果全为0则表示正确/// 如果不取反码则结果全为1表示正确
- 如果是错误的,IP就丢弃该数据包,但是不产生差错报文,而是由上层去处理
IP分片
▲链路层有能承载的最大数据量MTU,当数据报过大时,会将数据报的数据进行分片,称为多个更多的小数据报,然后用帧封装这些小数据报。这些较小的数据报被称为片。其中MTU = IP数据报 = 数据部分+IP首部
▲不仅源端主机会进行分片,中间的路由器也有可能分片,因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。而分片数据的重组只会发生在目的端的IP层。
▲当数据包比MTU大且DF = 0 时表示可以进行分片,每个片的最大尺寸就是MTU减去IP的首部
▲举例:在不够分之前每个分片都分最大值,即MTU-20 = 1480, 第一个1480,偏移量0/8 = 0; 第二个 1480, 偏移量1480/8 = 185;此时还剩4000-1480×2 = 1040,偏移量(1480×2/8)= 370
如何避免IP分片
在网络编程中,我们要避免出现IP分片,因为IP层时没有超时重传机制的,如果IP层对一个数据包进行了分片,只要有一个分片丢失了,就只能依赖于传输层重传,那样的话所有的分片都要重传一遍,这样的代价就有点大。
-
对于UDP包,我们需要在应用层去限制每个包的大小,一般不要超过1472字节,即以太网MTU(1500)- UDP首部(8)-IP首部(20)
-
对于TCP包,应用层就不需要考虑这个问题了,因为传输层已经帮我们做了:在建立连接的三次握手的过程中,连接双方会相互通告MSS(Maximum segment size,最大报文段长度),MSS一般是MTU-IP(20)-TCP 首部(20),每次发送的TCP数据都不会超过双方的MSS的最小值,所以就保证了IP数据报不会超过MTU,就避免了IP分片
接收端如何确定分片顺序以及怎么判断分片都到了
- IP分片和完整的IP报文拥有相同的IP首部,每个分片首部的16位的标识用于判断是否出自一个报文,相同则需要重新组装
- 13位的片偏移记录IP片相对于整个包的位置,凭此就可确定分片顺序
- 介于标识和片偏移的3位的标志中的最低位MF值(0或1)用于表示后面是还有分片还是就是最后一片
IP线路:
traceroute
是用来侦测主机到目的主机之间所经路由情况的重要工具:其过程充分利用TTL:
在收到目的主机IP之后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包之后,就自动把TTL减1,TTL为0路由器就会把这个包给抛弃掉,并同时产生一个主机不可达的ICMP给主机。主机收到这个数据报以后发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据报。如此往复直到达到目的主机,这样traceroute就拿到了所有的路由器IP
路由表每个字段含义
destinatio: 目的网段
mask:子网掩码
Gateway:网关,又称下一跳路由器。在发送IP数据包时,网关定义了针对特定的网络目的地址,数据包发送到的下一跳服务器。
Interface:接口,接口定义了针对特定的网络目的地址,本地计算机用于发送数据包的网络接口。网关必须位于和接口相同的子网(默认网关除外),否则造成在使用此路由项时需调用其他路由项,从而可能会导致路由死锁。(通过接口将数据包发送给网关
metric: 跳数
ICMP
ICMP用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息,这些控制信息并不传输用户数据。
ICMP的主要功能包括:1. 确认IP包是否成功送达目标地址;2. 通知再发送过程中IP包被废弃的具体原因; 3. 改善网络配置……
ICMP这种控制消息在IP数据报内部进行发送,就像TCP与UDP报文段那样,收到ICMP包的主机会分解ICMP的首部和数据,从而得到具体发生的原因
- ICMP是网络层的一个协议,其报文不是直接传送给数据链路层的,而是封装成IP数据报,然后再在数据链路层传输
- 从协议体系上看,ICMP的差错和控制信息传输只是要解决IP协议可能出现的不可靠问题,它不具有普遍意义上的传输机制,也不是传输层赖以生存的基础。
- ICMP是用于IP协议在执行过程中的出错报告,由路由器想源主机报告出错原因,只是报告差错,不纠正差错
ICMP报文格式
- ICMP信息必须全部封装在IP数据报的数据域中,有长度限制
- 根据IP数据报首部规定,协议字段为1时,表示该IP数据报携带的是ICM信息,是ICMP数据报
- ICMP报文有很多种不同的类型,在ICMP首部有不同的类型字段,用于描述不同类型的ICMP报文
ICMP报文分类
- 终点不可达
- 源点抑制
- 时间超过
- 参数问题
- 改变路由
- 回送请求和回答
- 时间戳请求或回答
什么情况下不会导致产生ICMP差错报文
1)ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文??
2)目的地址是广播地址或者多播地址的IP数据报
3)链路层广播的数据报
4)不是IP分片的第一片
5)源地址不是单个主机的数据包(源地址不是零地址,环回地址,广播地址或多播地址)
(嗯嗯嗯……没理解……)
ICMP的主机不可达报文是在什么情况下发出的
三层设备(路由器)给该主机寻路时,没有找到相应路径,向源IP发回ICMP主机不可达
ICMP 重定向差错报文是怎么来的,在何种场合出现,有什么规则
- 主机的默认路由指向的下一跳是R1,主机发送IP数据报给R1
2)R1收到数据报之后检查路由表,发现下一跳R2的IP地址与数据报的源IP地址属于同一个网段,路由器R1就发送一个ICMP重定向报文给主机
3)主机接收到ICMP重定向报文之后,接下来的数据报就直接发送给R2,而不再发送给R1了
- 规则
1)重定向报文只能由路由器生成
2)重定向报文是为主机而不是为路由器使用的
1. 如何理解IP的不可靠和无连接
2. 为什么ip首部中要有总长度字段
因为数据链路(以太网)需要填充一些数据以达到最小长度,因为以太网帧的最小长度是46字节,但是IP长度可能更短,所以需要总长度来确定IP数据部分的内容
3. IP路由选择的过程
根据最长匹配原则,找到条目,发送到指定的路由器。如果不能找到,返回一个“主机不可达”或者网路不可达“的错误
- 最长匹配原则:原则是选择具有最长(最精确)的子网掩码。
4. IP路由选择的特性有什么
- IP路由选择是逐跳进行的,只提供下一跳地址
- 为一个网络指定一个路由器,而不是为每个主机指定一个路由器,这样可以缩小路由表规模
5. IP搜索路由表的步骤
IP层进行的路由表搜索实际上就是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组:
搜索匹配的主机地址—>搜索匹配的网络地址—>搜索默认选项
6. 如果路由表中没有默认项,而又没有找到匹配项,如何处理
结果取决于该IP数据报是由主机产生的还是被转发的:
· 如果数据报是由本机产生的,那么就给发送该数据报的应用程序返回一个差错,“主机不可达差错”或者“网络不可达差错”
·如果是被转发的数据报,就给原始端发送一份ICMP主机不可达的差错报文
7. IP地址的分类,如何划分,计算各类地址支持的主机数
- A类:首位为0,8位网络号,24位主机号,1.0.0.1~126。255.255.254(127.0.0.1是环回地址
- B类:首位为10,16位网络号,16位主机号,128.0.0.1~191.255.255.254
- C类:首位为110,24位网络号,8位主机号,192.0.0.1~223.255.255.254
- D类:首位1110,多播地址,也叫组播地址224.0.0.1~239.255.255.254
- E类:首位11110,保留地址
A类:最小00000001.0.0.1; 最大011111110.255.255.11111110(注意011111111=127,环回)
B类:最小10000000.0.0.1; 最大10111111.255.255.254
C类:最小11000001.0.0.1; 最大11011111.255.255.254
- 最大可用主机数:2^(主机位数) - 2
A:2^(24)-2;
B:2^(16)-2;
C:2^8 -2
- ★ 子网掩码:帮助判断对应主机是否在一个网段中国
- 子网掩码又叫网络掩码、地址掩码,结合某个IP地址,可可知道IP地址的网络地址和主机地址了:(举例)一个计算机的IP地址配置为172.16.122.204,子网掩码是255.255.0.0,就知道了该计算机处于的网段是172.16.0.0
- 计算机和其他计算机通信时,首先判定目标地是否和自己处于同一网段内:具体就是先将自己的子网掩码和自己的IP地址进行与运算得到属于自己所属的网段,再将自己的子网掩码和目的地址的IP地址进行与运算得到它的网段
- 如果不在一个网段就用网关的MAC地址封装数据帧,将数据帧转发给路由器
-
利用子网数目计算子网掩码
把B类地址172.16.0.0划分为30个子网络,它的子网掩码是多少?
:2^4 < 30 <2 ^5 ,结合上面划分子网的知识,就知道了子网掩码要后移5位,easy,所以所需要的子网掩码就是255.255.11111000.0 = 255.255.248.0
-
利用主机数计算子网掩码
把B类地址172.16.0.0划分成若干自网络,每个子网络能容纳500台主机,它的子网掩码是多少
:最大主机数=2^(主机位)-2,2 ^ 7 =128 2 ^ 8 = 256 2 ^9 = 512,bingo,所以主机位是9位 = 8+1; 所以子网掩码往后移7位,为255.255.11111110.0 = 255.255.254.0
-
利用子网掩码计算最大有效子网数
A类IP地址,子网掩码为255.224.0.0,它所能分配的最大有效子网数是多少?
:A类子网掩码原本是255.0.0.0,224 = 11100000,所以子网掩码是往后移了3位,那么最大有效子网数就是2 ^ 3 = 8
-
利用子网掩码计算最大可用主机数:
A类IP地址,子网掩码255.252.0.0,将它划分为若干子网络,每个子网络中可用主机数有多少?
:252 = 11111100,后移6位,那么主机数就是24-6 = 18,最大可用主机数是2 ^ 18-2(减2是因为要除去全是0和全是1的广播地址)
-
利用子网掩码确定自网络的起止地址
B类IP地址172.16.0.0,子网掩码为255.255.192.0.它所能划分的子网起止地址是多少?
:192 = 11000000,子网掩码往后移了2位,所以最多可以分4个子网络,分别固定为00,01,10,11
固定00:最低:00000001.0 ;最高00111111.255
①172.16.1.0~172.16.63.255
固定01:最低:01000000.0;最高01111111.255
②172.16.64.0~172.16.127.255
固定10:最低10000000.0;最高10111111.255
③172.16.128.0~172.16.191.255
固定11:最低11000000.0; 最高11111111.255
④:172.16.192.0~172.16.255.255
- ping概览:
1)当我们检查网络情况的时候,最先使用的命令肯定是ping
,一般用ping
查看网路情况的时候主要是查看两个指标,第一看是不是超时,第二看是不是延迟太高
2) ping命令是依托于ICMP协议实现的,ICMP协议头包含4个字节,头部主要是用来说明ICMP类型和校验的,另外还在局域网下还借助ARP协议,且在ping之后还会进行ARP缓存更新
- Ping过程解析:
1,A电脑(192.168.2.135)发起ping
请求,ping192.168.2.179
2,A电脑广播发起ARP
请求,查询192.168.2.179的MAC地址
3,B电脑发起ARP
请求,向A电脑发起单向应答,告诉A电脑自己的MAC地址为xx:xx:xx:xx:xx:xx
4,知道了MAC地址之后就开始真正的ping请求,由于B电脑可以根据A电脑发送的请求知道源MAC地址,所以可以根据源MAC地址进行响应了
====》(画图太麻烦,语言组织一下前后过程
A电脑发出发出ARP广播,询问谁持有192.168.2.179,B电脑发出回应,返回A电脑自己的MAC地址,A发出ping请求,B给出ping响应
然后在ping请求和响应之后,B电脑对A电脑发出ARP请求,这个arp请求的原因有二:
■ 由于ARP有缓存机制,为了防止ARP国企,结束后重新更新下ARP缓存,保证下次请求能去正确的路径,如果ARP过期就会导致出现一次错误,从而银杏果i昂测试正确性
■ 由于ping命令的响应时间是根据请求包和响应包的时间戳计算出来的,一次ARP过程也会消耗时间,所以这里提前缓存最新的ARP结果就是节省下次ping的ARP时间
===传输层我来了xx