IP协议首部字段
其他字段说明
- 8位服务类型(Type Of Service):包括3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0);4位TOS分别表示:最小延时,最大吞吐吐量,最高可靠性,最小成本,这四者相互冲突,也就是说这四个中只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。
- 16位标识:同一个数据包当中的不同分片具有同样的标识,本质上就是为了在接收方接受到数据的时候,可以成功找到属于同一个数据包的不同分片。
- 3位标志:
- 第一个比特位为保留位
- 第二个比特位标识是否分片(置为1则表示禁止分片)
- 第三个比特位:
置为1代表后面还有分片
置为0则表示当前分片是最后一个分片
4. 13位片偏移:标识当前分片在数据包当中的相对位置,也是为了给接收方组合分片使用的3片偏移计算出来的是一个数值,这个数值乘以8,就计算出来当前分片在整个数据包当中的相对位置,以字节为单位。
5. 8位生存时间TTL:IP数据包最大能够经历的路由器个数。因为IP数据包每经历一个路由器,TTL就会进行减1操作。若TTL没有变成0的时候,已经到达了对端主机,这就是正常发送成功了;若TTL变成0的时候,还没有到达对端主机,就会被在网络当中丢弃掉。
6. 8位协议:使用IP协议的上层协议(也就是该数据包在传输层所使用的协议名称)。接收方在接收到这个IP数据的时候,可以通过该字段知道将IP数据包提交给哪一个传输层的协议。
关于分片
每种数据链路的最大传输单元MTU都是不相同的,如FDDI数据链路的MTU为4352、以太网的MTU是1500字节等。其中,我们最常见数据链路是以太网,它的MTU是1500字节。
那么当IP数据包大小大于MTU时,IP数据包就会被分片。经过分片之后的IP数据报在被重组的时候,只能由目标主机进行,路由器是不会进行重组的。
1. 每一个分片在传输的时候,是独立的
2. 万一在传输过程当中丢失了一个分片,就会将其他分片页丢掉,造成整个IP数据报作废,所以说IP协议也是不可靠的
3. tcp协议在传输的数据的时候,将数据递交给网络层,不需要进行分片传输,因为TCP已经严格按照MSS进行传输数据
4. udp协议在传输的数据的时候,将数据递交给网络层,有可能需要进行分片传输
由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包.
1. 将较大的IP包分成多个小包, 并给每个小包打上标签;
2. 每个小包IP协议头的 16位标识(id) 都是相同的;
3. 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为0, 否则置为1);
4. 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
5. 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据;
IP的地址分类与管理
IP地址的分类
起初,IP地址被分成了5种类型,分别是A类、B类、C类、D类、E类。
- 对于A类地址的组成来说是——‘0’+7位网络号+24位主机号
所以网络号的范围是0 000 0000 ~ 0 111 1111 也就是 [0,127]
主机号的范围是
0000 0000 0000 0000 0000 0000 ~ 1111 1111 1111 1111 1111 1111
也就是 0.0.0~255.255.255
所以A类IP地址的范围[min网络号+min主机号,max网络号+max主机号]:
0.0.0.0 ~ 127.255.255.255
- 对于B类地址的组成来说是——’10‘+14位网络号+16位主机号
所以网络号的范围是10 00 0000 0000 0000 ~ 10 11 1111 1111 1111
也就是 128.0 ~ 191.255
主机号的范围是
0000 0000 0000 0000 ~ 1111 1111 1111 1111
也就是 0.0 ~ 255.255
所以B类地址的范围是 128.0.0.0 ~ 191.255.255.255
- 对于C类地址的组成来说是——‘110’+21位网络号+8位主机号
那么网络号的范围是
110 0 0000 0000 0000 0000 0000 ~ 110 1 1111 1111 1111 1111 1111
也就是 192.0.0. ~ 223.255.255
主机号的范围是
0000 0000 ~ 1111 1111 也就是 0 ~ 255
所以C类地址的范围是 192.0.0.0 ~ 223.255.255.255
特殊的主机号
◆ 主机号全为0表示当前网络段。不可分配为特定主机;eg:1.0.0.0
◆ 主机号为全1表示广播地址,向当前网络段所有主机发消息;eg:1.255.255.255
特殊的网络号
◆ A类地址网络段全0(00000000)表示特殊网络
◆ A类地址网络段后7位全1(01111111:127)表示回环地址
◆ B类地址网络段(10000000.00000000:128.0)是不可使用的
◆ C类地址网络段(192.0.0)是不可使用的
因此,除去这些特殊的主机号和网络号,对IP地址的分类主要如下:
根据IP地址如何判断是哪类地址呢?
无分类地址CIRD
因为IP分类存在许多缺点,所以后面提出了无分类地址编制——即CIDR。
这种方式不再有分类地址的概念,32个比特位的IP地址被划分为两部分,前面是网络号,后面是主机号。
1. 表示形式为:a.b.c.d/x,其中/x表示前x位属于网络号,x的范围是0~32,这就使得IP地址更加具有灵活。
关于子网掩码
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。
子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
子网掩码——屏蔽一个IP地址的网络部分的“全1”比特模式(从高位开始连续全1)。
通过子网掩码,就可以判断两个IP在不在一个局域网内部。
子网掩码可以看出有多少位是网络号,有多少位是主机号
2. 还有另一种划分网络号与主机号形式,那就是子网掩码,掩码的意思就是掩盖掉主机号,剩余的就是网络号。
计算方法:
- 当前网络的网络号 = IP地址 & 子网掩码
eg:172.17.0.3 & 255.255.240.0 = 172.17.0.0(网络号)
2. 当前网络的最大主机数量为 ~(子网掩码)(子网掩码按位取反)
eg:~255.255.240.0 = 4095 ,也就是说当前网络的最大主机数量有4095个
公网IP和私网IP
子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP,这种技术称为NAT。(Network Address Translation,网络地址转换)
路由选择
网络数据在转发的时候,需要经历很多个转发设备(路由器,交换机),进行转发。
WAN:连接网络入户线使用,从运营商拉回来的网线插入到wan口
LAN:从路由器拉出来一根网线连接pC设备(LAN口IP就是子网IP)
每一个家用路由器,其实又作为运营商路由器的子网中的一个节点,这样的运营商路由器可能会有很多级,最外层的运营商路由器的WAN口IP就是一个公网IP了。
某主机上的网络接口配置和路由表如下:
1. 在转发数据的时候,先获取数据的目的ip地址,通过目的ip地址和路由表当中的子网掩码进行 '&'操作——会得出一个网络号
2. 如果获取到的结果和当前路由项当中的一个Destination相符合,说明这条数据是转发给当前子网当中的机器
3. 如果获取到的结果和当前路由项当中的Destination不符合,则继续匹配下一个路由项,直到所有子网的路由项都匹配一边之后,还没有找到相应的数据转发的路由项,则会和网关路由项的子网掩码进行按位与操作,将数据通过网关(WAN)转发给上级路由器
4. 上级路由器在获取了这条数据之后,也是需要重复上述匹配路由项的操作,直到将数据转发给响应子网网络当中的机器,或者转发给上级路由器
5. 在每一次路由器进行转发的时候,都会对ip数据报当中的ip协议的TTL字段进行减1操作。如果TTL==0时,还没有到达目标机器,则路由器丢弃该数据报;如果TTL>0,就到达目标机器,则为正常转发