介绍
IP是TCP/IP协议栈中最核心的协议,TCP、UDP、ICMP和IGMP都基于IP协议传输数据
IP协议的两个重要特点:
- 不可靠:不保证IP数据报成功传输到目的地,可靠性由上层保障
- 无连接:不维护数据报的状态信息。每个数据报都是独立传输,可能A在B之前传输,但是A在B之后到达
IP首部
其中普通IP首部占据20字节,除非包含可选字段,并且IP数据报的长度一定是32位的整数倍
- 版本号:4位。IPv4的版本号是4
- 首部长度:4位。代表图中首部占据了多少个32位。4位首部长度说明首部最长为
2^4-1=15
个32位,即60字节 - 服务类型(TOS):8位。其中3位优先权子字段(已忽略)、4位TOS子字段和1位未用位。4位TOS最多设置其中一个位,如果全0代表一般服务,这4位分别是:最小时延、最大吞吐量、最高可靠性、最小费用。根据不同类型,来选择不同的执行逻辑
- 总长度:16位。整个IP数据报的总长度,通过首部长度和总长度,可以知道数据内容的起始位置和长度
- 标识:16位。唯一标识主机发送的数据报,每发送一份报文都会加1
- 标志:3位。
- 偏移:13位。
- 生存时间:8位。数据报最多经过的路由器数
- 协议:8位。表明是哪个上层协议向IP发送数据,根据这个字段在收到数据报的时候可用正确分用
- 首部校验和:16位。根据IP首部计算的校验和
- 选项(如果有):不定长。如有需求,会额外增加的字段,可选
IP路由选择
- IP收到上层的数据报,搜索路由表,根据搜索结果并完成发送
- IP收到下层网络接口传上来的数据报,check数据报中目的IP是否为本机。如果是,则交给IP首部字段指定的协议模块解析;如果不是,则若本机无路由功能就丢弃数据报,若本机有路由功能则进行路由表搜索和转发
路由表:
- 目的IP地址:可以是网络地址,也可以是主机地址
- 下一站路由器的IP地址:直连网络的路由器IP,通过该路由器将数据转发到目的地
- 标志:一个标志区分目的IP是网络地址还是主机地址;另一个标志区分下一站路由器是真正的路由器还是直连的网络接口
- 为数据报传输指定一个网络接口
IP路由是逐跳地(hop-by-hop)进行,IP并不知道到达目的地的完整路径,只是通过路由寻找到下一站路由器,如此不断接近终点
IP路由选择过程:
- 搜索路由表,找到与目标IP完全匹配的条目,将报文发送给该条目的下一站路由器或直连的网络接口
- 搜索路由表,找到与目标网络号匹配的条目,将报文发送给该条目的下一站路由器或直连的网络接口
- 搜索路由表,找到“默认”条目,将报文发送给该条目的下一站路由器或直连的网络接口
为每个网络指定一个路由器,可以减少路由表的规模
- 大部分主机和路由器可以采用“默认”路由条目将数据传送到目的地
- 逐跳传递过程中,目的IP地址不变化
- 逐跳传递过程中,链路层数据帧首部的目的地址始终指向下一站链路层的目的地址(mac地址)
子网寻址
子网的目的:
- 如果网络下直接就是主机号,通常一个网络可用主机号较多,实际用不了这么多,浪费
- 子网对外只需要暴露网关的IP地址,可用极大减少Internet路由表规模
通常B类地址才划分子网
子网掩码
用来确定IP地址中有多少位是网络号和子网号,有多少位是主机号
有盘主机通常在系统启动的时候,会读取磁盘中的文件来获取IP地址和子网掩码
通过子网掩码可以确定目标地址与本机地址是否在:
- 其他网络
- 同一个网络
- 同一个子网
这个功能也是路由选择中不断进行的步骤
特殊的IP地址
变长子网
当一个子网(如图中子网13)中存在多个网络(如图中SLIP和以太网),就需要通过增加子网的长度,来区分该子网是SLIP子网还是以太网子网。这种改变子网长度,称为变长子网
3-10中各接口IP