网际协议 -- IP
2016-01-01 22:23:20 最后更新: 2016-01-02 21:18:48 访问数量:1458
2016-01-01 22:23:20 最后更新: 2016-01-02 21:18:48 访问数量:1458
之前的介绍中,我们看到,IP 是 TCP/IP 协议族中最为核心的协议,所有的 TCP、UDP、ICMP、IGMP 数据都以 IP 数据报的格式传输
IP 是一个不可靠、无连接的数据报传输的网络层协议,他不能保证 IP 数据报的成功传输,如果发生错误,则丢弃该数据报,并发送 ICMP 消息给发出端
IP 并不维护任何关于后续数据报的状态信息,每个数据报都是相互独立的,因此,IP 数据报可以不按发送顺序接收
IP 首部在之前的博客中有介绍:
图中,每个 32 位都被拆成了若干部分,这些部分的次序在具体的主机中的存储实现是各不相同的,每个实现都被成为主机序,而协议中规定的标准顺序被称为网络序
8 位的 TOS 代表服务类型,依次是:
8 位的 TTL 字段表示生存时间,他设置了数据报可以经过的最多路由器数,源主机设置他的初始值,没经过一个路由器就会将该值减 1,直到他减为 0 则会将该数据报丢弃
在 20 字节首部外的选项字段是可变长的,是一个可选的信息字段,一般很少使用,也不是所有主机和路由器都支持这些选项,一般长度为 32bit 的整数倍
IP 路由选择是很简单的,如果目的主机与源主机直接相连如点对点链路,或都在一个共享网络上,如以太网或令牌环网,那么 IP 数据报会被直接送到目的主机上,否则,主机把数据发送到一个默认路由器上,由路由器来转发该数据报
IP 层在内存中有一个路由表,当收到一份数据报并进行发送时,他都要对路由表进行一次搜索
路由表包含以下信息:
如果数据报的目的地址是本机的 IP 地址或者 IP 广播地址,则直接发送到由 IP 首部协议字段所指定的协议模块进行处理,否则进行判断:如果 IP 层被设置为路由器的功能,那么久对数据报进行转发,否则丢弃数据报
路由表有一个默认表项,如果全部匹配失败则会按照默认表项发往默认的路由器
32 位的 IP 地址根据拆分方式不同划分为五类:
现在所有的主机都要求支持子网编址,他们将 A 类和 B 类地址中的主机号拆分成子网号和主机号两部分,如通常对于一个 B 类地址的 16 位主机号拆分成 8 位子网号 + 8 位主机号的形式,这样每个子网可以拥有 254 台主机,这样,对于点分十进制的表示,可以快速找到子网号,而实现中,子网号就是子网 IP 地址,这样在得到 IP 地址后,可以立即获得子网的 IP 地址
使用子网的好处是他可以缩小 Internet 路由表的规模,路由表只需要保存目标地址的前 16 位即可
用于子网寻址的路由器被称为 gateway,也就是网关,他根据目的 IP 地址找到子网号及对应的实际接口
由于对地址中的主机号的划分是依赖于实现的(虽然绝大部分实现是将 B 类地址的 16bit 主机号拆分成 8bit 子网号 + 8bit 主机号,但这并不绝对),因此主机需要知道哪些比特位被用作子网号,哪些比特位被用作主机号,因此子网掩码应运而生
子网掩码是一个 32bit 的值,为 0 则意味着 IP 地址中的相应比特位被用于主机号,为 1 则意味着 IP 地址中的相应比特位被用于网络号及子网号
上面说的将 B 类地址的 16bit 主机号拆分成 8bit 子网号 + 8bit 主机号的实现对应的子网掩码为:255.255.255.0
欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤