第四章 网络层
序言
没保存,电脑没动放着去吃饭,结果win7就休眠了,启动虽然网页度还在,可以我的博文没保存啊,心痛,只能在重头来了,只能说博文应该改进改进,如果直接关了,应该帮用户自动保存草稿的。重新写的。反正今天下午的任务在这里摆着。加油
----WZY
一、回顾
TCP/IP协议栈:物理层、链路层、网络层、传输层、应用层(会话层+表示层+应用层)
物理层:通过比特流在线路中传输来完成我们传输数据的目的,传输的方式很多种,传输的介质也很多中,光纤等
链路层:数据帧,在数据包(报)上加mac地址形成数据帧,其中的CRC检测原理用来检测数据的完整性,这一层用到的协议有PPP(点到点协议)、例如家中的拨号上网, CSMA/CD协议(广播协议),在局域网中用的很多。其中会发生一系列的问题,和解决问题的办法。
网络层:数据包(报),加上源ip地址和目标ip地址了。这一层的协议有四种,ARP(地址解析协议)、RARP(逆地址解析协议)、ICMP(网际控制报文协议)、IGMP(网际组管理协议)。这四种协议只是和IP协议配套使用,。在一章还能学到的是数据包的结构是怎么样的。什么是ip地址,为什么需要ip地址,怎么分配和区分ip地址的,这这一节我们度会讲解到。
传输层:这里会讲解到端口。常见的80端口,我们学习javaWeb时,使用Tomcat中,看到的是8080端口,浏览器使用的是80端口,这一节就会讲到端口是干嘛用的。
应用层:待续。
二、网络层
1、基础知识
什么是ip地址?
不就是一连串数组加.组成的吗,比如我们常常设置路由器时登录192.168.1.1。这个就是ip地址。那到底是什么样的呢?
ip地址就是32位,也就是4个字节组成,因为32位太长了,我们不好识别,所以每次将其分为8位一组,分成4组,然后在根据每组换算成10进制数组,组与组之间用.分隔开来,举个例子,11111111,11111111,11111111,11111111就可以用255,255,255,255来表示了,所以每一组都是从0到255之间。现在在来看192.168.1.1这个ip地址,也能将其换成2进制来表示,只不过那样太麻烦,让人不易于看懂,所以就将其用10进制来表示。
ip地址的意义在哪里呢?要上网就需要一个ip地址,这个ip地址不能和别人一样,独一无二,因为在网络上通信就是通过ip地址来找到你这台主机的,但是这个ip地址不是固定的,比如你在家拨号上网,是A这个ip地址,下一次拨号,可能就不是A,变成B了,这要看你所在的网络给你分配了什么ip地址。如何通过ip查找到你,这个问题后面来讨论。
ip地址的分类?
既然每个人的ip地址度不一样,那一台主机怎么通过ip地址找到另一台主机的呢,茫茫人海,不可能一个个查找把,所以就有专门的人来管理和分配这个ip地址,
看看以前怎么分的地址(了解)
分类编址 = <网络号>+<主机号>
网络号由你所连的网决定,学校的局域网,公司的局域网,城市的广域网等,就是相当于先市、在区、在到村这样的。跟快递一样,你ip地址肯定也得这样分,先找到大的,然后慢慢一层层找下去。
A类地址:网络号有8位,第一位固定为0,127种,主机号有24位,那么就能给该类地址划分16777215个ip地址把,也就1千多万个地址,意思就是比如你需要组建一个有1千多万台主机的网络,那么你就要去分配一个A类地址,要求给你一个网络号,然后其中1千多万的ip地址就由你自己分配了,最多也就只能分配127个这样的网络
B类:网络号、主机号16位,就能有65535个网络号和65535个主机号了。
C类:网络号有24位,也就能够分配1000多万个网络,但是主机号只有8位,也就是只能够自己分配254台主机最多
D类:用于多播,多播后面讲
E类:留着以后用
这就是我们老早以前所使用的ip地址,就是这样分的,这样看起来很合理啊,你看B类中,有那么多种,肯定够分了把,但是会暴露出一个问题就是,C类地址只能分配254台主机,现在中小型网络那么多,度超过了254台电脑,如果A公司有1000台电脑,那他肯定要去分配B类地址,就造成了几万个的ip地址浪费了。这显然不是很合理。
划分子网 = <网络号>+<子网号>+<主机号>
这是ip地址分类的第二大步,中间加了一个子网号,这样就加大了对上面的A类和B类地址的使用率。也就减少了A类和B类地址的浪费,但是也有问题就是C类地址不管怎么划分,他所容纳的主机太小了,随着网路的扩增,人人度使用电脑,那么A类和B类迟早度会用光,所以就用到了我们现在的IP地址
无分类编址 = <网路前缀>+<主机号> 这个就是我们现在用的ip地址的算法。
这个一看,跟第一种分类编址一样呀,其实很大的不同就在于分类编址的网络号不能变,是固定长度,而无分类编址通过网络前缀可变化,就能根据你需要多少个主机号来自由给你分配网络前缀了。
网络前缀:也就是用不定长的一连串1来表示ip地址的网络号。什么意思呢?
网络前缀:255.0.0.0 ip地址:192.168.1.1 那么该ip地址的前8位就属于网络号。
网络前缀:255.224.0.0 ip地址:192.255.1.1 因为255是8个1,224是111 00000 ,所以前11位表示网络号,也就是这个ip地址是处于192.224.0.0这个网络中,在这个网络中,能包含21个1转换为10进制这么多的主机。
这个网络前缀我们也称子网掩码,所以现在知道ip地址和我们的子网掩码什么意思了吗。
例如:已知ip地址141.14.72.24,所在网络的子网掩码是255.255.192.0,试求其网络地址?
子网掩码:255.255.192.0 11111111,11111111,11000000,00000000
ip地址:141.14.72.24 10001101,00001110,01001000,00011000
所以根据子网掩码知道ip地址的前18位为网络号,网络地址就为:10001101.00001110.01000000.00000000 转换为10进制就是141.14.64.0, 能够存纳14位1也就是16383台主机。(别问我怎么算的,肯定拿二进制转换器啊,不可能自己手算把,哈哈,二进制转10进制这么多怎么手算呢,记住特殊的,8个1就是255)
ip地址和MAC地址的区别?
mac地址:物理地址
ip地址:网络中的地址
这两者的关系是什么呢?在网络中我们通过主机的ip地址,先找到他的网络地址,到达了网络地址后,然后通过该网络中的老大(路由器)来分析一下这个ip地址是你网路中的哪个主机,这时,老大(路由器)就通过该目标ip地址改到对应主机的mac地址,既然知道了mac地址,就能找到该计算机了。就好比什么呢。路由器是每次分配给你的ip地址不一样,但是你的mac地址肯定不会变,所以就根据ip地址找到你的mac地址。但是怎么找到的呢?就要通过网络层中的ARP(地址解析协议)协议了。
知道了基础的知识后,现在来讲解网络层的几个协议
RARP:逆地址解析协议(现在度不单独讲这个了,所以我在图中画在红色圆圈内部,因为RARP已经被DHCP协议给包含了,DHCP协议在后面会讲解到),所以我们下面讲的就4个协议。
二、ARP协议
地址解析协议:通过ip地址来解析主机的mac地址,是怎么个过程呢,拿局域网来说,一个局域网中有很多主机,主机A想和局域网中的主机B通话,但是只知道对方的ip地址,所以他就通过发广播,给局域网中所有的主机,问这个ip地址是谁,主机B收到了这个信息,通过网络适配器(网卡)就发现自己是这个ip地址,然后就把自己的mac地址发给源主机,这样就知道了mac地址,就能够通信了。
类似的,在跨网络中就不是直接发广播了,先通过ip地址找到对应的网络地址,如何找到的对应的网络地址呢,通过路由器,每个路由器度有三层。网络层、链路层、物理层,也就是说最高能够识别网络层中的东西来,那么路由器也就有ARP协议了,每个路由器度能识别出目标ip地址在哪个路由器上,这其中涉及到了很多算法,我们这里不做更多的解释,简单来说,路由器能根据目标ip地址找到下一跳路由器的mac地址,然后一步一步跳下去,直到找到目标ip地址的网络地址的路由器,然后通过该路由器来找到目标ip地址的mac地址,这样就能够找到目标主机了。这就是ARP协议。
发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
三、IP协议
IP协议通过看一下IP数据包(报)的格式就知道IP协议是干嘛的了,就是来规定数据报的格式,以及定义的功能
固定部分:20个字节,一行是4个字节,有5行,自己看清楚
版本:占4位,IP协议的版本,通信双方的IP协议版本要一致,普遍用IPv4,以后可能会用IPv6.
首部长度:占4位,可表示的最大十进制为15,单位是32位字(4个字节),表示首部最长为60个字节,也就是说除去固定部分的20个字节,可选字段和填充最多能是40个字节。
区分服务:占8位,1个字节。有些要传输的数据要立马传达到对面,比如视频,语音这样的,不能跟邮件慢慢吞吞的达到对方一样,需要立马送达,这就是为什么需要这个区分服务了
总长度:占16位,2个字节。占首部+数据部分 的总长度是多少。数据帧最长不能超过1500个字节,数据包就不能一次性发太大,如果发的太大就要选择分片处理了。
标识:占16位,2个字节,一个计数器,每产生一个数据包,计数器就加1,当数据包被分片时,下面将会说到分片问题,所有分片后的数据包的标识度一样。这样相同的标识的数据包片就能够重新组合到一起
标志:占3位,第一位暂时没意义,第二位DF:不能分片的意思,为1时,不能分片,为0就可以分片 第三位MF 还有分片的意思,为0代表这是若干数据包中的最后一片
片偏移:占13位,在较长的分组在分片后,某片在原分组中的相对位置,几个例子,1111,1111,1111,1111 这16位,分成4个数据包分片来发,第一个数据包分片的片偏移为1,第二个为5,第三个为9,第四个为13,就是这个意思,片偏移以8个字节为偏移单位,也就是说,每个分片的长度一定是8字节的整数倍,上面是以位来举例说明问题,实际上单位是8个字节为单位。
生存时间:也就是ping命令中显示的TTL字段,跳数限制,每经过一个路由器,就减1,当跳到0后,就丢弃该数据包。window系统的起始TTL为32、Linux64、xp:128
协议:占8位,数据包中数据部分使用的是什么协议,方便目的主机的IP层知道讲数据部分上交给哪个处理。(也就是下一章要将的TCP还是UDP协议)
首部检验和:占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
源地址:占32为,也就是源IP地址
目标地址:占32位,也是IP地址
可选部分:为了使整个数据包为整数个字节而设置的。
四、ICMP协议
这个比较简单,就两部分ICMP差错报告报文、ICMP询问报文 这个挺使用的,比如我们经常用来测试网络连接畅通的ping命令等
ICMP差错报告报文:检测在传送数据的过程中,发生的错误,如果发生了错误,会通过该协议返回给源主机一个带有错误原因的数据包
终点不可达:发送数据后,路由器或主机不能完成交付数据报时,就会往源主机发送终点不可达报文
源点抑制:当路由器或主机由于网络拥塞而丢弃数据报时,返回一个源点抑制报文
超时:
参数问题,在ip数据包中的首部有的字段不正确时,丢弃该报,返回参数问题报文
改变路由(重定向):路由器把改变路由报文发送给主机,让主机下次直接经过改变后的路由器。
ICMP询问报文:
回送请求和回答:主机向特定目标发出询问,收到此报文必须返回一个ICMP回送回答报文。用于测试目的站是否可达。
时间戳请求和回答:请某个路由器或主机回答当前的日期和时间,用于进行时钟的同步和测量时间。
五、IGMP协议
用于多播,解释一下多播是什么把。
广播:老师在台上讲课,你们能随时看到老师的电脑屏幕,因为采用的广播,每个人度能接受到老师屏幕上所有的数据包
多播:在一个局域网中,有三个多播组,A、B、C,A在放java视频,B在放C++视频,C在放娱乐视频,如果你想看Java视频,那么你就调到A这个多播组中学习java视频,学习累了,你就可以换到C这个多播组中看看娱乐节目,这就是多播的意思,相对广播来说,自己需要什么就调什么,而不是跟广播一样,被动接受,他播到哪,就只能看到哪,多播能自由控制速度。
单播:50个人想看视频,就得发送50个数据包。多播的话就发一个,然后通过路由器转发50分给不同的人,
六、总结
注意:每个路由器度有一个路由表,并且主机也有记录ip地址和对应mac地址的功能。并不是每次通信度需要发广播询问。
问题一: 分析从主机A找到主机B的过程?
1、A先在自己的网络中发送广播,通过ARP协议。问所有的主机,谁知道10.0.0.3这个ip地址的主机是谁,同时把自己的主机ip地址和mac地址一起发送,主机B发现自己是10.0.03这个ip地址,就把自己的mac地址发回去
2、主机A发现有人回应,就知道在自己本网络中,然后就找到了目标主机,开始通讯
问题二:分析从主机A找到主机E的过程
1、主机A先发广播看自己本网络没有该主机,没有,然后就给ip地址为10.0.0.1这个路由器F1发信号获得路由器的mac地址,然后给他发信号叫该路由器F1帮我们查找ip地址为12.0.0.3的主机。这个路由器的ip地址就网关,所以每台计算机上度要有三个东西,ip地址,子网掩码,网关。
2、路由器因为知道所有的网络在哪里,通过子网掩码和ip地址,就能够算出该ip地址在哪一个网段中,路由器就一跳一跳的经过路由器,知道找到对应网段的路由器F2
3、找到F2后,F2就以同样的方式通过ip地址找到对应的mac地址,就这样找到了。
省略了路由器如何找的这一步,这个可以自己看书,其中有很多中方式,很多种算法,我们就知道我们给ip地址和子网掩码给路由器,路由器就知道下一跳给谁,知道找到对应网段
问题三:分析从主机A到主机E数据的形式。
传输层(还没讲):讲各个数据段划分序号
网络层:加上ip地址
数据链路层:加上mac地址和CRC检测的FCS
物理层:转化为比特流传输
集线器:只认识物理层,用来转发比特流
交换机:能认识数据链路层,所以交换机有mac地址表,能够记录各种mac地址,下一次就能选择性的转发数据了
路由器,能认识网络层,有路由表,所以能够通过ip地址找到对应网段。