目录
一、网络层与IP协议基本概念
在详细了解网络层之前我们需要先引入一些基本概念:
主机: 配置有 IP 地址, 但不进行路由控制的设备,这里的主机就是我们的一台台电脑;
路由器: 即配置有 IP 地址, 又能进行路由控制;
节点: 主机和路由器的一个统称;
1.1IP协议构成
• 4 位版本号(version): 指定 IP 协议的版本,有IPcv4和v6版本 对于IPv4来说, 就是4.
• 4 位首部长度(header length): IP 协议头部的长度是多少个32bit,也就是单位是4byte。所以4bit可以表示最大的数字是15, 也就是15个4字节,因此IP头部最大长度是60字节。
• 8 位服务类型(Type Of Service): 3位优先权的字段(已经弃用), 4位TOS的字段, 和1位保留的字段(必须置为0)。4 位TOS分别表示的是: 1、最小延时2、最大吞吐量3、最高可靠性4、最小成本。这四者相互冲突, 只能选择一个。对于ssh/telnet 这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要。
• 16 位总长度(total length): IP数据报整体占多少个字节。
• 16 位标识(id): 唯一的标识主机所发送的报文。如果IP报文在数据链路层被分片了, 那么每一个片里的16位id都是相同的。
• 3位标志字段: 第一位进行保留(保留的意思是当前不用, 但是说不定以后会用)。第二位置为1,则表示禁止进行分片,这时候如果报文长度超过MTU的话, IP模块就会丢弃报文。第三位表示"更多分片", 如果进行分片了的话, 最后一个分片则置为0, 其他则是1。类似于一个结束的标记。
• 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值*8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是 8 的整数倍(否则报文就不连续了)。
• 8 位生存时间(Time To Live, TTL): 数据报到达目的地的报文最大跳数。 一般这个值是64。每次经过一个路由器, TTL -= 1,如果一直减到 0 还没到达, 那么就直接丢弃了。 这个字段的功能主要是用来防止出现路由循环。
• 8 位协议: 表示上层协议的类型,比如UDP、TCP等常见传输层协议。
• 16 位头部校验和: 使用CRC来进行校验, 来鉴别头部是否有损坏。
• 32 位源地址和 32 位目标地址: 表示发送端和接收端。
1.2网段划分
IP 地址分为两个部分, 网络号和主机号:
• 网络号: 保证相互连接的两个网段具有独立的不同的标识;
• 主机号: 同一个网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号,从而确定某一网段内主机的唯一性;
• 不同的子网的功能其实就是把网络号相同的主机放到一起。
• 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号是一致的, 但是主机号必须是独一无二的。
1.3DHCP
通过合理的对主机号和网络号进行设置, 就可以保证在整个巨大的网络世界中, 每台主机的IP地址都 不相同,从而确保了每台主机的唯一性。 但是手动的管理和分配子网内部的IP,是非常麻烦的。
• 有一种技术叫做 DHCP, 能够自动的给子网内新增主机节点分配 IP 地址, 可以很好的解决IP分配的问题。
• 一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器。
• 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
随着 Internet 的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请 B 类 网络地址, 导致 B 类地址很快就分配完了, 而 A 类却浪费了大量地址;
• 例如, 申请了一个 B类的IP地址, 理论上一个子网内能允许6万5千多台主机。那么 A 类地址的子网内能允许存在的主机数只能更多。
• 然而实际网络架设和使用中, 基本上不会存在一个子网内有这么多台主机的情况出现。因此导致大量的 IP 地址都或多或少被浪费了。
针对这种情况提出了新的划分方案, 称为 CIDR(Classless Interdomain Routing):
• 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
• 子网掩码也是一个 32 位的正整数. 通常用一串 "0" 来结尾;
• 将 IP 地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号; • 网络号和主机号的划分与这个 IP 地址是 A 类、B 类还是 C 类无关;
如此一来,IP 地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围;
IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示 IP 地址为 140.252.20.68, 子网掩码的高 24 位是 1,也就是 255.255.255.0
标签:子网,IP,报文,Linux,网络层,地址,主机,分片 From: https://blog.csdn.net/2201_75880188/article/details/140818990