网络层的作用:在复杂的网络环境中确定一个合适的路径
IP 协议(Internet Protocol)
IP 数据报格式
- 4 位版本号:指定 IP 协议的版本,对于 IPV4 来说就是 4
- 4 位首部长度:用于表示 IP 首部的长度,单位是 32 位(4字节),IP 首部最小长度是 20 字节,最大长度是 60 字节(包含选项 )
- 8 位服务类型:3 位优先权字段(已经弃用),4 位 TOS 字段,和 1 位保留字段(必须置为 0),4位 TOS 分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,这四者相互冲突,只能选择⼀个,对于 ssh / telnet 这样的应用程序,最小延时比较重要,对于 ftp 这样的程序,最大吞吐量比较重要;
- 16 位总长度:表示 IP 数据报整体所占字节,最大为 64 KB,但支持拆包,组包功能;
- 16 为标识:该字段用于唯一标识每一个数据报,一个大的数据包拆成多个小包时,他们的 16 位标识是相同的;在数据报被分片时,帮助接收端将所有分片重新组装成原始的完整数据报;
- 3 位标志:用于控制和指示数据报分片的状态:第1位(最高位)是保留位,必须设置为0,目前没有使用,将来可能用于扩展;第二位是 DF 位,表示当前数据包是否允许拆包(0 表示允许);第三位是 MF 位,表示这是否是数据报的最后一个分片(0 表示是最后一个分片);
- 13 位片偏移:描述当前每个小的数据包(分片的)的相对位置,更方便组包;
- 8 位生存时间 TTL(Time to Live):描述当前数据包在网络上能存活多久,单位是次数,会有一个初始值(32,64,128),没经过一个路由器转发,TTL 减 1,TTL 为 0 时,就会丢弃该数据包(防止目标 IP 不存在,从而浪费网络资源);
- 8 位协议:指的是封装在 IP 数据报中载荷(数据)部分的上层协议,通常是指传输层协议(如 TCP,UDP),但也可以是其他需要 IP 封装的协议(如 ICMP,IGMP);
- 16 位首部检验和:用于检查 IP 首部的(不包括载荷)完整性,验证 IP 数据报在传输过程中是否发生了错误或数据损坏;
- 32 位源 IP 地址和 32 位目的 IP 地址,分别代表IP数据报文中的源地址(发送者)和目的地址(接收者),使用点分十进制表示;
地址管理
网段划分
IP 地址分为两个部分,网络号和主机号:
网络号:保证相互连接的两个网段具有不同的标识;
主机号:用于区分同一个网段中的不同主机;
同一网段内,主机之间具有相同的网络号,但是必须具有不同的主机号;
子网就是把网络号相同的主机放到一起,如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复;通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的 IP 地址都不相同;
DHCP
DHCP 协议------动态主机配置协议(Dynamic Host Configuration Protocol),用于自动为网络上的设备分配 IP 地址和其他相关配置参数,如网关,子网掩码和 DNS 服务器,一般的路由器都带有 DHCP 功能,因此路由器也可以看做一个 DHCP 服务器;
IP 地址的划分
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
随着 Internet 的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请 B 类网络地址,导致 B 类地址很快就分配完了,而 A 类却浪费了大量地址;
针对这种情况提出了新的划分方案,称为 CIDR(Classless Interdomain Routing):引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;子网掩码也是一个 32 位的正整数,通常用一串 "0" 来结尾;将 IP 地址和子网掩码进行 "按位与" 操作,得到的结果就是网络号;网络号和主机号的划分与这个 IP 地址是 A 类、B 类还是 C 类无关;
IP 地址和子网掩码还有一种更简洁的表示方法,例如 140.252.20.68/24,表示 IP 地址为140.252.20.68,子网掩码的高 24 位是 1,也就是 255.255.255.0;
特殊的 IP 地址
- 将IP地址中的主机地址全部设为 0,就成为了,网络号,代表这个局域网;
- 将IP地址中的主机地址全部设为 1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
- 127.* 的IP地址用于本机环回(loop back)测试,通常是 127.0.0.1;
IP 地址数量的限制
IP地址(IPv4)是一个 4 字节 32 位的正整数,则一共只有 2 的 32 次方个 IP 地址,大概是 43 亿左 右;TCP / IP协议规定,每个主机都需要有一个 IP 地址,因此这就存在 IP 地址不够用的问题,这时候有三种方法来解决:
- 动态分配 IP 地址:只给接入网络的设备分配 IP 地址,因此同一个 MAC 地址的设备,每次接入互联网中,得到的 IP 地址不一定是相同的,这种做法只是提高了 IP 地址的利用率,并没有增加 IP 地址的数量;
- NAT 技术:是一种用于改变 IP 地址信息的技术,通常用于将内部私有网络的IP地址转换为公共IP地址,从而实现内网设备与外网(如互联网)之间的通信;
- 内网:也称局域网,指在一个组织、家庭或单位内部使用的网络,不直接连接到互联网;这种网络通常使用私有 IP 地址,局域网中的设备可直接通信;局域网是一个独立的网络,不直接暴露在互联网上,从而提供了一定程度的安全性;
- 以 10.*,172.16.* - 172.31.*,192.168.* 开头的 IP 地址
- 在同一个局域网内,内网 IP 不能重复
- 在不同的局域网中,内网 IP 可以重复
- 外网:也称为广域网,通常指互联网或任何能够覆盖较大地理范围的公共网络,在广域网中,设备使用公共IP地址,这些地址在全球范围内是唯一的,可以在互联网上访问
- 除过内网 IP,其余都是外网 IP
- 外网 IP 不能重复
- 公网设备与局域网设备之间的访问关系:
- 公网设备访问公网设备,由于公网的 IP 可作为唯一标识,因此可以直接访问;
- 局域网设备访问同一个局域网设备,由于同一个局域网中的 IP 地址不能重复,因此也可以直接访问;
- 局域网设备访问局域网设备,不允许;
- 公网设备访问局域网设备,不允许主动访问;
- 局域网设备访问公网设备,由于多个局域网中的 IP 可能相同,为了使公网设备可以区分,在访问公网时,需要对局域网 IP 进行地址转换;
- 局域网内主机访问公网服务器的过程
- 内网:也称局域网,指在一个组织、家庭或单位内部使用的网络,不直接连接到互联网;这种网络通常使用私有 IP 地址,局域网中的设备可直接通信;局域网是一个独立的网络,不直接暴露在互联网上,从而提供了一定程度的安全性;
路由选择
在复杂的网络结构中,找出一条通往终点的路线;
IP 数据包的传输过程和问路一样;
- 当 IP 数据包到达路由器时,路由器会先查看目的 IP;
- 路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器
- 依次反复,一直到达目标 IP 地址
那么如何判定当前这个数据包该发送到哪里呢?
这个就依靠每个节点内部维护⼀个路由表,路由表可以使用 route 命令查看,如果目的 IP 命中了路由表,就直接转发即可;路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址;
路由表通过路由表生成算法(例如,距离向量算法,LS 算法等)自动生成,也可以由网络管理员手动配置(静态路由);