IP协议的相关特性

本文详细介绍了IP协议的主要工作,包括地址管理(网络号和主机号、DHCP、特殊IP等)以及路由选择(路由表、分包与组包、数据包转发过程),展示了IP协议在网络通信中的关键作用。
摘要由CSDN通过智能技术生成

IP协议主要完成的工作,包括两方面:

  1. 地址管理:使用一套地址体系(IP地址)来描述互联网上每个设备所处的位置。
  2. 路由选择:一个数据包如何从网络中的一个地址传输到另一个地址。

下面我们先来认识一下IP协议头格式。

一、IP协议头格式

  • 4位版本指定IP协议的版本,取值只有两种:4、6,对于IPv4来说, 就是4。
  • 4位首部长度:IP报头是可变长的,单位是4字节。4位首部长度,所以IP头部最大长度是2^4*4=64字节。
  • 8位服务类型(Type Of Service):实际上只有4位有效,这4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。 这四者相互冲突,只能选择⼀个(其中只有一个为1,剩下的都为0)。
  • 16位总长度:IP数据报整体占多少个字节(包含报头+载荷)。

 这里就想到了64KB的限制,是否意味着IP协议的载荷只能长度有限呢?如果构造一个非常大的TCP数据,IP是否就传输不了了?

答:虽然IP自身有长度限制,但是IP提供了 拆包/组包 功能。此时载荷就可以很大,超过64KB也没有关系,在IP这一层会自动拆成多个IP数据报,每个IP数据报携带载荷的一部分。

 上述的拆包过程都是IP(系统内核)自动完成的,程序员通过软件代码无法干预到。

对于拆包问题,不仅是因为IP的64KB限制,在数据链路层也会有限制。

那么拆包之后,到组包的时候是如何完成的呢?组包就要用到IP报头中的16位标识、3位标志和13位片偏移

  • 16位标识哪些IP数据报的载荷应该往一起组装。唯⼀的标识主机发送的报文. 如果IP报文在数据链路层被分片(包)了, 那么每⼀个片里面的这个id都是相同的。
  • 3位标志:只有两位有效,其中 1 位表示这次的IP数据报是否拆包了;另一位表示结束标记(
    如果分包了话, 最后⼀个分包置为1, 其他是0. 类似于⼀个结束标记)。
  • 13位片偏移 是分片相对于原始IP报文开始处的偏移,其实就是在表示当前 分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后⼀个报文之 外, 其他报文的长度必须是8的整数倍(否则报文就不连续了)。
  • 8位生存时间(TTL): 数据报到达目的地的最大报文跳数,单位是次数, ⼀般是64. 每次经过⼀个路 由, TTL就减1,⼀直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环。
  • 8位协议:表示在传输层使用哪个协议。
  • 16位首部校验和: 使用CRC进行校验, 来鉴别头部是否损坏。
  • 32位源IP地址和32位目的IP地址: 表示发送端和接收端。

二、地址管理

1、网段划分

IP地址分为两个部分,网络号和主机号。
  • 网络号: 保证相互连接的两个网段具有不同的标识;
  • 主机号: 同⼀网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号

 

  • 不同的子网其实就是把网络号相同的主机放到⼀起。
  • 如果在子网中新增⼀台主机, 则这台主机的网络号和这个子网的网络号⼀致, 但是主机号必须不能和子网中的其他主机重复.

 那么问题来了, 手动管理子网内的IP, 是⼀个相当麻烦的事情。

有⼀种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便。

⼀般的路由器都带有DHCP功能. 因此路由器也可以看做⼀个DHCP服务器.

2、特殊的IP地址

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

3、 私有IP地址和公网IP地址

如果⼀个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上使用任意 的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址。
  • 10.*,前8位是网络号,共16,777,216个地址
  • 172.16.到172.31.,前12位是网络号,共1,048,576个地址
  • 192.168.*,前16位是网络号,共65,536个地址
包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP)。

三、路由选择

 在复杂的网络结构中, 找出⼀条通往终点的路线。路由的过程, 是⼀跳⼀跳"问路" 的过程。(每个路由器都无法掌握全局的信息,只能掌握一部分局部信息,此时路由器规划出来的只是一个“较优解”)。

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

IP数据包的传输过程也和我们问路⼀样

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

那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护⼀个路由表。

  • 路由表可以使用route命令查看
  • 如果目的IP命中了路由表, 就直接转发即可;
  • 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下⼀跳地址。
假设某主机上的网络接口配置和路由表如下:
  • 这台主机有两个网络接口,⼀个网络接口连到192.168.10.0/24⽹络,另⼀个网络接口连到 192.168.56.0/24网络;
  • 路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口 ,Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下⼀跳地址是某个路由 器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。

转发过程例1: 如果要发送的数据包的目的地址是192.168.56.3:

  • 跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符;
  • 再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发 送出去;
  • 由于192.168.56.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由 器转发;

转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2:

  • 依次和路由表前几项进行对比, 发现都不匹配;
  • 按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器;
  • 由192.168.10.1路由器根据它的路由表决定下⼀跳地址。 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值