1.IP协议的特性
- 无连接性。IP协议是一种无连接协议,这意味着数据包在传输过程中不需要保留连接状态信息。每个数据包都是独立发送和处理的,每个包都可以按不同的路径传输到目的地。
- 不可靠性。IP协议不提供任何可靠性保证,数据包在传输过程中可能会丢失、重复或乱序。这需要应用层协议自行处理数据的可靠性。
- 分组交换。IP协议采用分组交换技术,将数据分成较小的数据包进行传输,以适应不同网络速度的环境并降低网络拥塞的风险。
- 路由选择。IP协议可以根据网络拓扑和路由信息,动态选择最佳的传输路径,具有较高的网络扩展性。
- 分类服务和差错检测。IP协议支持不同的服务质量,可以对数据包进行分类和处理,还支持差错检测机制,确保数据包传输过程中的完整性和正确性。
- 地址的唯一性和层次性。每个连接到网络的设备都必须具有唯一的IP地址,以便能够与其他设备区分和通信。地址还具有层次性,有助于在地址总数较多时更高效地定位通信主体。
1.1 报文格式
• 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位⽬标地址:表⽰发送端和接收端.
• 选项字段(不定⻓,最多40字节)
1.2 IP协议如何管理地址
IP地址本质是一个32位整数,为了方便,就会把IP表示成点分十进制
IP地址的存在,目的是为了区分网络上的不同的设备,希望每个网络都有唯一的一个IP地址
32位整数表示的数据范围42亿9千万
这个数据看起来很大,但在网络飞速发展的今天,其实并不算很大
1.3 如何解决IP地址不够用
1) 动态分配IP地址
2)NAT机制(网络地址映射)
先把地址分分为两大类,
a.私网IP/局域网
IP地址是以10.* 172.16--172.31.* 192.168.*
b.公网IP/广域网
除了私网IP 剩下的都是公网IP
要求公网上设备,对应的公网IP,都必须唯一
但私网上的设备,使用私网IP,只要保证和私网内部的IP不重复即可,不同的局域网之间的IP允许重复
由于上述设定,就有了一个限制
1.公网设备访问公网设备,没有任何问题,直接访问即可
2.局域网设备访问局域网设备(同一个局域网中),也没有任何问题
3.局域网设备访问局域网设备(不同局域网中),不允许访问
4.局域网设备访问公网设备,就需要对局域网设备的IP进行地址转换
5.公网设备访问局域网设备,不允许主动访问
外网设备 ->外网设备,不需要任何 NAT,直接就能通信
内网设备 -> 其他内网设备, 不允许!!
外网设备 ->内网设备,不允许!!
内网设备 ->外网设备,对应的内网设备的路由器,触发NAT 机制进行 IP 替换,此时就会给这个网络数据报的源IP替换成路由器自己的 ip
3) IPv6 从根本上解决问题的方案
IPv6使用16字节表示ip地址 2^128 是一个天文数字
但ipv6报头结构和ipv4是不兼容的
2.网段划分
IP地址分为两个部分,⽹络号和主机号
• ⽹络号:保证相互连接的两个⽹段具有不同的标识;
• 主机号:同⼀⽹段内,主机之间具有相同的⽹络号,但是必须有不同的主机号不同的⼦⽹其实就是把⽹络号相同的主机放到⼀起.
如果在⼦⽹中新增⼀台主机,则这台主机的⽹络号和这个⼦⽹的⽹络号⼀致,但是主机号必须不能和⼦⽹中的其他主机重复.
• A类 0.0.0.0到127.255.255.255
• B类 128.0.0.0到191.255.255.255
• C类 192.0.0.0到223.255.255.255
• D类 224.0.0.0到239.255.255.255
• E类 240.0.0.0到247.255.255.255
随着Internet的⻜速发展,这种划分⽅案的局限性很快显现出来,⼤多数组织都申请B类⽹络地址,导致B类地址很快就分配完了,⽽A类却浪费了⼤量地址;
• 例如,申请了⼀个B类地址,理论上⼀个⼦⽹内能允许6万5千多个主机.A类地址的⼦⽹内的主机数更多.
• 然⽽实际⽹络架设中, 不会存在⼀个⼦⽹内有这么多的情况.因此⼤量的IP地址都被浪费掉了.
针对这种情况提出了新的划分⽅案,称为CIDR(Classless InterdomainRouting):
• 引⼊⼀个额外的⼦⽹掩码(subnet mask)来区分⽹络号和主机号;
• ⼦⽹掩码也是⼀个32位的正整数.通常⽤⼀串"0"来结尾;
• 将IP地址和⼦⽹掩码进⾏"按位与"操作,得到的结果就是⽹络号;
• ⽹络号和主机号的划分与这个IP地址是A类、B类还是C类⽆关;
3.路由选择
从复杂的网络结构中,找到一条通往终点的路线
路由的过程,就是一跳一跳"问路"的过程
⼀跳":数据链路层中的⼀个区间.具体在以太⽹中指从源MAC地址到⽬的MAC地址之间的帧
传输区间.
IP数据包的传输过程也和问路⼀样.
• 当IP数据包,到达路由器时,路由器会先查看⽬的IP;
• 路由器决定这个数据包是能直接发送给⽬标主机,还是需要发送给下⼀个路由器;
• 依次反复,⼀直到达⽬标IP地址;
• 路由表可以使⽤route命令查看
• 如果⽬的IP命中了路由表,就直接转发即可;
• 路由表中的最后⼀⾏,主要由下⼀跳地址和发送接⼝两部分组成,当⽬的地址与路由表中其它⾏都不匹配时,就按缺省路由条⽬规定的接⼝发送到下⼀跳地址。