一、引言
IP是TCP/IP协议族中最为核心的协议。
特点:
- 不可靠:它不能保证IP数据报能成功地到达目的地。
- 无连接:IP并不维护任何关于后续数据报的状态信息,每个数据报的处理是相互独立的。
二、IP首部
IP数据报的格式如下图所示:
普通IP的部首长为20个字节。
分析IP首部,最高位在左边,0bit;最低位在右边,31bit。
大尾字节序:4个字节的32bit值以大尾字节序(网络字节序,先传0位bit,最后传31bit,每次传1byte)的次序传输,如果是以小尾字节序格式存储的,在传输数据之前要把收吧转换成网络字节序。
格式说明:
- 版本号:目前的协议版本号是4,所以IP有时也称作IPv4。
- 首部长度:首部长度是指首部占32bit字的数目,因为首部长度是4位bit数,所以首部最长为60个字节。
TOS服务类型:包括一个3bit的优先权子字段(现已被忽略),4bit的TOS子字段和1bit未用位但必须置0。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4个服务类型只能选1个置为1.如果4bit均为0,则说明是一般服务。
如FTP文件传输要求有最大吞吐量,所以最大吞吐量的位置为1.
现在大多数的TCP/IP实现都不知道TOS特性(= = 都不支持还说&……%¥)*
- 总长度字段:整个IP数据报的长度,以字节byte为单位。(注意:首部长度是4byte为单位)利用首部长度和总长度字段就可以知道IP数据报中数据内容的起始位置和长度。
该字段长16bit,所以数据报最长为65535字节。(超级通道的MTU位65535,它使用的就是最长的数据报长度)
- 尽管可以传送一个长达65535字节的IP数据报,但是大多数的链路层都会对它进行分片。而且主机也不能接收超过576字节的数据报。由于TCP把用户数据分成若干片,因此一般来说这个限制不会影响TCP。
- UDP都限制用户数据报长度为512字节,小于576字节。、
- 但是现在大多数的实现(特别是安歇支持网络文件系统NFS的实现)允许超过8192字节的IP数据报。
- 总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。
- 标识字段:唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1.
- TTL生存时间字段:设置了数据报可以经过的最多路由器数。一旦经过一个处理它的路由器,它的值就减去1.
- 协议字段:根据它可以识别是哪个协议向IP传送数据。
- 首部检验和字段:是根据IP首部计算的检验和码。先把检验和字段置为0,对首部中每个16bit进行二进制反码求和,结果存在检验和字段中。在接收到一份IP数据报后,同样反码求和,如果正确,应该为全1.
- 源地址和目的地址就不说了。。
- 任选项字段:可变长的可选信息。(很少使用)
- IP首部始终是32bit的整数倍。
三、IP路由选择(选路)
如果目的主机与源主机直接相连(如点对点链路)或者都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。
IP层在内存中有一个路由表,每转发一次数据,都要搜索一次该表。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址,如果不是,那么(1)如果IP层被设置为路由器的功能,那么对数据报进行转发;否则(2)数据报被丢弃。
路由表每一项包括了一下信息:
- 目的IP地址。它可以是一个完整的主机地址,也可以是一个网络地址(不含主机号)。
- 下一站(下一跳)路由器的IP地址,或者直接连接的网络IP地址。
- 标志。其中一个标志知名目的IP地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接相连的接口。
- 为数据报的传输指定一个网络接口。
IP路由选择是逐跳地进行的,IP并不知道到达任何目的的完整路径。
IP路由选择主要完成以下这些功能:
- 搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。
- 搜索路由表,寻找能与目的网络号相匹配的表目。
- 搜索路由表,寻找标为“默认”的表目。
如果以上3步都不成功,那么该数据报不能被传送。
为一个网络指定一个路由器,而不必为每个主机指定一个路由器,这个IP路由选择机制的另一个基本特性。
- 数据报中的目的IP地址始终不发生任何变化。
- 每个链路层可能具有不同的数据帧首部,而且链路层的目的地址(如果有的话)始终指的是下一站的链路层地址。
四、子网寻址
子网编码:网络号+子网号+主机号
- 全0或全1的主机号都是无效的。
自然划分方法:把B类的前16bit作为网络号,接下来的8bit作为子网地址,后8bit作为主机号。
大多数的子网例子都是B类地址,其实子网还可以用于C类地址,只是它可用的bit数较少而已。很少A类例子,因为A类地址本来就少,但是大多数A类地址都是子网划分的。
- 子网对外部路由器来说隐藏了内部网络组织的细节。
- 使用子网划分的好处是缩小了路由表的规模,子网内所有的主机都只需要1个路由表目。
- 子网对于外部的路由器是透明的,子网对于内部的路由器是不透明的(外部知道这有一个子网,只需要知道网络号就行了;内部不管什么子网,它要找到完整的IP地址)。
五、子网掩码
子网掩码:确定IP地址中有多少bit用于子网号,多少bit用于主机号。1代表网络号,0代表主机号。
子网掩码经常用十六进制来表示,特别当界限不是一个字节时(比如网络号有20位,不是8的倍数)。
根据子网掩码,就可以确定一个IP是否为(1)本子网的 (2)本网络中其他子网的 (3)其他网络上的主机。
六、特殊情况的IP地址
有7个特殊的IP地址:
0表示所有bit全为0;-1表示所有bit全为1.netid、subnetid、hostid分别表示部位全0或全1的对应字段。子网号为空表示没有进行子网划分。
全为1的时候为广播地址。