TCP/IP 协议——IP:网际协议
2020-03-20
7 min read
# TCP/IP
1 引言
- IP是TCP/IP协议族中最为核心的协议。
- 所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输
- 不可靠性,指不能保证IP数据报能成功地到达目的地。任何要求的可靠性必须由上层来提供(如TCP)。
- 无连接性,指是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。IP数据报可以不按发送顺序接收。
- RFC 791是IP的正式规范文件。
2 IP首部
- 数据报格式如上图,阅读顺序是从左到右,从上到下
- 前20个字节加上选项部分为IP首部
- 格式:
- 协议版本号,ipv4时值为4,ipv6值为6
- 首部长度,是指IP首部所占的字节数除以4的数量(单位:32bit),取值为5-15,即最少20字节,最大60字节。
- 服务类型,长度为8 bit,其中3 bit为优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0。其中,TOS子字段分别表示最小时延、最大吞吐量、最高可靠性和最小费用。TOS子字段只能将其中一个置为1,当都为0时意味着是一般服务。RFC 1349更详细地描述了TOS的特征。
- 总长度,指整个IP数据报的长度,以字节为单位。由于该字段长16比特,所以IP数据报最大可达65535字节。当数据报被分片后,每个片的总长度值要改为该片的长度值。
- 标识字段,唯一地标识主机发送的每一份数据报,通常每发送一份报文它的值就会加1。
- 标志字段,标志字段用其中一个比特来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置1。标志字段中有一个比特称作“不分片”位。如果将这一比特置1,IP将不对数据报进行分片。当需要进行分片但设置了不分片比特时,把数据报丢弃并发送一个ICMP差错报文。
- 片偏移字段,指的是该片偏移原始数据报开始处的位置。
- TTL字段,生存时间字段设置了数据报可以经过的最多路由器数,指定了数据报的生存时间。每经过一个处理它的主机,它的值就减去1,当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。
- 协议字段,根据它可以识别是哪个协议向IP传送数据。,1表示为ICMP协议, 2表示为IGMP协议, 6表示为TCP协议, 17表示为UDP协议。
- 首部检验和,检验数据报在传输过程中是否出现差错。将首部每16个bit视为一个二进制表示的数,按每1个bit进行反码求和后,将结果存放在首部校验和字段中。接收方接收后进行反码求和,结果应该全为1,否则丢弃该收到的数据报,但不生成差错报文。
- 源IP地址和目标IP地址
- 任选项,是数据报中的一个可变长的可选信息。如安全和处理限制,记录路径等等,很少被使用。选项字段一直都是以32 bit作为界限,在必要的时候插入值为0的填充字节。
3 路由选择
3.1 路由表
- 目的IP地址。它既可以是一个完整的主机地址,也可以是一个网络地址。
- 下一站路由器的IP地址,或者有直接连接的网络IP地址。下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。
- 标志。其中一个标志指明目的IP地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接相连的接口。
- 为数据报的传输指定一个网络接口。
3.2 路由选择
- 搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口。
- 搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。
- 搜索路由表,寻找标为“默认(default)”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。
- 如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。
4 子网寻址和子网掩码
4.1 子网寻址
- 子网,是指从大网络细分的子网络。因为A类和B类地址为主机号分配了太多的空间,可分别容纳的主机数为224−2和216−2(全1和全0的主机地址无效)。在InterNIC获得某类I P网络号后,就由当地的系统管理员来进行分配,由他(或她)来决定是否建立子网,以及分配多少比特给子网号和主机号。
- 大多数的子网例子都是B类地址。其实,子网还可用于C类地址,只是它可用的比特数较少而已。大多数A类地址都是进行子网划分的。
4.2 子网掩码
- 子网掩码用来指明一个IP地址的哪些位标识的是主机的网络号和子网号,以及哪些位标识的是主机号。
- 子网掩码是一个32bit的值,其中值为1的比特留给网络号和子网号,为0的比特留给主机号。
- IP地址一般以点分十进制方法表示,但是子网掩码却经常用十六进制来表示。
- 给定IP地址和子网掩码以后,主机就可以确定IP数据报的目的是:(1)本子网上的主机;(2)本网络中其他子网中的主机;(3)其他网络上的主机。
- 如果知道本机的IP地址,那么就知道它是否为A类、B类或C类地址(从IP地址的高位可以得知),也就知道网络号和子网号之间的分界线。而根据子网掩码就可知道子网号与主机号之间的分界线。
5 特殊的IP地址
- 上图表示7个特殊的IP地址,0表示所有的比特位全为0;- 1表示所有的比特位全为1;netid、subnetid和hostid分别表示不为全0或全1的对应字段。子网号栏为空表示该地址没有进行子网划分。
- 表的头两项是特殊的源地址,中间项是特殊的环回地址,最后四项是广播地址。
- 表中的头两项,网络号为0,如主机使用BOOTP协议确定本机I P地址时只能作为初始化过程中的源地址出现。