IP协议
ip协议具有两个特性:
- 不可靠:ip协议不能保证一定传输数据到目的端。发送某种错误时,会通过ICMP信息报给信源端,由上层协议保证可靠性。
- 无连接:ip协议不维护后续数据报的状态。每个数据报都是独立的。不按顺序发送,不保证每一次的传输线路相同。
IP数据报格式
使用wireshark分析网络包
各字段的含义
- 4位版本:目前是ipv4 就是4
- 4位首部长度:一般的数据报是5。4bit表示最大是15个32bit长(60字节)没有选项是5(20字节)
- 8位服务类型:一般的数据报是00
- 16位总长度:因为链路层限制帧的长度范围是46~1500字节。总长度表示ip报文的长度
- 16位标识:是唯一标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1
- 3位标志:不知道。上图中是010
- 13位片偏移:不知道。上图中全是0
- 8位生存时间(ttl):表示数据报最多经过的路由数。上图中是128.当该值是0时,丢弃该报文,通过ICMP报文通知源主机
- 8位协议:表示是ip协议的上层协议是什么。1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。
- 16位首部校验和:根据ip首部(ip数据报的前20个字节)计算的校验码。校验方法:检验和置0,然后对首部每个16bit的二进制反码求和,结果存在校验和字段。收到一份ip数据报时,对首部每个16bit的二进制反码求和。如果没有错误,接收方计算的结果是全是1。如果错误则IP会丢弃数据报,但是不生成差错报文,由上层协议发现丢失的数据报并进行重传
- 32位源ip
- 32位目标ip
- 选项是可变长的可选信息
- 数据:上层协议的数据
IP路由选择
主机也可以配置成路由器。区别:主机从不把数据报从一个接口转发到另一个接口,而路由器要转发数据报。
路由表的表目信息
- 目的IP地址。它既可以是一个完整的主机地址,也可以是网络地址,取决于标志字段。主机地址有一个非0的主机号,指定某一特定主机。主机号为0,以指定网络中的所有主机(如以太网,令牌环网)。
- 下一站(下一跳)路由器的IP地址,或者直接连接的网络IP地址。下一站路由器是指一个在直接网络相连接的路由器,通过它可以转发数据。由下一站来转发数据,最终到达目的地或者被抛弃
- 标志。其中一个标志指明是目的IP地址是主机地址还是网络地址。另一标志指明下一站路由器是否为最终目的,还是一个直接相连的接口
- 为数据报的传输指定一个网络接口。
IP路由选择是逐跳地进行的。ip路由器收到请求时会做一下三件事
- 搜索路由表,寻找与目标ip完全匹配的表目(网络号和主机号)。如果能找到,则把报文发给该表目指定的下一站路由器或者直接连接的网络接口(取决于标志字段的值)
- 搜索路由表,寻找能与目标主机匹配的网络号表目。如果找到,根据表目的标志字段指定的发往下一站路由器或者直接连接的网络接口。一个以太网上的所有主机都是通过这种表目进行寻径的。(需要考虑子网掩码)
- 搜索路由表,寻找标为默认的表目,如果有则把报文发往该表目指定的下一站路由器
I P层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时,I P首先检查目的I P地址是否为本机的I P地址之一或者I P广播地址。如果确实是这样,数据报就被送到由 I P首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么( 1)如果I P层被设置为路由器的功能,那么就对数据报进行转发(也就是说,像下面对待发出的数据报一样处理);否则( 2)数据报被丢弃。
IP路由举例
- 使用以太网传输到neta时,链路层首部的目的以太网是下一站的以太网接口地址,ip层的首部的目的ip地址不变。
- 链路层的以太网接口地址使用arp协议获取
- neta发现数据报的目的ip地址不是本机的任一地址。用默认表目的下一站路由器通过slip串行线路发送到netb
- netb发送数据报的目的ip地址也不是本机的任一地址。选择默认表目的下一站,使用arp协议获取下一站ip的以太网地址,使用以太网链路发送到gateway
注意问题:
- 例子中的所有主机和路由器采用默认路由,事实上这是一种实际做法
- 数据报中 目标ip地址没有改变
- 链路层的首部ip地址始终是下一站的链路层地址,会变化
子网寻址
所有的主机要支持子网编址。网络号不变,把主机号再分成一个子网号和一个主机号。因为A和B类地址的主机号太多了。
子网例子
使用子网模式比c类网络地址少外部路由表目。但是子网内部的路由表目还是需要内部路由器知道。
子网掩码
子网掩码用来区分子网号和主机号。子网掩码为0的部分位数就是主机号,为1的部分位数是网络号+子网号
特殊情况的IP地址
- 网络号是127的是环回地址
- 主机号全为1的是该网络的广播地址
- 主机号全为0的是子网路由器地址
一个子网的例子
- 不同的链路层往往分配不同的子网号。
- 连接两个网络的是有路由器功能的主机
系统
3.1 环回地址必须是127.0.0.1吗?
答:不需要,只要是127这个网段的。
3.2 在图3 - 6中指出有两个网络接口的路由器。
答:gateway、kpno、netb、sun、bsdi。我理解R都是路由器,路由器不都是两个接口么?
3.3 子网号为16bit的A类地址与子网号为8bit的B类地址的子网掩码有什么不同?
答:从子网掩码看一样。但是网络号不同
3.4 阅读RFC 1219 [Tsuchiya 1991],学习分配子网号和主机号的有关推荐技术。
3.5 子网掩码255.255.0.255是否对A类地址有效?
答:这个子网掩码是合法的,但是RFC不推荐使用不连续的子网掩码。对A类地址是有效的。
3.6 你认为为什么3.9小节中打印出来的环回接口的MTU要设置为1536?
答:找了一圈没找到原因,获取真的是历史原因。链路的mtu应该根据使用的协议设置成协议的最大值。
3.7 TCP/IP协议族是基于一种数据报的网络技术,即IP层,其他的协议族则基于面向连接的网络技术。阅读文献[Clark 1988],找出数据报网络层提供的三个优点。
第一,数据报降低了路由器中对于连接状态的需求。第二,数据报提供了基本的构件,在它的上面可以构造不可靠的(UDP)和可靠的(TCP)的运输层。第三,数据报代表了最小的网络层假定,使得可以使用很大范围的数据链路层服务。(抄的)