IP协议

如果我们要在复杂的网络环境中从一台主机发送数据到另一台主机,这个过程中间需要经过多个路由器,在一个复杂的网络中,需要确定一个合适的路径,将数据从一台主机历经多个路由器最终发送到另一台主机,这就是网络层要做的事情——地址管理和路由选择。这篇文章主要介绍网络层中的IP协议。

首先我们要了解,主机和路由器的概念,主机配有IP地址,但是不能进行路由控制,而路由器不仅具有IP地址,同时也能进行路由控制。主机和路由器可以统称为节点。

IP协议头格式:

1。  4位协议版本:指定IP协议的版本,目前有IPv4和IPv6(是IPv4就存放4),IPv4是32位的IP地址,IPv6是128位的IP地址,目前通用IPv4版本。
2。  4位部首长度:表示协议头的长度,最大长度为4*15=60字节。
3。  8位服务类型(Type Of Service):包括三位优先权字段(已经弃用)、4位TOS字段、和1位保留字段(必须置为0)。其中,4位TOS字段分别表示最⼩延时, 最⼤吞吐量, 最⾼可靠性, 最⼩成本. 这四者相互冲突, 只能选择⼀个(置为1)。像对于ssh/telnet这样的应⽤程序, 最⼩延时⽐较重要; 对于ftp这样的程序, 最⼤吞吐量⽐较重要。
4。  16位总长度:代表IP数据包整体大小,最大为65535字节。
5。  16位标识:唯一标识数据包,如果一个数据包被分片了,那么所有分片的该标识都一样。
6。  3位标志位:第一位保留(不使用),第二位如果为1表示不能被分片,如果数据报长度大于MTU则直接丢弃(因为不能被分片),第三位表示“更多分片”,即如果一个数据包被分片了,那么最后一个分片的该位为1,其余分片的该位为0。
7。  13位片偏移:是分片相对于原始IP报文的偏移,假如被分片了,就可以通过这个偏移来连接起来。偏移字节数是这个值*8,所以除了最后一个分片所有分片的个值都必须是8的整数倍。
8。  8位生存时间(TTL):数据报到达目的地的最大报文跳数。⼀般是64. 每次经过⼀个路由, TTL -= 1,⼀直减到0还没到达, 那么就丢弃了. 这个字段主要是⽤来防⽌出现路由循环。
9。  8位协议类型:在数据报分用的时候,需要将数据报交付为上层协议,这个协议类型用来标识交付给哪个协议。列如TCP等。
10。  16位首部校验和:用来鉴别头部是否损坏。
11。  32位源IP地址:发送端IP地址。
12。  32位目的IP地址:接收端IP地址。
13。  选项:最大为40字节。

IP地址分为网络号和主机号两部分。
网络号:保证相互连接的两个网段具有不同的标识。
主机号:在同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。
不同的网段(子网)其实就是将网络号相同的主机放到一起。如果在子网中新增一台主机, 则这台主机的网络号和这个⼦网的网络号⼀致, 但是主机号必须不能和⼦网中的其他主机重复。通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同。有一种技术叫做DHCP,专门为子网内新增的主机分配IP地址,一般路由器都有DHCP技术。
每台主机都需要配置IP地址,一种IP地址网络号和主机号划分的方法如下图

A类 0.0.0.0到127.255.255.255
B类 128.0.0.0到191.255.255.255
C类 192.0.0.0到223.255.255.255
D类 224.0.0.0到239.255.255.255
E类 240.0.0.0到247.255.255.255
随着Internet的⻜速发展,这种划分⽅案的局限性很快显现出来,⼤多数组织都申请B类网络地址, 导致B类地址
很快就分配完了, ⽽A类却浪费了⼤量地址。列如一个B类网段内可以有65535个不同的主机,而A类更多。但是实际一个子网中不会存在这么多主机,所以大量的IP地址被浪费掉。所以现在这种IP地址的网络号与主机号划分方案已经不使用。
针对上述问题,提出了新的划分方案,称为CIDR(Classless Interdomain Routing)。即引用一个子网掩码(subnet mask)来区分网络号和主机号,子网掩码是一个32位正整数,高位全为1,低位全为0。将IP地址与子网掩码进行按位与操作得到的就是网络号
列如:

IP地址与⼦网掩码做与运算可以得到网络号, 主机号从全0到全1就是⼦网的地址范围。IP地址和⼦网掩码还有⼀种更简洁的表⽰⽅法,例如140.252.20.68/24,表⽰IP地址为140.252.20.68, ⼦网掩码的⾼24位是1,也就是255.255.255.0。
将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网。
将IP地址中的主机地址全部设为1, 就成为了广播地址, ⽤于给同⼀个链路中相互连接的所有主机发送数据包。
127.*的IP地址⽤于本机环回(loop back)测试,通常是127.0.0.1。

我们已经知道,IPv4类型的IP地址是32位正整数,也就是说一共有2的32次方个IP地址,大概是43亿左右,而每个主机都要一个IP地址这意味着, ⼀共只有43亿台主机能接⼊网络么?
实际上, 由于⼀些特殊的IP地址的存在, 数量远不⾜43亿; 另外IP地址并⾮是按照主机台数来配置的, ⽽是每⼀
个网卡都需要配置⼀个或多个IP地址。
CIDR在⼀定程度上缓解了IP地址不够⽤的问题(提⾼了利⽤率, 减少了浪费, 但是IP地址的绝对上限并没有增
加), 仍然不是很够⽤. 这时候有三种⽅式来解决:
1.动态分配IP地址,只给接入网络的设备分配IP地址,也就是说,同一个设备每次接入网络的IP地址有可能不同。
2.IPv6,该类型IP地址为128位也就是有2的128次方个。但是没有普及。
3.NAT技术。

私有IP和公网IP:

10.* 前8位是网络号,一共16777216个地址
172.16到172.31, 前12位为网络号,共1048567个地址。
192.168*,前16位是网络号,共65535个地址。
包含在上面三个范围的IP地址叫私有IP地址,其余全部是公网IP(全局IP)。

一个路由器有两个IP地址,WAN口IP和LAN口IP(子网IP)。路由器LAN口连接的主机,都属于当前这个路由器的子网当中。不同的路由器的子网IP其实是一样的,都是192.168.1.1。子网内的IP地址不能重复,但是子网之间的IP地址又可以重复了。每⼀个家⽤路由器, 其实⼜作为运营商路由器的⼦网中的⼀个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN⼝IP就是⼀个公网IP了。

当一台主机要向另一台主机发送数据的时候,会先发送到LAN口,如果目的主机的IP地址在当前的子网下面,那么就直接发送到对应的主机上。如果目的主机不在当前的子网中,会将数据发送给WAN口,然后通过NAT技术:替换数据报中的源IP地址,替换为WAN口地址,(同一子网内的所有主机的IP地址发送给不同子网时都会被替换为这个WAN口IP),并且将主机的IP地址和WAN口IP地址的映射保存起来,用于数据从对端发送回来。替换为WAN口地址后,再进行上述操作,直到直到相应的IP地址对应的主机。

路由:在复杂的网络中,找到一个通往终点的路线。
路由过程:当IP数据报, 到达路由器时, 路由器会先查看目的IP;路由器决定这个数据报是能直接发送给目标主机, 还是需要发送给下⼀个路由器;依次反复, ⼀直到达目标IP地址。
如何判断这个数据报发送到哪里,这就需要每个节点内部维护一张路由表。
路由表通过route命令查看。
如果目的IP命中了路由表, 就直接转发即可;
路由表中的最后⼀⾏,主要由下⼀跳地址和发送接⼝两部分组成,当目的地址与路由表中其它⾏都不匹配时,就按缺省路由条目规定的接⼝发送到下⼀跳地址。

DestinationGatewayGenmaskFlagsMetricRefUseIface
192.168.10.1*255.255.255.0U000eth0
192.168.56.0*255.255.255.0U000eth1
127.0.0.0*255.0.0.0U000lo
default192.168.10.10.0.0.0UG000eth0

Destination是目的网络地址,Genmask是⼦网掩码,Gateway是下⼀跳地址,Iface是发送接⼝,Flags中的U标志表⽰此条目有效(可以禁⽤某些条目),G标志表⽰此条目的下⼀跳地址是某个路由器的地址,没有G标志的条目表⽰目的网络地址是与本机接⼝直接相连的网络,不必经路由器转发。

根据上图:
如果要发送的数据包的目的地址是192.168.56.3。跟第⼀⾏的⼦网掩码做与运算得到192.168.56.0,与第⼀⾏的目的网络地址不符,再跟第⼆⾏的⼦网掩码做与运算得 到192.168.56.0,正是第⼆⾏的目的网络地址,因此从eth1接⼝发送出去
由于192.168.56.0/24正 是与eth1 接⼝直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发。

假如如果要发送的数据报的目的地址是202.10.1.2。
依次和路由表前⼏项进⾏对⽐, 发现都不匹配;
按缺省路由条目, 从eth0接⼝发出去, 发往192.168.10.1路由器;
由192.168.10.1路由器根据它的路由表决定下⼀跳地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值