系列回顾
IP 地址
IP地址长度为4bytes, 也就是32bit. 一个IPV4的地址有4个octet组成, 通常来说, 每一位有10进制数字组成. 与MAC地址不同的是, IP地址通常有网络公司进行分配. 举个例子来说, IBM拥有所有以 9 开头的IP地址. 所以, 当数据包需要被传送到 9.0.0.1
的之后, 数据只需要被送到IBM公司其中一个路由就可以了. IBM公司的路由就会接管.
另外一个很重要的知识点就是, IP地址与硬件无关. 所以, 一台设备连接至不同网络的时候, IP地址会变, 但是MAC地址永远不变. 当一个设备连接到网络时, 通常来说, IP会被自动分配. 这种通过DHCP技术获得的IP, 叫做动态IP, 相应的, 如果如要手动设置的IP, 这种IP叫做静态IP.
IP 地址本身也被分成两部分: 第一部分叫做 Network ID, 第二部分叫做 Host ID.
Address Class 系统
Address Class定义了如何将全世界所有的IP进行分类. IP地址的分类只要有3种: Class A; Class B; Class C.
Class A: 第一个Octet为 Network ID, 剩下的为 Host ID的地址即为A类地址.
Class B: 头两个Octet为 Network ID, 后两个Octet为 Host ID的地址即为B类地址
Class C: 头3个Octet为 Network ID, 最后一个Octet为 Host ID的地址即为C类地址.
IP Datagram
跟 Ethernet Frame 一样, IP Datagram 也是有严格的格式限制的.
IP Datagram 的header里面比Ethernet Frame的header所含的信息多很多.
Version
IP Datagram的头4个bit是Version. 这里表明了这个IP Datagram用的什么版本的协议. 目前被使用得最多的是IPV4协议, 但是现在很多的服务器都渐渐开始使用IPV6了.
Header Length
紧接着 Version, 下一个字段是 Header Length. 它表明了这个IP Datagram的header的长度. 这个字段的长度同样也是4个bit. 在IPV4, 大多数情况下, header的长度是20. 事实上, 20是ip header的最小长度.
Service Type
下一个字段是 Service Type. 它的长度为8个bit. 这个字段被QoS技术使用. 关于QoS, 可以点这里了解详情. QoS技术存在的意义可以让路由器分辨出哪一个IP Datagram更重要(更高优先级).
Total Length
Total Length字段的长度为16个bit. 这个字段表明了IP Datagram的 总长度. 需要注意的和 Header Length区分.
Identification
这个字段的长度是16个bit. 它被用来讲IP Datagram的信息组合在一起. 因为 Total Length 是16个bit的长度, 所以一个IP Datagram的长度就是16个bit所能表示的最大值, 也就是65,535. 如果说需要传输的数据的大小超过65,535, 那么就需要讲数据分段. 当接受的设备收到若干个IP Datagram之后, 如果他们的 Identification字段的值一样, 那就表明, 这几个IP Datagram应该被组合在一起.
Flag 和 Fragment Offset
之所以把这两个字段放在一起讲, 是因为 Flag 字段表明这个IP Datagram是否是其中一个片段. 如果是其中一个片段, 那么 Fragment Offset是帮助接受设备把这些IP Datagram重新组合.
说到把IP Datagram分段, 是因为每个LAN的最大长度IP Datagram是不一致的. 如果说要把一个IP Datagram从一个LAN传输到另一个LAN, 但是目标LAN的最大IP Datagram比当前这个IP Datagram的大小要小, 那么就必须把这个IP Datagram分段进行传输.
TTL (Time To Live)
这个字段是个8-bit长度的字段. 它用于表示在datagram被丢弃之前能在路由之间跳多少次. 当datagram到达一个新的路由, 路由会把TTL字段减1; 如果路由遇到TTL为0的Datagram, 那么会直接丢弃. 这样做的意义是, 防止路由的死循环. 如果路由错误的发送了一个datagram到一个错误的地方导致死循环, 这个字段可以帮助路由丢弃数据包而不是一直在网络中传送这个数据包.
Protocal
这个字段长度也是8-bit. 用于表示transpor层中使用的协议. 最常见的就是 TCP 或是 UDP.
Header Checksum
这个字段是datagram header的checksum值. 接收端会校验这个值, 如果值不一致, 表明数据不完整, 那么这个datagram会被丢弃.
发送IP 和 目标IP
前面提到, IP地址是的长度是32bit, 所以这两个字段也是32bit长度.
IP Options
这个字段不是必须的字段. 主要是测试IP Datagram的时候用于设置一些特殊字符.
Padding
因为IP Option不是一个特殊字段, 它的长度也不一定. 所以Padding字段就是一堆0, 用于补全IP Option字段的长度, 使长度等于32bit.
封装
在讲 Ethernet Frame的时候讲到, 提到有一个字段叫做 Payload, 这个payload字段的内容, 其实就是IP Datagram. IP Datagram也有一个 Payload 字段, 内容就是 Transport层的Payload. 这个说明了, 模型的每一层都封装这上一层的数据包.
ARP
ARP 是 Address Resolution Protocal 的缩写, 它用于发现网络中某个IP地址的节点的硬件地址, 也就是MAC地址. 一般来说ARP通过查表来发现该IP地址的MAC地址. 每个LAN都维护一个ARP表, key是IP 地址; value是拥有该IP地址的硬件地址. 如果ARP表没有这个IP地址怎么办? 那么就会发送一个 ARP 广播给LAN的每一个节点. 举个例子, 如果需要知道10.20.30.40
的MAC地址, 而ARP表没有, 那么就会发送一个ARP广播, 然后10.20.30.40
这个节点收听到广播后将回复自己的硬件地址. 同时, 这个MAC地址也将会被存在ARP表, 以便下次使用. 还有一点需要注意的是, ARP表并不是不变的. 每隔一段时间, ARP表会被清空, 以应对可能的网络变化.