链路层
2.1. 链路层目的
- 为I P模块发送和接收I P数据报
- 为A R P模块发送A R P请求和接收A R P应答
为R A R P发送R A R P请求和接收RA R P应答
(ARP叫做地址解析协议,是用IP地址换MAC地址的一种协议
RARP则叫做逆地址解析协议)
2.2. 链路层协议
以太网链路层协议(网卡)
两个串行接口链路层协议
- SLIP:串行线路IP
- PPP:点对点协议
2.3. 环回接口( Loopback Interface)
允许运行在同一台主机上的客户程序和服务器程序通过T C P / I P进行通信。A类网络号1 2 7就是为环回接口预留的。根据惯例,大多数系统把I P地址127.0.0.1分配给这个接口,并命名为localhost
lo就是环回接口
网络层
3.1. IP首部
16位总长度字段是指整个I P数据报的长度。由于该字段长1 6比特,所以I P数据报最长可达65535字节。
T T L(t i m e - t o - l i v e)生存时间字段设置了数据报可以经过的最多路由器数。一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送I C M P报文通知源主机。
3.2. IP路由选择
先在路由表内搜索,如果属于本机IP或者IP广播地址,直接传输
如果不是,则通过路由进行转发。
对于某一个IP数据包:
- 如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。
- 搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机。
- 搜索路由表,匹配同子网的路由器。
- 搜索路由表,匹配同网号路由器。
- 如果都失败了,就丢掉这个包。
这再一次证明了,ip包是不可靠的。因为它不保证送达。
3.3. 子网寻址
IP地址的定义是网络号+子网号+主机号
子网掩码:分割子网号和主机号
第二个主机号是6位,图错了
3.4. ICMP:Internet控制报文协议
IP协议并不是一个可靠的协议
当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。
ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。
IP协议出错,一般情况都会产生ICMP,然而,为了ICMP无限循环,以下情况都不会导致产生I C M P差错报文:
1) ICMP差错报文(但是,I C M P查询报文可能会产生I C M P差错报文)。
2) 目的地址是广播地址或多播地址的I P数据报。
3) 作为链路层广播的数据报。
4) 不是I P分片的第一片。
5) 源地址不是单个主机的数据报。
3.5. Ping
它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。
3.6. Traceroute
它受到目的主机的IP后,首先给目的主机发送一个TTL=1的份U D P数据报,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的数据包给目的主机,然后刺激第二个路由器给主机发ICMP数据包。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。
UDP数据包不可能到达主机,因为在traceroute程序选择一个不可能的端口号(>30000),这样U D P模块产生一份“端口不可达”错误的I C M P报文
3.7. IP选路
路由表
5种flag:
U 该路由可以使用。
G 该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地是直接相连的。
H 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址。如果没有设置该标志,说明该路由是到一个网络
D 该路由是由重定向报文创建的
M 该路由已被重定向报文修改
因此,IP选路的方法:
首先用IP地址来匹配那些带H标志的IP地址。
如果1失败就匹配那些网络地址。
如果2失败就发送到Default网关
静态选路配置路由表:
默认方式生成路由表项(对于直接连接的接口)
通过r o u t e命令增加表项(通常从系统自引导程序文件
通过I C M P重定向生成表项(通常是在默认方式出错的情况下)。
3.8. 动态选路协议
当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路。
动态选路并不改变我们在内核在I P层的选路方式。仅仅是放置到路由表中的信息改变了——路由随时间变化时动态地增加或删除,而不是来自于自引导程序文件中的route命令。
3.8.1. RIP:选路信息协议
RIP协议使用UDP作为载体
度量:直接连接度量1,相邻路由度量2
R I P协议的routed程序正常运行的结果:
- 初始化:给每一个已知的路由器发送rip请求报文,要求其他路由器给出完整的路由表。这种报文的命令字段为1,地址字段为0,度量地段为16(相当于无穷大)。这是一种要求另一端完整路由表的特殊请求报文。
- 接收到请求。如果这个请求是刚才提到的特殊请求,那么路由器就将完整的路由表发送给请求者。否则将度量置为1 6
- 接收到响应。使响应生效,可能会更新路由表
- 定期选路更新。每过3 0秒,所有或部分路由器会将其完整路由表发送给相邻路由器。