TCP/IP协议(4):网络层

时间:2022-03-23 21:27:08

网络层上有IP、ICMP、IGMP等协议。

1、IP地址

在OSI模型中,三层网络层负责IP地址,IP数据报帧头中的源地址和目的地址就是指IP地址。IPV4类型IP地址为32位4个字节,IPV6类型IP地址为128位16个字节,公网IP是全球唯一的。32位的IPV4 IP地址通常用4个十进制的整数来表示,每个整数对应一个字节,如"106.10.21.206",这种表示方法称为“点分十进制表示法”。

IPV4类IP地址分为五类,如下图为他们各自的地址格式和地址范围:

TCP/IP协议(4):网络层

A类IP地址第一个字节为网络地址,剩余三个字节为主机地址,默认子网掩码为255.0.0.0,可用的A类网络有126个(全0和全1的网络地址用作特殊用途,故为128-2),每个网络能容纳1亿多个主机。A类地址适用于具有大量主机(直接个人用户)而局域网络个数较少的大型网络。需要注意的是A类IP地址中以127开头的地址表示本地环回地址。
   B类IP地址前两个字节为网络地址,后两个字节为主机地址,默认子网掩码为255.255.0.0,可用的B类网络有16382个,每个网络能容纳6万多个主机 。
   C类IP地址前三个字节为网络地址,后一个字节为主机地址,默认子网掩码为255.255.255.0,C类网络可达209万余个,每个网络能容纳254个主机。
   D类IP地址被用在多点广播(Multicast)中。
   E类IP地址范为将来使用保留。

其中A类、B类、C类地址又预留了一个IP地址段作为私有地址来供局域网使用:
   A类地址中:10.0.0.0--10.255.255.255
   B类地址中:172.16.0.0--172.31.255.255
   C类地址中:192.168.0.0--192.168.255.255

局域网在选取使用私有地址时,一般会按照实际需要容纳的主机数来选择私有地址段。常见的局域网由于其中的主机数量不是很多,所以一般就选择C类的192.168.0.0作为私有地址段使用。一般的家用路由器的LAN地址默认也是使用C类的私有地址,如192.168.1.1、192.168.0.1。

2、子网掩码

子网掩码用来设置IP地址多少位用于子网号,多少位用于主机号,它是一个32位的值,为1的位标志网络号/子网号,为0的位标志主机号,如C类地址默认子网掩码为11111111 11111111 11111111 00000000,即255.255.255.0。
  假设有一个C类地址,我们需要16个子网,则子网号应为4位,因为2^4 = 16,所以子网掩码应为11111111 11111111 11111111 11110000,即255.255.255.240。

3、IP协议

IP称为网间网协议,IP协议是无连接、不可靠的,任何对数据可靠性的要求由上层协议来提供(如TCP),这样的设计成就了IP协议的效率。TCP、UDP、ICMP、IGMP等数据都以IP数据报格式传输。下图为IP报文头+数据格式:

TCP/IP协议(4):网络层

IP首部一般为20字节,除非含有选项字段,根据IP头中的“8位协议”字段,数据选项可以分为TCP报文、UDP报文、ICMP报文等。

IP协议是Internet Protocol互联网协议,它能够使互联网上两台计算机进行通信,包装了计算机之间可以发送和接收数据,但IP协议不能解决数据包在传输过程中可能出现的协议。TCP协议是Transmission Control Protocol传输控制协议,它需要两台计算机通信之前先进行“连接”。TCP会收集IP通信的数据包,并将其按适当的次序放好传送,接收方按正确顺序接收。TCP还使用重传机制,发送方发送一个消息后需要对方的一个确认信息,如果在一定时间内没有收到的话就再次重发刚才的消息。这样TCP协议就保证了数据包在通信传输中的可靠性。

4、ICMP

ICMP互联网控制信息协议的主要功能是传输差错或信息IMCP报文,比如网络通不通、主机是否可达、路由是否可用等信息。IP包如果没有被传送到目的地,或者发生错误,IP协议不会做其它的处理,而通过ICMP,下游的路由器和主机可以将错误信息ICMP报文汇报给上游,所以ICMP是IP协议的一个补充,它还可以提供一些咨询类型的信息,比如某台计算机询问路径上的每个路由器都是谁,然后各个路由器同样用ICMP包回答。

ICMP报文是封装在IP数据报中的数据段中的,它头部的前4个字节是固定的,剩下的其它字节根据不同的类型互不相同,如下图为ICMP报文格式以及不同的类型和代码表示的不同ICMP报文。

TCP/IP协议(4):网络层       TCP/IP协议(4):网络层

PING命令使用的就是ICMP请求回显/回显应答报文:向目标主机发送请求回音的ICMP包(类型为8,代码为0),而目标主机在接收到该ICMP包之后,会发送回音应答的ICMP包(类型为0,代码为0)。

ICMP协议是IP协议的排错帮手,它可以帮助人们及时发现IP通信中出现的故障。但ICMP却经常被黑客借用进行网络攻击,比如利用伪造的IP包引发大量的ICMP回复,并将这些ICMP包导向受害主机,从而形成DoS攻击。

5、IGMP

IGMP互联网组管理协议,为了使路由器知道多播组成员的信息,需要利用IGMP,它负责IP 组播成员管理,用来在IP 主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。跨越多个网络的组播转发必须依赖于路由器,路由器为建立组播转发路由必需了解每个组员在Internet中的分布,这要求主机必须能将其所在的组播组通知给本地路由器,这也是建立组播转发路由的基础,在此基础上,本地路由器再与其它组播路由器通信,传播组播组的成员信息,并建立组播路由。

和ICMP一样,IGMP也使用IP数据报传递其报文,IGMP报文封装在IP报文中。IGMP的工作过程如下:
  ①、当主机加入新的多播组时,向多播组的多播地址发送IGMP 报文,声明自己要成为该组的成员.本地的多播路由器收到 IGMP 报文后,将组成员关系转发给因特网上的其他多播路由器
  ②、本地多播路由器要周期性地探询本地局域网上的主机(通过发送IGMP报文来实现),以便知道这些主机是否还继续是组的成员

6、TTL

TTL(Time To Live)虽然从字面上可翻译成“可以存活的时间”,但实际上它是IP数据包在计算机网络中可以转发的最大跳数。TTL是IP协议中的一个值,它位于IP报文头的第9个字节。在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个 TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送 ICMP time exceeded消息。

TTL字段由IP数据包的发送者设置,默认情况下,Linux系统的TTL值为64或255,UNIX主机的TTL值为255,Windows XP系统的TTL值为128, Win7系统的TTL值为64, Win Server2008系统的TTL为128。

根据以上我们可以知道,ping命令中显示的TTL,对于相同系统的目标主机来说,TTL值越大表示途经的路由器越少。