IP协议

二.IP协议

2.1 引言
2.2 概述
2.3 IP分类
2.4 IP 数据报格式
2.5 IP路由选择
2.6 子网寻址
2.7 地址解析协议 ARP
2.8 网际控制报文协议 ICMP
    1. Ping
    2. Traceroute

二.IP协议
2.1 引言

IP协议在OSI七层协议中位于网络层,在物理层和链路层之上,本文的研究范围为网络层到应用层之间的上层协议,对下层协议暂不研究。所以就以IP层为切入点,
网络层是整个互联网的核心,使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。

2.2 概述

​ I P是T C P / I P协议族中最为核心的协议。所有的 T C P、U D P、I C M P及I G M P数据都以I P数据 报格式传输 ;IP数据报传送 服务 具有不可靠性、无连接性。

不可靠(u n r e l i a b l e) :的意思是它不能保证 I P数据报能成功地到达目的地。 I P仅提供最好 的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, I P有一个简单的错误 处理算法:丢弃该数据报,然后发送 I C M P消息报给信源端。任何要求的可靠性必须由上层来 提供(如T C P)
无连接(c o n n e c t i o n l e s s)这个术语的意思是 I P并不维护任何关于后续数据报的状态信息。 每个数据报的处理是相互独立的。这也说明, I P数据报可以不按发送顺序接收。如果一信源 向相同的信宿发送两个连续的数据报(先是 A,然后是B),每个数据报都是独立地进行路由 选择,可能选择不同的路线,因此 B可能在A到达之前先到达。

与 IP 协议配套使用的还有三个协议:
    地址解析协议 ARP(Address Resolution Protocol)
    网际控制报文协议 ICMP(Internet Control Message Protocol)
    网际组管理协议 IGMP(Internet Group Management Protocol)

2.3 IP分类

I P地址长为32 bit,地址具有一定的结构,五类不同 的互联网地址格式下

在这里插入图片描述

  1. 各类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

  2. 有三类I P地址:
    单播地址(目的为单个主机)
    广播地址(目的端为给定网络上的所有主 机)
    多播地址(目的端为同一组内的所有主机)

2.4 IP 数据报格式

ip地址长度为32bit,普通的I P首部长为2 0个字节。

在这里插入图片描述

  1. 8位生存时间TTL

    T T L(t i m e - t o - l i v e)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据 报的生存时间。T T L的初始值由源主机设置(通常为 3 2或6 4),一旦经过一个处理它的路由器, 它的值就减去 1。当该字段的值为 0时,数据报就被丢弃,并发送 I C M P报文通知源主机。

  2. 16位手部检验和

    用于验证传送数据报和接受数据报的差异。首先把检验和字段置为 0。 对首部中每个 16 bit 进行二进制反码求和 ,结果存在检验和字段中 。收到数据报后再对首部进行计算,相同就把检验和字段置为 1,不同那么I P就丢弃收到的 数据报 。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。

  3. 总长度:占用16位二进制位,总长度字段是指整个IP数据报的长度(报头区+数据区)

2.5 IP路由选择

当一个IP数据包准备好了的时候,IP数据包(或者说是路由器)是如何将数据包送到目的地的呢?它是怎么选择一个合适的路径来"送货"的呢?

1. 最特殊的情况是目的主机和主机直连,那么主机根本不用寻找路由,直接把数据传递过去就可以了。至于是怎么直接传递的,这就要靠ARP协议了,后面会讲到。

2. 稍微一般一点的情况是,主机通过若干个路由器(router)和目的主机连接。那么路由器就要通过ip包的信息来为ip包寻找到一个合适的目标来进行传递,比如合适的主机,或者合适的路由。路由器或者主机将会用如下的方式来处理某一个IP数据包
    1. 如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。
    2. 搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机
    3. 搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要“子网掩码(1.3.)”的协助。如果找到路由器,则将该包发向路由器。
    4. 搜索路由表,如果匹配同子网路由器失败,则匹配同网号(第一章有讲解)路由器,如果找到路由器,则将该包发向路由器。
    5. 搜索陆游表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包
    6. 如果都失败了,就丢掉这个包。

这再一次证明了,ip包是不可靠的。因为它不保证送达。

2.6 子网寻址

IP地址的定义是网络号+主机号。但是现在所有的主机都要求子网编址,也就是说,把主机号在细分成子

网号+主机号。最终一个IP地址就成为 网络号码+子网号+主机号。
    下面就是一个B类地址:

在这里插入图片描述

    B类网络地址 (1 4 0 . 2 5 2),在剩下的16 bit中,8 bit用于子网号,8 bit用于主机号。这样就允许有

    2 5 4个子网,每个子网可以有2 5 4台主机。 (8位一共有256种可能,由于全0或全1的主机号都是无效的, 所以就有254种可能)。

2.7 地址解析协议 ARP

网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。

网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。

在这里插入图片描述
ARP 实现由 IP 地址得到 MAC 地址。
在这里插入图片描述

每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。

如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
在这里插入图片描述

2.8 网际控制报文协议 ICMP

  1. I C M P经常被认为是 I P层的一个组成部分。它传递差错报文以及其他需要注意的信息。 I C M P报文通常被I P层或更高层协议( T C P或U D P)使用。一些 I C M P报文把差错报文返回给 用户进程。

  2. 当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。书上的图6-3清楚的给出了错误类型和代码的组合代表的意思。

  3. 尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下 :(所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。 )

    ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)
    目的地址是广播地址或多播地址的IP数据报。
    作为链路层广播的数据报。
    不是IP分片的第一片。
    源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。

  4. ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途 :

    ping查询
    网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)
    时间戳查询(可以用来同步时间)。
    在这里插入图片描述
    ICMP 报文分为差错报告报文和询问报文。
    在这里插入图片描述

  5. Ping

Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。

Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
2. Traceroute

Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。

Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。

源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。

作者:zpoison
来源:CSDN
原文:https://blog.csdn.net/zpoison/article/details/86528327
版权声明:本文为博主原创文章,转载请附上博文链接!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值