网际协议 — IP

1. 概述

之前的介绍中,我们看到,IP 是 TCP/IP 协议族中最为核心的协议,所有的 TCP、UDP、ICMP、IGMP 数据都以 IP 数据报的格式传输。

IP 是一个不可靠、无连接的数据报传输的网络层协议,他不能保证 IP 数据报的成功传输,如果发生错误,则丢弃该数据报,并发送 ICMP 消息给发出端。
IP 并不维护任何关于后续数据报的状态信息,每个数据报都是相互独立的,因此,IP 数据报可以不按发送顺序接收。

2. IP 首部

图中,每个 32 位都被拆成了若干部分,这些部分的次序在具体的主机中的存储实现是各不相同的,每个实现都被成为主机序,而协议中规定的标准顺序被称为网络序。

  • TOS
    8 位的 TOS 代表服务类型,依次是:
    1. 3bit 的优先级子字段(已被忽略)
    2. 4bit 的 TOS 子字段(包含最小时延、最大吞吐量、最高可靠性和最小费用),在 4bit 的 TOS 子字段中,只能有 1bit 被置为 1,如果 4bit 均为 0,则为一般服务,大多数 TCP/IP 实现都不支持 TOS 特性
    3. 1bit 未用位必须置为 0

  • TTL
    8 位的 TTL 字段表示生存时间,他设置了数据报可以经过的最多路由器数,源主机设置他的初始值,没经过一个路由器就会将该值减 1,直到他减为 0 则会将该数据报丢弃。

  • 选项
    在 20 字节首部外的选项字段是可变长的,是一个可选的信息字段,一般很少使用,也不是所有主机和路由器都支持这些选项,一般长度为 32bit 的整数倍。

3. IP 的路由选择

IP 路由选择是很简单的,如果目的主机与源主机直接相连如点对点链路,或都在一个共享网络上,如以太网或令牌环网,那么 IP 数据报会被直接送到目的主机上,否则,主机把数据发送到一个默认路由器上,由路由器来转发该数据报。
IP 层在内存中有一个路由表,当收到一份数据报并进行发送时,他都要对路由表进行一次搜索。
路由表包含以下信息:
1. 目的 IP 地址
2. 下一站路由器的 IP 地址或直接连接的网络 IP 地址
3. 标志,用来指明目的 IP 地址是网络地址还是主机地址,下一站是路由器还是直接相连的接口
4. 数据报传输接口

如果数据报的目的地址是本机的 IP 地址或者 IP 广播地址,则直接发送到由 IP 首部协议字段所指定的协议模块进行处理,否则进行判断:如果 IP 层被设置为路由器的功能,那么久对数据报进行转发,否则丢弃数据报。
路由表有一个默认表项,如果全部匹配失败则会按照默认表项发往默认的路由器。

4. 子网寻址

32 位的 IP 地址根据拆分方式不同划分为五类:

现在所有的主机都要求支持子网编址,他们将 A 类和 B 类地址中的主机号拆分成子网号和主机号两部分,如通常对于一个 B 类地址的 16 位主机号拆分成 8 位子网号 + 8 位主机号的形式,这样每个子网可以拥有 254 台主机,这样,对于点分十进制的表示,可以快速找到子网号,而实现中,子网号就是子网 IP 地址,这样在得到 IP 地址后,可以立即获得子网的 IP 地址。
使用子网的好处是他可以缩小 Internet 路由表的规模,路由表只需要保存目标地址的前 16 位即可。
用于子网寻址的路由器被称为 gateway,也就是网关,他根据目的 IP 地址找到子网号及对应的实际接口。

5. 子网掩码

由于对地址中的主机号的划分是依赖于实现的(虽然绝大部分实现是将 B 类地址的 16bit 主机号拆分成 8bit 子网号 + 8bit 主机号,但这并不绝对),因此主机需要知道哪些比特位被用作子网号,哪些比特位被用作主机号,因此子网掩码应运而生。
子网掩码是一个 32bit 的值,为 0 则意味着 IP 地址中的相应比特位被用于主机号,为 1 则意味着 IP 地址中的相应比特位被用于网络号及子网号。
上面说的将 B 类地址的 16bit 主机号拆分成 8bit 子网号 + 8bit 主机号的实现对应的子网掩码为:255.255.255.0。

阅读原文

网际协议 — IP》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:https://www.bookhoes.com/5271.html