IP协议详解

目录

今日良言:守得云开见月明,静待花开终有时

一、地址管理

二、路由选择


今日良言:守得月开见月明,静待花开终有时

一、地址管理

前面介绍了传输层的两个重要协议,接下来介绍一下网络层的代表:IP协议

首先来看一下IP协议格式:

 接下来,详细介绍一下报头结构:

4位版本号:这里的取值只有两个4 和 6 4表示IPv4  6表示IPv6  这里介绍IPv4版本

4位首部长度:描述了IP报头多长(IP报头是变长的),报头中有一个是选项部分,是变长的,可有可无的,此处的单位也是4字节.

8位服务类型(TOS):说是8位,实际上只有4位有效,这4位中,只有一位可以是1,其它的都是0,4位就表示IP协议的四种形态/四种工作模式. 4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个 .

16位总长度(字节数):描述了一个IP数据报的长度(报头+载荷),减去前面的首部长度,得到的就是一个完整的TCP/UDP数据报的长度.

 16为总长度是不是就意味着一个IP数据报的最大长度是64Kb?

确实有这样的限制,但是,IP协议自身就支持对包的拆分和组装,一个IP数据报携带的载荷数据太长了,超过了64Kb,就会在网络层针对数据进行拆分,把一个数据拆成多个IP数据报,再分别进行发送. 接收方接收到后,再进行组装.

此处说是64kb,但是实际上,IP协议拆包不一定就是按照64kb为单位进行拆包,实际的往往更小(取决于数据链路层的情况)


 上面这三个子弹都是辅助拆包/组包的.

16位标识:同一个数据报拆分成的多个包的标识一样.

3位标志:结束标志.

13位片偏移:标识了多个包的先后顺序.

8位生存时间(TTL):一个数据报在网络上能够传输的最大时间.

这个时间的单位不是秒,而是次数.一个数据报构造出来,会有一个初始TTL数值比如(32 64 128...),这个报每次经过一个路由器转发,TTL-1.  如果TTL减到0,还没有到达目标,那么就认为这个包永远也到达不了了,就可以丢弃了.

8位协议:描述了当前载荷部分内容是属于哪个协议的(TCP/UDP).

16位首部检验和:只针对首部进行检验,因为载荷有自己的校验和.

接下来是IP协议中最重要的部分!!!.

 此处看到的IP地址都是32位整数,但是日常看到的则是一串数字.比如:192.168.192.1

这是因为,使用了三个 . 把32位,4个字节的数字给分割开,分成4个部分,每个部分分别使用0-255十进制整数表示,这个方法就叫做"点分十进制".

ip地址,我们期望每个设备都不相同,但是IPv4 32位数字,只能表示42亿90千万个数字,用这些数字表示全世界所有的上网设备,IP地址显然是不够用的.

那么如何解决IP地址不够用呢?主要有以下办法:

1).动态分配IP地址.

    原则上是将一个IP地址分配给多个设备,哪个设备上网,哪个设备就使用.此时就可以省下一批IP地址了.但是这个方法并没有从根本上增加IP地址,只是提高了IP地址的利用率.

2)NAT 网络地址转换

本质上就是使用一个IP地址代表一批设备.也能够大大提高IP地址的利用率,具体的设备使用端口号来进行区分.

以下图为例.多个设备经过同一个路由器去访问同一个服务器.

 上述过程,只要IP数据报是经过运营商路由器转发给服务器,服务器看到的源IP都是一样的.

如果是多个设备同时访问一个服务器,服务器的响应就会先发给路由器,路由器根据这些设备不同的端口来进行区分,决定发给哪个设备.

在NAT背景下,就把IP地址分成了两大类:

1).内网IP(私有IP)

    内网IP:10.*    172.16*-172.31.*     192.168.*

2).外网IP(公网IP)

    除了上述内网IP,其他的都是公网IP.

NAT要求,公网IP必须是唯一的,私有IP可以在不同局域网下重复出现.

如果某个内网中的设备想要访问公网的设备.就需要对应的NAT设备(路由器),把IP地址进行映射,从而完成网络访问.

反之,公网设备无法直接访问内网的设备,不同局域网内的内网的设备没法互相访问.

NAT机制能够有效的解决IP地址不够用的问题,但是带来的副作用是使网络环境更复杂了.

3)IPv6

IPv6从根本上解决了解决了IP地址不够用的问题.

IPv6使用16字节(128位 42亿*42亿*42亿*42亿)表示IP地址

虽然IPv6看起来好像非常美好,但是实际上,当前互联网世界,仍然是以NAT+IPv4+动态分配来进行网络组建的,真正使用IPv6的地方非常少.

IPv6不仅贵,而且与IPv4不兼容,如果想要支持IPv6就需要更换路由器等网络设备.世界上有一个地方,IPv6的普及程度非常高,差不多已经80%,那就是我国.


接下来介绍一下,IP协议的地址管理.

先来介绍一下两个名词:网络号和主机号.

网络号 标识网段 ,保证相互连接的两个网段具有不同的标识;
主机号 标识主机 ,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;

把一个IP地址,分成了两个部分,一个部分叫做网络号,一个叫做主机号.

比如:192.168.0.10    网络号是192.168.0   主机号是10. 

同一个局域网中的设备,网络号是相同的,主机号都是不同的.

那么,为什么要划分网络号和主机号呢?

就是为了组网.

 一个IP地址,如何划分网络号和主机号呢?

这里引入一个单独概念:子网掩码.

网络号不一定就是前三个字节,可以动态变化,此处的255.255.255.0 就是子网掩码.

255.255.255.0 用32位来表示:

11111111 11111111 11111111 00000000

左侧的部分都是1 右侧的部分都是0

1的部分就描述了IP有多少位是网络号.

对于家用设备来说,子网掩码最常见的就是:255.255.255.0

介绍几个特殊的IP地址:

将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有
主机发送数据包;
比如:192.168.0.255 使用UDP往这个地址上发送数据,整个局域网所有设备都能收到.
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),
对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通
信。

二、路由选择

这也是IP协议一个非常重要的功能,路由原则非常复杂,比TCP要复杂的多,这里只简单介绍一下:

路由选择就是规划路径,相当于平常出行使用地图导航.

由于网络环境非常复杂,任何一个节点(路由器)都是无法感知到网络环境的全貌的.

一个路由器最多只认识它周围的设备,进行一个比较长的路径的转发,就需要边转发边问.

路由选择核心思路:问路.

每个路由器都会保存一定的周围设备的信息,称为路由表.

每次有一个IP数据报经过路由器,就需要匹配路由表,看看接下来该如何走,如果路由表上有匹配的项,直接按照要求走即可,如果没有匹配的项,路由器会提供一个默认的路径,大体方向是不会错的,于是继续沿着这个方向继续走继续问.

经过一个路由器,TTL - 1 ,如果减到0了,还没有到,说明这个包永远也不会到了,此时就会被丢弃.

上述过程都是从简说明路由选择,实际的路由选择会复杂的多,但这里就不做详细介绍了.


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值