【计算机网络】 之 网络层==== IP协议
网络层
在复杂的环境中确定一条合适的路径。
IP概述
IP协议对应的是IP地址,那么IP地址是什么?
IP地址(英语:IP Address, 全称:Internet Protocol Address),又译为网际协议地址、互联网协议地址。当设备连接网络,设备将被分配一个IP地址,用作标识。通过IP地址,设备间可以互相通讯,如果没有IP地址,我们将无法知道哪个设备是发送方,无法知道哪个是接收方。[2] IP地址有两个主要功能:标识设备或网络 和 寻址(英语:location addressing)。
总结:
- IP地址是用来标记主机的地址,没有IP地址就无法识别主机(标志主机)。
- 因为IP唯一标志主机,所以可以通过IP来查找主机。(寻址)
那么为什么有了MAC地址,还需要IP地址?
IP数据报
- 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
- 4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.
- 8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.
- 16位总长度(total length): IP数据报整体占多少个字节.
- 16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个
id都是相同的. - 3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0. 类似于一个结束标记.
- 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).
- 8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
- 8位协议: 表示上层协议的类型
- 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
- 32位源地址和32位目标地址: 表示发送端和接收端
子网掩码
IP地址分为两个部分,网络号和主机号
- 网络号:保证相互连接的两个网段具有不同的标识。
- 主机号:同一网段内的主机具有相同的网络号,但是必须有不同的主机号。
通常,计算机的IP地址和子网掩码是成对出现的,通过子网掩码和IP地址进行对照就可以知道主机号和网络号。为了方便表示,子网掩码前面通常是连续的1,后面部分是连续的0,不能出现0和1交替的情况。
现在已经知道了主机A的IP地址和子网掩码,把它们转化成二进制的形式。通过二进制对应子网掩码的1的部分对应IP地址的网络号,子网掩码为0的部分对应主机号。下面的这张图画的很清楚:
- IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围;
- IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68, 子网掩码的高24位是1,也就是255.255.255.0