二、网络层概述(2)--IP协议
1、TCP/IP协议栈
TCP/IP协议不是单指TCP/IP这两个,而是TCP/IP协议簇。
网际协议(IP) 是TCP/IP体系中两个最主要的协议之一,也是最重要的因特网标准协议之一。 又称Kahn-Cerf协议,这里讲的IP其实是IP的第四个版本,也就是IPv4。与IP协议配套使用的还有三个协议:
- 地址解析协议ARP(Address Resolution Protocol,ARP);
- 网际控制报文协议ICMP(Internet Control Message Protocol,ICMP);
- 网际组管理协议IGMP(Internet Group Management Protocol,IGMP);
IP协议经常使用ARP这个协议,ICMP和IGMP这两个协议则要使用IP协议,由于网际协议IP是用来使互联起来的许多计算机网络能够进行通信的,因此TCP/IP体系中的网络层常常称为网际层或IP层. 使用网际层就是要强调这是由很多网络构成的互连网络
注意:在TCP/IP参考模型中,物理层和数据链路层一起称为网络接口层。
2、IP数据报的格式
IP数据报的格式能够说明IP协议都具有什么功能。在TCP/IP的标准中,各种数据格式常常以32位(即4字节)为单位来描述。
一个IP分组(IP数据报)由首部和数据两部分组成:
- 数据部分:传输层的传输单元报文段,因为含有TCP、UDP段。
- 首部固定部分(20B):对于任何一个IP数据报,它的大小都相同为20字节(根据下图可得32bit*5行=160bit=20B),一定要有。
- 首部可变部分(0~40B):可有可无,大部分情况下没有。
注意:在网络层章节,IP数据报和分组不用做太详细区分。数据部分放在传输层去讲
首部固定部分各组成信息如下:
-
版本:占4位,版本类型为IPv4/IPv6
-
首部长度(最大60B):
- 占4位,长度为4-8bit:对于一个4位的二进制数,可以表示16个十进制数
0~15,所以首部长度最大值是15(1111)。 - 单位是4B,首部长度最大值:首部最大为15*4B=60B。
- 长度最小为5:因为首部固定部分长度就为20B,20B/4B=5,所以首部长度最小为5(0101)。
- 占4位,长度为4-8bit:对于一个4位的二进制数,可以表示16个十进制数
-
区分服务:占8位,指示期望获得哪种类型的服务,比如有的数据报想先发送。
-
总长度: 首部长度+数据部分,单位是1B。总长度字段为16位,因此数据报的最大长度为2^16—1= 65535字节。然而实际上传送这样长的数据报在现实中是极少遇到的。因为长度过大时会分组,以满足在数据链路层封装成帧的 MTU(最大数据传输单元) 的要求。
-
生存时间(TTL:time to live):占8位,IP数据报的寿命。每经过一个路由器生存时间就-1,直到变成0则丢弃该分组。(ICMP协议中有应用)
-
协议: 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应该将数据部分上交给哪个协议进行处理,需要重点记住的是TCP字段值为6(记:面向连接,很6),UDP字段值为17(记:无连接不可靠,容易遗弃)
-
首部检验和: 只检验首部。为什么叫首部检验和呢?因为检验首部使用的方法是使用二进制的求和,在数据传输过程中,数据报每经过一个路由器,路由器都要重新计算一下首部检验和。因为有些字段(例如生存时间,标志等)都可能发生变化,需要通过首部检验和检验一下发生变化后的数据报有没有出错,如果出错则丢弃。
-
源IP地址和目的IP地址: 占32位。
-
可变部分信息如下:【基本不用考虑】
- 可选字段:0~40B(可有可无,大小来源:首部最大60B-固定部分20B)。用来支持排错、测量以及安全等措施。
- 填充:全0,因为加上可变部分IP数据报首部长度就变成可变了,所以需要把首部补成4B的整数倍。因为首部的长度单位是4B。
3、IP数据报分片
3.1、最大传送单元MTU(Maximum Transfer Unit)
链路层数据帧可封装数据的上限。例如以太网的MTU是1500字节。
如果所传送的IP数据报/分组的长度(即首部加上数据部分)超过某链路的MTU值,就要进行分片!所以分片的目的是为了在链路层传输的数据帧的长度不超过MTU值。但是必须经过IP数据报自己同意进行分组,否则就没有办法向下传递,于是就会返回一个ICMP,后文再说;
3.2、结合IP数据报的标识、标志和片偏移理解分片
标识: 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。这个标识字段主要用于当数据报长度超过网络的MTU而需要分片时,这个标识字段的值就会被复制到所有的数据报片的标识字段中。同一数据报的分片使用同一标识。一个数据报的长度超过了MTU,就要进行分片,每个分片的标识相同,到了接收端就可以把同一标识的分片组合起来形成原来的数据报。
标志: 3位,但只有2位有意义:x _ _ 。最高位保留不用
- 中间位DF(Don't Fragment:不许分片):DF=1为真,禁止分片;DF=0为假,允许分片。
- 最低位MF(More Fragment:更多分片):MF=1,后面“还有分片”;MF=0,代表最后一片/没有分片(数据报长度不大) 可以看出,只有DF=0时,MF才有意义。
片偏移: 指出较长分组分片后,某片在原分组中的相对位置。以8B为单位(首部单位是4B)。可以推断:除了最后一个分片,每个分片的数据部分长度一定是8B的整数倍。
3.3、计算片偏移(某片在原分组中的相对位置)
片偏移分析过程: 分片长度不超过1420B,首部为20B,所以每个分片数据部分不超过1400B。原始IP数据报数据部分为3800B,可以分为3个分片:第一和二分片数据部分1400B,第三个分片数据部分1000B。另外分片的首部长度与原始数据报的首部长度相同都为20B。
片偏移 = 数据部分起始字节/单位8B
- 计算第一个分片片偏移:数据部分起始字节为0~1399B,0B/8B = 0。
- 计算第二个分片片偏移:数据部分起始字节为1400~2799B,1400B/8B = 175。
- 计算第三个分片片偏移:数据部分起始字节为2800~3799B,2400B/8B = 350。
4、IP(IPv4)地址表示及其分类
4.1、IP地址及其表示方法
主机A要与其主机B通信,就要知道主机B在哪个网络?是哪个主机?整个互联网就是一个单一的,抽象的网络。IP地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32位的标识符。【端口号就是具体访问主机上面的软件、服务器啥的,比如我的mysql服务器装在我本机上(windows)的,并且它的端口为3306,因此利用sqlyog访问mysql服务器就是localhost:3306】
IP地址的编址方法经历过三个历史阶段:
- 分类的IP地址(最基本的编址方法)
- 子网的划分(IP地址已经不够用)
- 构成超网(无分类编址方法)
4.2、分类的IP地址
所谓“分类的IP地址”就是将IP地址划分为若干个固定类,每一类地址都是由两个固定长度的字段组成,其中第一个字段是网络号,标志主机所连接到的网络。第二个字段是主机号,标志该主机(或路由器)。一个IP地址在整个互联网范围内是唯一的。
处于不同网段内的主机必须有不同的网络标识。而处于同一网段内的主机的网络号表示相同,但主机号标识必须不同。所以,在某网段内新增一台主机后,该主机的网络号与该网段的网络号相同,但是主机号不能与该网段里的其他主机的主机号相同,比如两个B类网络,192.168.0.1和192.168.1.1,属于同一个的网络的不同子网,路由器可以实现互联。
通过合理设置网络号和主机号,就可以保证在相互连接的网络中,每台主机的IP地址都是唯一的。有一种DHCP技术,可以自动为网段内新增结点主机分配IP地址。一般的路由器都带有DHCP功能,因此路由器可以看做一个DHCP服务器。
这种两级的IP地址可以记为:IP地址 ::={<网络号>,<主机号>},其中::=表示"定义为",下图中A~E类的IP地址给出了各种IP地址的网络号字段和主机号字段。其中A、B、C类地址都是单播地址(一对一通信),是最常用的。D类地址用于多播(一对多通信)。E类地址保留为以后用。 【前面的数字代表类别位】
4.2.1、点分十进制记法
对主机或路由器来说,IP地址都是32位的二进制代码。为了提高可读性,常常把32位的IP地址中的每8位用其等效的十进制数字表示,并且在这些数字之间加上一个点。这就叫点分十进制记法(dotted decimal notation)。
例子:一个B类IP地址,其二进制的表示为10000000 00001011 00000011 00011111,用点分十进制记法的表示为128.11.3.31
5、常用的三种类别的IP地址
注:可以指派的网络是由网络号中没被固定的字节计算排列组合出来的。
5.1、A类IP地址
A类地址的网络号字段占1个字节(8位),前面的1位(0)已经固定,只剩下7位可以进行分配。即可指派的网络号是126个(即2^7-2)。减2的原因是:
-
网络号字段为全0的IP地址是个保留地址,意思是“本网络”。
-
网络号为127(即01111111)保留作为本地软件环回测试(loopback test),用于测试本主机的进程之间的通信。若主机发送一个目的地址为环回地址(例如 127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。目的地址为环回地址的IP数据报永远不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。
A类地址的主机号占3个字节,因此每一个A类网络中的最大主机数是2^24-2(主机号多少个01组合就有多少个主机),即16777214。减2的原因是:
- 全0的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址,即该主机所处局域网的网段(例如,一主机的IP地址为5.6.7.8,则该主机所在的网络地址就是5.0.0.0)。
- 全1的主机号字段表示该IP地址是**“所有的”**,即该网络上的所有主机。
注:IP地址空间共有2^32(即4294967296)个地址。整个A类地址空间共有2^31个地址,占有整个IP地址空间的50%。
5.2、B类IP地址
B类地址的网络号字段占2个字节,但前面的2位(10)已经固定,只剩下14位可以进行分配。因为网络号后面的14位字段无论怎样组合都始终不可能出现网络号全0或全1的情况,所以不存在网络总数减2的情况,但是实际上B类网络地址128.0.0.0是不指派的(查最新的RFC文档,128.0这个B类第一个网络号已经可以分配了),而可以指派的B类最小网络地址是128.1.0.0。因此B类地址可指派的网络数是2^14-1,即16383。B类地址的每一个网络上的最大主机数是2^16-2,即65534,这里需要减2是因为要扣除全0和全1的主机号。
注:整个B类地址空间共约2^30个地址,占有整个IP地址空间的25%。
5.3、C类IP地址
C类地址的网络号字段占3个字节,但前面的3位(1 1 0)已经固定,只剩下21位可以进行分配。C类网络地址192.0.0.0是不指派的,而可以指派的C类最小网络地址是192.0.1.0。因此B类地址可指派的网络数是2^21-1,即2097151。C类地址的每一个网络上的最大主机数是2^8-2,即254,这里需要减2是因为要扣除全0和全1的主机号。
注:整个C类地址空间共约2^29个地址,占有整个IP地址空间的12.5%。
5.4、A、B、C类IP地址的指派范围
一般不使用的特殊IP地址,特殊地址只能在特定情况下使用,如下所示
5.5、IP地址特点
-
每一个IP地址都是由网络号和主机号两部分组成。从这个意义上说,IP 地址是一种分等级的地址结构。分两个等级的好处是:
- IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
- 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
-
实际上IP地址是标准一台主机和一条链路的接口。
- 当一个主机同时连接到两个局域网网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多接口主机(multihomed host)。
- 由于一个路由器至少应当连接到两个局域网网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址。
-
所有分配到网络号 net-id 的网络,范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的(互联网平等对待每一个IP地址)。
-
用转发器或网桥连接起来的若干个局域网仍为一个网络,因为这些局域网都具有相同的网络号。
-
路由器总是具有两个或两个以上的 IP 地址。路由器的每一个接口都有一个不同网络号的 IP 地址。
-
两个路由器直接相连的接口处,可分配也可不分配IP地址。如分配IP 地址,则这一段连线就构成了一种只包含一段线路的特殊“网络” 。如N1,N2,N3。现在常不指明 IP 地址。这样的特殊网络叫做无编号网络或者无名网络
互联网中的IP地址:
- 左边红色区域:为C类地址的IP号,其中所有的主机都处于网段为222.1.3.0的区域,各个主机IP地址分别是222.1.3.1、222.1.3.2、222.1.3.3【处于同一网段内的主机的网络号表示相同,但主机号标识必须不同】
- 图中的每一个路由器有三个IP地址,因为路由器的每个接口都有一个IP地址。
- N1,N2,N3也可以称为网络,叫做无编号网络(有IP地址,但是由一段线构成)。
私有IP地址: 内部使用,专用网络,比如校园网
路由器对目的地址是私有IP地址的数据报一律不进行转发。要与外部互联网建立通信,需要通过网络地址转换NAT。
6、网络地址转换NAT
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网Lan内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密),应当采取什么措施呢?最简单的办法就是设法再申请一些全球IP地址。但这在很多情况下是不容易做到的,因为全球IPv4地址已所剩不多了。目前使用得最多的方法 是采用网络地址转换NAT方法。
NAT转换原理
使用NAT时需要在专用网连接到因特网的路由器上安装NAT软件,NAT路由器至少有一个有效的外部全球地址。使用本地地址的主机和外界通信时,NAT 路由器使用NAT转换表将本地地址转换成全球地址,或将全球地址转换成本地地址。这样才能和互联网进行通信。
如图给出了NAT路由器的工作原理,在图中,专用网192.168.0.0内所有主机的IP地址都是本地IP地址192.168.x.x。NAT路由器至少有一个公网IP,才能和因特网相连。图中NAT路由器的公网IP 172.38.1.5(路由器也可以具有多个公网IP)。
转换过程分析
(1)主机A发起通信-主机B
NAT路由器收到从专用网络内部的主机A发往因特网主机B的数据报:源IP地址:192.168.0.3,目的地址:213.18.2.4。NAT路由器把IP数据报的源IP地址192.168.0.3,转换为新的源IP地址(即NAT路由器的全球IP地址172.38.1.5)。【可以认为是一种代理】
(2)主机B发送应答-主机A
当主机B接受到数据报时以为主机A的IP地址就是172.38.1.5。因此主机B给主机A发送应答时,IP数据报首部的目的IP地址为这个NAT路由器的公网IP172.38.1.5。
实际上,即使主机B知道了主机A的私有IP,也并不能向这个私有IP发送数据,因为互联网上的路由器都不转发目的地址是专用网本地IP地址的IP数据报,因特网上的路由器发现目的IP是一个私有IP时,就会将数据丢掉。当NAT路由器收到互联网上的主机B发来的IP数据报时,还要进行一次IP地址的转换。通过NAT地址转换表,就可把IP数据报上的旧的目的P地址172.38.1.5,转换为新的目的P地址192.168.0.3(主机A真正的本地IP地址)。
NAT地址转换表举例
由此可见,当NAT路由器具有n个全球IP地址时,专用网内最多可以同时有n台主机接入到互联网。这样就可以使专用网内较多数量的主机,轮流使用NAT路由器有限数量的全球IP地址。
注意:通过NAT路由器的通信必须由专用网内的主机发起。假如互联网上的主机要发起通信,当IP数据报到达NAT路由时,NAT路由器就不知道应当把目的IP地址转换成专用网内的哪一个本地IP地址。这就表明,这种专用网内部的主机不能充当服务器用,因为互联网上的客户无法请求专用网内的服务器提供服务。
NAPT
为了更加有效地利用NAT路由器上的全球IP地址,现在常用的NAT转换表把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用一个NAT路由器上的全球IP地址,因而可以同时和互联网上的不同主机进行通信。使用端口号的NAT也叫做网络地址与端口号转换NAPT,而不使用端口号的NAT就叫做传统的NAT。但在许多文献中并没有这样区分,而是不加区分地都使用NAT这个更加简洁的缩写词。下表说明了NAPT的地址转换机制。
上面的NAT过程有个问题:主机B给主机A发送的应答数据通过NAT路由器的公有IP发送给了NAT路由器,可是NAT路由器怎么知道这个数据应该交给局域网的哪个主机呢?【因为专用网内不同的源IP地址都映射为同一个对外的全球IP地址】于是就需要端口号的存在
从上表可以看出,在专用网内主机192.168.0.3向互联网发送IP数据报【数据报内容多了端口号】,其TCP端口号选择为30000。NAPT把源IP地址和TCP端口号都进行转换(如果使用UDP,则对UDP的端口号进行转换。原理是一样的)。另一台主机192.68.0.4也选择了同样的TCP端口号30000这纯属巧合(端口号仅在本主机中才有意义)。现在NAPT把专用网内不同的源IP地址都转换为同样的全球IP地址。但对源主机所采用的TCP端口号(不管相同或不同),则转换为不同的新的端口号。因此,当NAPT路由器收到从互联网发来的应答时,就可以从IP数据报的数据部分找出运输层的端口号,然后根据不同的目的端口号,从NAPT转换表中找到正确的目的主机。
NAT转换表中存放着{本地IP地址:端口}到{全球IP地址:端口}的映射。通过{ip地址:端口}这样的映射方式,可让多个私有IP地址映射到同一个全球IP地址,但是端口映射后是不一样的
说明:WAN / LAN 端
- WAN端:广域网端又称为外网端
- LAN端:局域网端又称为内网端
7、IP地址与MAC地址
学习IP地址时,很重要的一点是要弄懂主机的IP地址与硬件地址的区别。
MAC地址其实就是主机的物理地址,因为网卡的不同所以每个主机的物理地址是不同的。
下图说明了这两种地址的区别。从层次的角度看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(因为IP地址是用软件实现的~)。在发送数据时,数据从高层下到底层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成MAC帧。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧的首部中。
由上图可知,IP地址放在IP数据报的首部,而硬件地址放在MAC帧的首部。在网络层和网络层以上使用的是IP地址,而数据链路层及以下使用的是硬件地址。在数据链路层看不见数据报的IP地址(因为IP数据报从上至下传到链路层已经封装成了MAC帧的数据部分了)。只有在剥去MAC帧的首部和尾部后,把MAC帧的数据部分上交给网络层后,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。
总结:
- 在IP层抽象的互联网上只能看到IP数据报;
- 虽然在IP数据报首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择;
- 在局域网的链路层,只能看见MAC帧;
- IP层抽象的互联网屏蔽了下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或路由器之间的通信。
8、地址解析协议ARP
根据上面的阐述,主机或路由器怎样知道应当在MAC帧的首部填入什么样的硬件地址?在实际的应用中,我们经常也会遇到这样一个问题:已经知道了一个机器的IP地址,需要找出其相应的物理地址。地址解析协议(ARP)就是用来解决这样的问题的。下图说明了这种协议的作用
ARP高速缓存(IP地址与MAC地址的映射)
1、局域网内部发送数据的过程
1号主机给3号主机发送数据过程:
- 传输层:把报文切割为报文段
- 网络层:对报文段进行封装成分组,添加1号主机IP地址和3号主机IP地址。
- 数据链路层:对分组进行封装成数据帧,添加源MAC地址和目的MAC地址,现在不知道目的主机是哪一个,如何添加目的MAC地址呢?——ARP协议
IP地址只是在网络层标识每一个主机或路由器接口,数据链路层是靠MAC地址标识。
ARP协议过程
- 数据链路层:将得到的MAC3添入,然后加一个尾部FCS,构成数据帧,再放入物理层上传输。
- 物理层:形成数字信号或模拟信号,放到链路上传播
- ARP高速缓存:局域网内部主机IP地址与MAC地址的映射
ARP协议过程:
- 广播一个ARP的分组请求,广播分组包括:
- 1号主机IP地址;
- 目的MAC地址所对应的主机的IP地址;
- 1号主机MAC地址;
- 目的MAC地址(全1,表示广播地址,别和IP地址主机号的全1混淆了)。
- 交换机会在所有端口转发广播地址,故2号主机、3号主机和路由器端口都会收到1号主机的广播分组。
- 单播ARP响应分组:
- 3号主机根据IP地址知道这是发送给自己的,于是单播一个ARP响应分组给1号主机(单播:直接到1号主机)。
- 该响应分组包括3号主机的IP地址和3号主机的MAC地址的映射。
不同局域网之间发送数据过程(目的地址为默认网关的MAC地址)
不在一个局域网内部,1号主机和5号主机通信过程:
- ARP高速缓存存储的是局域网内部IP地址与MAC地址的映射,1号主机IP地址与5号主机IP地址相与,发现与5号主机不在同一网段内。
- 若1号主机在专用网中,那么先将1号主机的私有IP地址根据NAT路由器转换表,将LAN端的私有IP地址转换为WAN端的路由器IP地址。此时数据报就可以在因特网中被识别和转发。
- 目的地址为默认网关的MAC地址:1号主机查询默认网关(与外界沟通的路由器)的MAC地址MAC6,并添入到目的地址。
得到MAC6的过程:
- 1号主机广播ARP请求分组,因为要的到路由器的MAC地址,所以目的IP地址为路由器的IP地址。
- 路由器单播ARP响应分组,得到MAC地址MAC6。
- 到IP6路由器后,IP地址不变,再次通过ARP 协议得到第二个路由器的MAC地址MAC8,源地址就变成MAC7,目的地址就变成MAC8。
- 到第二个路由器后,还是通过ARP协议得到MAC5。源地址就变成MAC9,目的地址就变成MAC5。
ARP协议总结
为什么使用ARP协议:由于在实际网络的链路上传送数据帧时,最终必须使用MAC地址。
ARP协议功能:完成主机或路由器IP地址到MAC地址的映射。解决下一跳走哪的问题。
ARP协议使用过程:
- 检查ARP高速缓存,有对应表项则写入MAC帧,没有则用目的MAC地址为FF-FF-FF-FF-FF-FF的帧封装并广播ARP请求分组,同一局域网中所有主机都能收到该请求。
- 目的主机收到请求后就会向源主机单播一个ARP响应分组,源主机收到后将此映射写入ARP缓存( ARP缓存也有生存周期TTL:10-20min更新一次)。
ARP协议4种典型情况:
- 主机A发给本网络上的主机B:用ARP找到主机B的硬件地址;
- 主机A发给另一网络上的主机B:用ARP找到本网络上一个路由器(网关)的硬件地址;
- 路由器发给本网络的主机A:用ARP找到主机A的硬件地址;.
- 路由器发给另一网络的主机B:用ARP找到本网络上的一个路由器的硬件地址。
ARP协议为IP协议提供服务:ARP协议是处于链路层和网络层中间的协议,因为它结合了IP地址和MAC地址。主要划分到网络层,为IP协议提供服务。
主机发送IP数据报给主机B,经过了5个路由器,请问此过程总共使用了几次ARP协议?——6次,如果路由器之间是点对点协议,则2次。
ARP地址解析协议详解
网络层的ARP协议完成IP地址与物理地址的映射。
- 首先,每台主机都会在自己的ARP缓冲区中建立一个ARP缓存表,以表示IP地址和MAC地址的对应关系。
- 当源主机需要将一个数据包发送到目的主机时,会首先检查自己ARP缓存表中是否存在该IP地址对应的MAC地址:
- 如果有,就直接将数据包发送到这个MAC地址;
- 如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。
- 如果不相同就忽略此数据包;
- 如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中
- 如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。
- 如果源主机一直没有收到ARP响应数据包,表示ARP查询失败
9、DHCP协议(动态获取IP地址等、应用层协议)
9.1、主机如何获得IP地址
主机获得IP地址的方法主要有两种:
-
静态配置
网吧、机房里管理员手动配置给各台机器。配置的内容有IP地址、子网掩码、默认网关
-
动态分配
动态移动的设备 比如手机、笔记本总是能够自动的被分配IP地址。
9.2、DHCP协议
动态主机配置协议:Dynamic Host Configuration Protocol
DHCP协议概念:动态主机配置协议DHCP是应用层协议,使用客户/服务器方式,客户端和服务端通过广播方式进行交互,基于UDP。
DHCP协议功能:DHCP提供即插即用联网的机制,主机可以从服务器动态获取IP地址、子网掩码、默认网关、DNS服务器名称与IP地址,允许地址重用,支持移动用户加入网络,支持在用地址续租。
DHCP协议流程:
- 主机广播DHCP发现报文:“有没有DHCP服务器呀?” 试图找到网络中的服务器,服务器获得一个IP地址。
- DHCP服务器广播DHCP提供报文:“有! ”“有!”“有!” 服务器拟分配给主机一个IP地址及相关配置,先到先得。
- 主机广播DHCP请求报文:“我用你给我的IP地址啦?” 主机向服务器请求提供IP地址。为什么这里还用广播呢?通知其他DHCP服务器,不要再等我了,把你的IP地址给其他人吧。
- DHCP服务器广播DHCP确认报文:“用吧! ” 正式将IP地址分配给主机。
10、IP层分组转发流程
注:在互联网上转发分组时,是从一个路由器转发到下一个路由器。总之,在路由表中,对每一条路由最主要的是以下两个信息:(目的网络地址,下一跳地址)。【涉及默认路由和特定路由】
于是根据目的网络地址来确定下一跳路由器,这样做的结果如下:
- IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
- 只有到达最后一个路由器时,才试图向目的主机进行直接交付。
路由表中下一跳路由器: 各个网络之间通过路由器连接,IP数据报的首部中没有地方可以用来指明“下一跳 路由器的IP地址”。当路由器收到待转发的数据报,不是将下一跳路由器的IP地址填入IP数据报,而是送交下层的网络接口软件。网络接口软件使用ARP协议负责将下一跳路由器的IP地址转换成硬件地址,并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。
注:当发送一连串的数据报时,上述的这种查找路由表、计算硬件地址、写入MAC帧的首部等过程,将不断地重复进行,造成了一定的开销。尽管如此,也不能在路由表中直接使用硬件地址,因为使用抽象的IP地址,就是为了屏蔽各种底层网络的复杂性而便于分析和研究问题,这样就不可避免地多了一些开销。
路由器分组转发算法
- (1) 从数据报的首部提取目的主机的IP地址D,得出目的网络地 址为N。
- (2) 若网络N与此路由器直接相连,则把数据报直接交付目的主机D;否则是间接交付,执行(3)。
- (3) 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 (4)。
- (4) 若路由表中有到达网络N的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
- (5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
- (6) 报告转发分组出错。
路由表没有给分组指明到某个网络的完整路径。路由表指出,到某个网络应当先到某个路由器(即下一跳路由器)。 在到达下一跳路由器后,再继续查找其路由表,知 道再下一步应当到哪一个路由器。这样一步一步地查找下去,直到最后到达目的网络。
11、IP协议的特点
- IP协议是一种无连接、不可靠的分组传送服务的协议。
- IP协议是网络层通信协议。IP协议是针对原主机-路由器、路由器-路由器、路由器-目的主机之间的数据传输的点-点线路的网络层通信协议。
- IP协议屏蔽了网络在数据链路层、物理层协议与实现技术上的差异,IP协议使得异构网络的互联变得容易了。
- IP分组/IP数据报是数据传送的基本单元,IPv4,即现在普遍使用的IP协议(版本为4)。IP协议定义数据传送的基本单元——IP分组/IP数据报及其确切的数据格式。IP协议也包括一套规则,指明分组如何处理、错误怎样控制。特别是,IP协议还包括非可靠投递的思想(对于出错的分组丢弃并发送一个ICMP差错报文),以及与此关联的分组路由选择的思想。
- IP协议:不可靠(对于出错的分组丢弃并发送一个ICMP差错报文),无连接(分组交换的数据报方式就是无连接的),采用分组交换技术(数据报方式)。