TCP/IP_IP协议
网络层主要是由IP和ICMP两个协议组成,在这篇文章主要说明IP协议。网络层的主要作用是“实现终端节点之间的通信”。也可以叫做“点对点通信”。数据链路层的主要作用是互联同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。
网络层与数据链路层的关系:
数据链路层的作用就相当于火车票或机票,而网络层的作用就相当于行程表,只有拥有这两个分层才能实现向最终目标地址的通信。
IP基础知识
IP大致分为三大作用模块,它们是IP寻址、路由以及IP分包与组包。MAC地址是用来标识同一个链路中不同计算机的一种识别码。作为网络层使用IP地址,IP地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。因此,在TCP/IP通信中所有主机或路由器必须设定自己的IP地址。
不论一台主机与哪种数据链路连接,其IP地址的形式都保持不变。
路由控制
路由控制是指将分组数据发送到最终目标地址的功能。即使网络非常复杂,也可以通过路由控制确定到达目标地址的通路。
- 发送数据过程
IP包是在网络中一个跳(指网络中的一个区间)间被转发。在每一个区间决定着包在下一跳被转发的路径。IP路由即是多跳路由,是指路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将最终目标地址为止的所有通路全部指定出来。因为每一个区间在转发IP数据包时会分别指定下一跳的操作,直至包到达最终目的地。
- 路由控制表
为了将数据包发送给目标主机,所有主机都维护着一张路由控制表。该表记录IP数据在下一步应该发给哪个路由器,IP包将根据这个路由表在各个数据链路上传输。
IP层对数据链路的抽象化
IP是实现多个数据链路之间通信的协议。数据链路根据种类的不同各有特点。对于IP层上层来说不论下面使用的是什么数据链路都是一样的。不同的数据链路有个最大的区别,就是他们各自的最大传输单位(MTU)不同,以太网中MTU是1500字节,FDDI中是4352字节。有时,可能要传送比这些MTU更大的数据,为了解决这个问题,IP进行分片处理,将较大的IP包分成多个较小的IP包。分片到对端目标地址,再被组合起来传给上一层。即从IP的上层看,他完全可以忽略数据包在途中各个数据链路上的MTU。IP也就抽象了数据链路层,例如:
IP属于面向无连接型
IP面向无连接。在发包之前,不需要建立与对端目标地址之间的连接。IP提供尽力服务,是指“为了把数据包发送到最终目标地址,尽最大努力”,然而,他并不做“最终收到与否的验证”。为了提高可靠性,上一层的TCP采用面向有连接型,可以这么说IP只负责将数据发送给目标主机,那么TCP负责保证对端主机确实接收到数据。
IP地址知识
在用TCP/IP通信时,用IP地址识别主机和路由器。
IP地址定义
IPV4地址是由32位正整数来表示:
IP地址由“网络标识(网络地址)”和“主机标识(主机地址)”组成。网络标识保证相互连接的每个段的地址不重复。相同段内相连的主机必须有相同的网络标识。主机标识则不允许在同一个网段内出现重复。可以通过设置网络标识和主机标识,在相互连接的整个网络中保证每一台主机的IP地址都不同,即IP地址有唯一性。IP包被转发到某个路由器时,利用目标IP地址的网络标识进行路由。
IP地址分类
IP地址分为四个级别,分别为A类、B类、C类、D类。根据IP地址中第一位到第四位的比特列对其网络标识和主机标识进行区分。
A类地址
A类IP地址首位以“0”开头。第1位到第8位是它的网络标识。即:0.0.0.0~127.0.0.0是A类地址,后24位相当于主机标识。B类地址
B类IP地址首位以“10”开头。第1位到第16位是它的网络标识。即:128.0.0.1~191.255.0.0是B类地址,后16位相当于主机标识。C类地址
C类IP地址首位以“110”开头。第1位到第24位是它的网络标识。即:192.168.0.0~239.255.255.0是C类地址,后8位相当于主机标识。一个网段的主机上线为254个。D类地址
C类IP地址首位以“1110”开头。第1位到第32位是它的网络标识。即:224.0.0.0~239.255.255.255是D类地址,D类地址没有主机标识,常被用于多播。
NOTE:表示主机地址时,不可以全部为0或全部为1。全部为0表示对应的网络地址不可获知的情况才使用。全部为1的主机地址通常作为广播地址。
广播地址
广播地址用于在同一个链路中相互连接的主机之间发送数据,把IP地址中的主机部分全部设置为1,就成了广播地址。
- 本地广播与直接广播
在本地网络内的广播叫做本地广播。例如192.168.0.0/24的情况下,广播地址为192.168.0.255。因为这个广播地址的IP包会被路由器屏蔽,所以不会到达其他网段上。
在不同网络之间的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机向192.168.1.255/24的目标地址发送IP包。收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得所有192.168.1.1~192.168.1.254的主机都能收到这个包。
IP多播
多播用于将包发送给特定组内的所有主机。由于其直接使用IP协议,因此也不存在可靠传输。
- IP多播与地址
多播使用D类地址。其中剩下的28位可以成为多播的组编号,从224.0.0.0到239.255.255.255都是多播地址的可用范围。其中从224.0.0.0到224.0.0.255的范围不需要路由控制,同一个链路内也能实现多播。而在这个范围之哇哦设置多播地址会给全网所有组内成员发送多播的包。此外对于多播,所有的主机(路由器以外的主机和终端主机)必须属于224.0.0.1的组,所有的路由器属于224.0.0.2的组。
子网掩码
一个IP地址的网络标识和主机标识不在受限于该地址的类别,而是使用子网掩码的识别码通过子网网络地址细分出比A类、B类、C类更小粒度的网络。实际就是将原来A类、B类、C类等分类中的主机地址部分用作子网地址,可以将原网络分为多个网络的一种机制。可以表示为:
子网掩码可以灵活指定网络标识的长度,例如:
CIDR与VLSM
CIDR即是,采用任意长度分割IP地址的网络标识和主机标识,意味无类型域间选路。例如,应用CIDR技术将203.183.224.1到203.183.225.254的地址合为同一个网络。
VLSM是一种可以随机修改组织内各个部门的子网掩码长度的机制,它可以通过域间路由协议转换为RIP2以及OSPF实现。根据VLSM可以将网络地址划分为主机数为500个时子网掩码长度为23,主机数为50个时子网掩码长度为26。有了CIDR和VLSM技术,相对缓解了全局IP地址不够用的问题。
全局地址与私有地址
由于IP地址不足的问题,出现了一种技术。它不要求为每一台主机或路由器分配一个固定的IP地址,而是在必要的时候只为相应数量的设备分配唯一的IP地址,尤其对于那些没有连接互联网的的肚里网络中的主机,只要保证在这个网络内地址唯一,可以不用考虑互联网即可配置相应的IP地址。让每个独立的网络各自随意的设置IP地址,可能会有问题,于是有私有网络IP地址,范围如下:
在这个范围之外的是全局IP。使用NAT技术之后,可以使得配有私有地址的主机与配有全局地址的互联网主机实现了通信。现在大多数在每个终端设置私有IP,而在路由器或在必要的服务器上设置全局IP地址,如果配有私有IP地址联网时,则通过NAT进行通信。全局IP地址基本上要在整个互联网范围内保持唯一,但私有地址不需要。只要在同一个域里面保证唯一即可。在不同的域里出现相同的私有IP地址不会影响使用。
路由控制
发送数据包时所使用的地址是IP地址,IP地址的网络地址部分用于进行路由控制,如下所示:
实现通信的主机和路由器之间都维护着一张路由控制表,路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在发送IP包时,首先确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据此记录发送给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,选择一个最为吻合的网络地址(相同位数最多)。
默认路由
默认路由是指路由表中任何一个地址都能与之匹配的记录,一般标记位0.0.0.0/0或default。主机路由
“IP地址/32”被称之为主机路由。他的意思是整个IP地址的所有位都将参与路由,意味着要基于主机上配置的IP地址本身,而不是基于该地址的网络地址部分进行路由。环回地址
环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。计算机使用127.0.0.1作为环回地址。主机名localhost与该地址具有相同的意义。使用这个IP或主机名时,数据包不会流向网络。
路由控制表的聚合
利用网络地址的比特分布可以有效地进行分层配置。对内即使有多个子网掩码,对外呈现出的也是同一个网络地址。这样可以更好的构建网络,通过路由信息聚合可以有效减少路由表的条目。
IP分割处理与再构成处理
由于不同数据链路的MTU不同,IP必须不受限于不同数据链路的MTU大小。任何一台主机都有必要对IP分片进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理,例如:
经过分片之后的IP数据报在被重组的时候,只能由目标主机进行,路由器只做分片处理不会进行重组。
路径MTU发现
分片机制也有许多不足的地方,它会增加路由器处理负荷加重。因此,只要允许是不希望路由器进行IP数据包的分片处理的。其次,在分片处理中,一旦某个分片丢失,会造成整个IP数据报作废。为了应对这些问题,通常采用路径MTU发现。路径MTU是指从发送端主机到接收端主机之间不需要分片时最大的MTU的大小。而路径MTU发现从发送主机按照路径MTU的大小将数据分片后进行发送。这样可以避免在中途的路由器上进行分片处理,也可以在TCP中发送更大的包。
1、UDP情况下,路径MTU发现的机制
2、TCP情况下,路径MTU发现的机制
工作原理:首先在发送端主机发送IP数据报时将其首部的分片禁止标志设置为1。根据这个标志位,途中的路由器即使遇到需要分片才能处理的大包也不会去分片,而是将包丢弃。随后,通过一个ICMP的不可达消息将数据链路上MTU的值发送给主机。下一次,从发送给同一个目标主机的IP数据报获得ICMP所通知的MTU值以后,将它设置为当前MTU。发送主机根据这个MTU对数据报进行分片处理。如此反复,直到数据报被发送到目标主机为止没有在收到任何ICMP,就认为最后一次ICMP所通知的MTU是一个合适的值。当MTU的值比较多时,最少可以缓存约10分钟。在这10分钟内使用刚刚求得的MTU,但过了这10分钟以后重新根据链路上的MTU做一次路径MTU发现。由于TCP由重发机制,TCP会负责分片,而IP层不会。UDP则都是在IP层。