网络层之IP协议

网络层之IP协议

IP协议简介

IP协议是TCP/IP协议簇中的核心协议,也是TCP/IP的载体所有的TCP,UDP,ICMP及IGMP数据都以IP数据报格式传输
IP提供不可靠的,无连接的数据传送服务。

  1. 不可靠指它不能保证IP数据报能成功到达目的地。
    IP仅提供最好的传输服务。当发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息给信源。任何要求的可靠性必须由上层来提供。
  2. 无连接指IP并不维护任何关于后续数据报的状态信息。
    每个数据报的处理是相互独立的。IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B)每个数据报都是独立的进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。

IP 地址

IP协议中还有一个非常重要的内容,那就是给因特网上的每台计算机和其它设备都规定了一种地址,叫做“IP 地址”。由于有这种地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。

所谓IP地址就是给每个连接在互联网上的主机分配的一个32位地址。

按照TCP/IP(Transport Control Protocol/Internet Protocol,传输控制协议/Internet协议)协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。

一个采用二进制形式的IP地址是一串很长的数字,人们处理起来也太费劲了。为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号“.”分开不同的字节。于是,上面的IP地址可以表示为“10.0.0.1”。IP地址的这种表示法叫做“点分十进制表示法”,这显然比1和0容易记忆得多。

一台计算机只能有一个IP地址的观点是错误的。我们可以指定一台计算机具有多个IP地址,因此在访问互联网时,不要以为一个IP地址就是一台计算机;另外,通过特定的技术,也可以使多台服务器共用一个IP地址,这些服务器在用户看起来就像一台主机似的。

在这里插入图片描述
上图中:
主机:是配有IP地址, 但是不进行路由控制的设备;
路由器: 即配有IP地址, 又能进行路由控制
节点: 主机和路由器的统称;

协议头格式

在这里插入图片描述

字段解释
4位版本号(version)指定IP协议的版本, 对于IPv4来说,就是4
4位头部长度(header length)IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节
8位服务类型(Type Of Service)3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置0). 4位TOS(最小延时, 最大吞吐量, 最高可靠性, 最小成本),只能选其一. ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要
16位总长度(total length)IP数据报整体占多少个字节
16位标识(id)唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id是相同的
3位标志字段第一位保留,第二位置为1表示禁止分片, 这时候如果报文长度超MTU, IP模块就会丢弃报文. 第三位表示”更多分片”, 如果分片了的话, 最后一个分片置为1, 其他是0
13位分片偏移(framegament offset)是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置
8位生存时间(Time To Live, TTL)数据报到达目的地的最大报文跳数
8位协议表示上层协议的类型
16位头部校验和使用CRC进行校验, 来鉴别头部是否损坏
32位源地址和32位目标地址表示发送端和接收端
选项字段不定长, 最多40字节

网段划分

为什么要进行网段划分呢?
我们寻找某台主机时,在同一个网段的主机网络号都是相同的,我们可以根据网络号确定一个区域,再通过主机号寻找目的主机。因此,我们需要知道:

IP地址分为两个部分, 网络号和主机号
网络号: 保证相互连接的两个网段具有不同的标识
主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;
不同的子网其实是把网络号相同的主机放到一起.
如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复。
主机号为1的一般都为路由器接口。
所以,通过合理设置网络号的主机号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同。
但是,手动管理子网内的IP,是一个相当麻烦的事情。
因此出现了一种叫做DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)技术,能够自动给子网内新增主机节点分配IP地址,避免了手动管理IP的不方便。且一般的路由器都带有DHCP功能,因此路由器也可以看做一个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类却浪费了大量地址。
针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing,元类域间路由选择)

子网划分

我们都知道,IP地址是以网络号和主机号标识网络上的主机的,只有在同一网络号下的主机才可以“直接”互通,不同网络号的主机要通过网关互通。

为了使同一个网络下有多个子网,就产生了子网掩码。

子网掩码:

  1. 区分网络号和主机号
  2. 是一个32位的正整数. 通常用一串 “0” 来结尾
  3. 将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号
  4. 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

如何确定子网掩码?
将一个网络划分为多个子网,网络号就要占用原来的主机位。
例如:
C类地址,21位标识网络号,8位标识主机号,要将其划分为4个子网,则需占用2位原来的主机标识位。
此时,网络号由之前的21位变为23位,子网掩码为:255.255.255.224
如下图:
在这里插入图片描述

特殊的IP地址

  1. 将IP地址中的主机地址全部设为0, 就是网络号, 代表这个局域网
  2. 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包
  3. 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

那么IP地址的数量没有限制吗?
我们知道,IP(IPV4)地址是一个四字节32位的正整数,那么一共只有2的32次方个IP地址,大概是43亿左右,而 TCP/IP协议规定, 每个主机都需要有一个IP地址,
那也就是说网络中最多只可以接入43亿主机吗?

实际上,由于一些特殊的IP地址的存在,数量就不足43亿了。另外,IP地址并非是按照主机台数配置的,而是每个网卡都需要配置一个或多个IP地址。

上文讲的子网划分,在一定程度上缓解了IP地址不够用的问题,提高了利用率,减少了浪费,但IP地址的绝对上限并没有增加,仍然不够用,会有三种方式来解决IP地址不够用的问题:

  1. 动态分配IP地址: 只给接入网络的设备分配IP地址。因此同一个MAC地址的设备, 每次接入互联网中得到的IP地址不一定是相同的
  2. NAT技术
  3. IPv6: IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及。
    注意:IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议

私有IP地址和公网IP地址

1、私有IP地址
如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,对与组建局域网的私有IP地址有如下规则:
(1)10.*,前8位是网络号,共16,777,216个地址
(2)172.16. 到 172.31.,前12位是网络号,共1,048,576个地址
(3)192.168.*,前16位是网络号,共65,536个地址

2、公网IP
如1中,包含在范围中的, 都成为私有IP, 其余的就称为全局IP(或公网IP)。
观察下图:
在这里插入图片描述
可以知道:
(1)一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
(2)路由器LAN口连接的主机,都从属于当前这个路由器的子网中。
(3)不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1)
(4)子网内的主机IP地址不能重复,但是子网之间的IP地址可以重复,所以不同子网中的两个主机不可以进行访问。
(5)子网中的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换,替换成WAN口IP,逐级替换,最终数据包中的IP地址成为一个公网IP,这种技术被称为NAT(Network Address Translation,网络地址转换)。

路由

路由,简单来说,就是在复杂的网络结构中, 一跳一跳找出一条通往终点的路线。

所谓 “一跳” 就是数据链路层中的一个区间。 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。

IP数据包的传输过程

  1. 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
  2. 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
  3. 依次反复, 一直到达目标IP地址;

如何知道当前这个数据包该发送到哪里?
依靠每个节点内部维护一个路由表,如果目的IP命中了路由表,就直接转发。
我们可以用命令route 查看路由表:
在这里插入图片描述
观察上图:
我的主机有一个网络接口,连到192.168.1.0/24网络;
注意:路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址
分析一下上图各字段的含义:

字段含义
Destination目的网络地址
Genmask⼦⽹掩码
Gateway下⼀一跳地址
Iface发送接⼝
FlagsU标志表示此条目有效(可以禁⽤某些条⽬),G标志表示此条目的下⼀跳地址是某路由器的地址,没有G标志表示目的网络地址是与本机接⼝直接相连的网络,不必经路由器转发

路由转发过程:

  1. 拿到将要发送数据包的目的地址
  2. 先和第一行的子网掩码进行与运算,与第一行的目的网络地址不符,再和下一行的子网掩码做与运算,若匹配,因为是直接相连的网络,直接发到目的主机,不需要经路由器转发
  3. 若直到最后一行之前,发现都不匹配,按缺省路由条目,从eth0接口将该IP地址发给路由器,该路由器的路由表决定下一跳的地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值