第三章 IP:网际协议
3.1引言
IP是最核心的协议,都是以IP数据报的格式传输。
特点:
不可靠: 不能保证IP数据报成功到达目的地,IP仅提供传输服务。可靠性有上层提供(TCP)。
无连接: IP不维护任何关于后续数据报的状态信息,没和数据报处理都是独立的。
3.2IP首部
普通的IP首部为20字节,除非含有选项字段。
4字节的32bit按照以下格式big endian字节序,依次传输4个字节。
详细说明IP传输格式:
1.前4个bit 是版本号,IPV4/IPV6 .
2. 4位的首部长度 ::: 首部占32bit字的数目,包含选项,最长是60字节,普通的是20字节,字段的值为5.
3.8位的服务类型: 3位的优先权子字段(先已忽略), 4位的 TOS子字段,和最后 1位的 0 。
TOS分别代表 最小时延,最大吞吐量, 最高可靠性,最小费用。只能一个为1,其余为0.全0,代表一般服务。 现在大多数TCP/IP实现不支持TOS特性。
4. 16位(int)总长度字段,整个ip数据报长度,以字节为单位。当数据报分片时,该值也会变化。
必要内容::: ip最小为46字节,通过总长度来区别内容和补零的。
5.16位标示字段:::唯一地标识主机发送的每一份数据报,每发送一份就加1.
6. 3位 标志字段
7. 13位片偏移字段
8.8位的 TTL生存时间:::数据报可以经过最多的路由器树。每经过一个,该字段就减1,当等于0时就丢弃,并发送ICMP报文通知源主机。
9. 8位 协议字段 ::: 区分是那个协议向IP发送的数据报。
10. 16位 首部检验和字段:::每16位取反,再取和。但是只对首部,不对后面数据计算。
11. 32位源IP地址
12. 32位目的IP地址
13. 选项: 很少被使用,除非所有主机路由都支持
纪录路径::: 让每个路由器记下它的IP地址
时间戳:::每个路由纪录下它的IP地址和时间
宽松的源路选择::: 为数据报指定一系列必须经过的IP地址。
严格的源路选择::: 只能经过指定的地址,不能经过其他地址。
选项是32bit为界,不足补0.So->可以进行16位的首部检验。
3.3IP路由选择
如果直接相连或者在同一网络,IP数据报直接送到目的主机上,否则,主机把数据报发送到默认的路由器上,由路由器转发数据报。
IP层在内存中有路由表,收到数据报后,先检测ip地址如果是本机地址或者广播地址就出来,不是就搜索,如果在,就发到下一个指定的地址,或默认路由中。
路由表每一项都含有以下信息:
目的IP地址 : 可以是主机地址,也可以是网络地址。
下一跳路由的IP地址 或者直接相连的网络IP地址。
标志: 有一个标志指明目的IP地址是网络地址还是主机地址,另一个标志指明下一站路由器还是直接接口。
为数据报的传输指定一个网络接口。
IP路由选择完成以下功能
1.搜索路由表 寻找能与目的IP地址完全匹配的表目,如果找到,就把报文发到下一跳。
2. 搜索路由表,选择与目的网络号匹配的表目,找到就把报文发送到下一个router 或者直接相连的网络接口。
3.选择默认路由,将报文发送到这个router。
数据报中的目的IP地址始终不发生变化,所有的路由选择决策都是基于这个目的IP地址。
每个链路层可能具有不同的数据帧首部,而且链路层的目的地址(如果有)指向下一站的链路层地址。在SLIP链路没有,以太网可以通过ARP获得。
3.4 子网寻址
不再把IP地址单纯的视为视为网络号和一个主机号的组成。而是将主机号再分成一个子网号和一个主机号。大部分是B类的。
子网来说隐对外部router藏了内部网络组织的细节。所有的IP地址都有相同的网络号
3.5子网掩码
除了IP地址外,主机还需要指定有多少比特用于子网号多少用于主机号。掩码是32bit的值,网络号和子网号为1,主机号为0.由此可得到子网掩码。子网掩码经常用十六进制来表示。
给定的IP地址和子网掩码后,主机就可以确定IP数据报的目的地是:1.本子网的主机 ; 2. 本网络中其他子网的主机; 3. 其他网络上的主机;
3.5特殊情况的IP地址
7个特殊的IP地址: 0 表示全0. -1 表示全1,netid ,subnetid ,hosted 分别表示不全0 或不全1的字段
IP 地址 可以为 描述
网络号 子网号 主机号 源端 目的段
0 0 OK NO 网络上的主机
0 主机号 OK NO 特定的主机
127 任何值 OK OK 环回地址
-1 -1 NO OK 受限广播(不能转发)
Netid -1 NO OK 目的是netid的广播
Netid subetid -1 NO OK 子网subetid的广播
Netid -1 -1 NO OK 所有子网为目的向netid广播
3.8ifconfig 命令
现在介绍TCP/IP对网络接口进行配置和查询的命令:ifconfig 命令一般在引导时运行以配置主机上的每个接口。
如果不能直接运行,应该是环境变量PATH中没有设置。
ifconfig
网卡信息的一些解释:
第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)
第二三行:网卡的IP地址、子网、掩码
第四行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)
MTU:1500(最大传输单元):1500字节 www.2cto.com
下面就是接收、发送数据包情况统计和发送接受数据字节数的统计信息。
3.9netstat 命令
Netstat 命令提供系统上的接口信息 –i参数将打印出接口信息,-n参数则打印出IP地址。 还可以用它来检查路由表 。
每个接口的M T U、输入分组数、输入错误、输出分组数、输出错误、冲突以及当前的输出队列长度
3.11 小节
IP首部的格式,简单讨论了首部12个字段,还介绍了IP主机路由选择:如果直接相连就传过去,否则就传给默认路由器。
在进行路由选择决策时,主机和路由器都是用路由表 。表中有三种类型的路由:特定主机,特定网络,默认路由
IP路由选择是通过逐跳来实现的,数据报在传输过程中目的IP不变,但是封装在链路层的目的地址可能发生变化,一般是默认的下一个路由。
A,B类地址可以进行子网划分—子网掩码。接口和网络相关的信息通过ifconfig 和netstat命令合一获得包括IP地址,子网掩码,广播地址以及MTU。
习题:
1. 环回地址必须是127.0.0.1吗?
不是,网络号时127的就可以了,但为了方便,一般选择是127.0.0.1。
2. 图中有两个网络接口的路由器
k p n o有5个接口:3个点对点链路和2 个以太网接口。R 10有4个以太网接口。g a t e w a y
有3个接口: 2个点对点链路和1 个以太网接口。最后, n e t b有1个以太网接口和2个点对点链路。
3.子网号16bit的A类地址与子网号为8bit的B类地址的子网掩码有什么不同:
A255. 255.255. 0
网络号 16bit 留给主机的
B255.255. 255. 0
网络号 子网号 主机的
没区别
4.子网掩码255.255.0.255对A类地址有效吗?
无效的 网络号和子网号为全1,主机号为全0,最后一个255 没意义? wrong
合法的: 称为非连续的子网掩码,但是RFC建议反对使用非连续子网掩码。
5.Netstat打印的环回接口的MTU为什么是1536?
历史遗留问题1024+512 但是打印MTU值包含了所有需要的首部字节数
6.TCP/IP协议族是基于一种数据报的网络技术,即I P层,其他的协议族则基于面向连接的网络技术。阅读文献[Clark 1988],找出数据报网络层提供的三个优点