文章目录
- 一.IP协议
- 二. IP地址不够用了?
- 1. 动态分配IP(DHCP)
- 2. NAT机制(网络地址转换)(理解网络结构的关键要点)
- 3. IPv6
- 4. 为什么IPv6不如NAT受用?
- 二. IP组成
- 三. 路由转发(了解)
一.IP协议
概念
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
作用
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
格式
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110。
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:
100.4.5.6。
IP协议有两个版本,IPv4和IPv6。我们整个的课程,凡是提到IP协议,没有特殊说明的,默认都是指IPv4。
IPv4数量=2^32,大约43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址。对于全世界计算机来说,这个数量是不够的,所以后来推出了IPv6(长度128位,是IPv4的4倍)。但因为目前IPv4还广泛的使用,且可以使用其他技术来解决IP地址不足的问题,所以IPv6也就没有普及。
报文结构
- 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位协议:表示上层协议的类型。
二. IP地址不够用了?
1. 动态分配IP(DHCP)
只在需要上网的时候分配IP, 不需要就不分配.
此方法只能缓解, 不能根治.
2. NAT机制(网络地址转换)(理解网络结构的关键要点)
IP地址分为了两大类:
- 内网IP: 不同的局域网内的设备, 内网IP可以重复; 同一个局域网内的设备, 内网IP不能重复.
- 10.* / 172.16.* ~ 172.31.* / 192.168.*
- 外网IP: 外网IP不能重复.
(1) 如果局域网内部的设备之间进行通信, 是可以的
(2) A局域网中的设备与B局域网中的设备通信, 需要有一个带有外网IP的设备进行中转.
(3) 局域网内部的设备访问带有外网IP的设备, 涉及NAT工作过程.
例如:
我的电脑 => 腾讯路由器发送请求
源IP: 192.168.1.1
目的IP: 1.2.3.4
这个数据报经过移动路由器的时候, 就会触发NAT机制, 移动路由器会使用自己的外网IP替换当前的源IP.
源IP: 10.20.30.40
目的IP: 1.2.3.4
NAT机制下, 一个外网的IP就就可以代表许多其他设备.
腾讯服务器返回响应(IP数据报)
源IP: 1.2.3.4 源端口: 80
目的IP: 10.20.30.40 目的端口: 1234
这个响应怎么传到PC端?
数据报先到达移动路由器, 对于NAT设备(路由器), 在触发NAT的时候, 会维护一个映射表, 映射表形如:
替换前 替换后 IP地址 192.168.1.1 10.20.30.40 端口号 1234 1234 NAT设备要通过查表, 基于可以把目的IP替换回来
源IP: 1.2.3.4 源端口: 80
目的IP: 192.168.1.1 目的端口: 1234
数据每一次经过路由器转发, 都可能会触发NAT机制(要看路由器是如何配置的, 有的模式下会, 有的不会).
NAT的缺点:
- 效率不高
- 繁琐
- 不方便直接访问局域网内的设备
NAT提高了IP地址库的"利用率", 并没有从跟本上解决IP不够用的问题.
但是他有一个很大的优点: 是纯软件实现的方案.
3. IPv6
从根本上解决了IP地址不够用的问题.
IPv4, 4个字节, 32位; IPv6, 16个字节, 128位.
4. 为什么IPv6不如NAT受用?
IPv6和NAT的诞生时间差不多, 但是NAT应用最广泛.
是因为IPv6和IPv4不兼容!
要想升级IPv6, 就需要更换路由器设备, 这样就会造成巨大成本. 而且更换IPv6并不会提高网速, 也不会提高流畅度, 所以一般人不会选择使用IPv6.
相比之下, NAT方案只需要路由器开发商开发出新版本的软件(路由器固件), 升级软件, 即可支持, 成本很低.
二. IP组成
IP地址分为两个部分,网络号和主机号
网络号:标识网段,保证相互连接的两个网段具有不同的标识;
主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;
- 同一个局域网中, 设备的网络号必须相同, 主机号必须不同
- 两个相邻的局域网, 网络号必须不同.
IP地址, 可以是自动分配(一般用于家中的设备, 网络环境简单), 也可以是手动分配的(企业的设备, 网络环境复杂, 需要网管来配置).
一个IP地址, 哪个部分是网络号, 哪个部分是主机号, 是通过 子网掩码 来识别的.
子网掩码和IP地址一样, 也是4字节, 32位的整数.
左侧必须是连续的1, 右侧必须是连续的0, 0和1不能穿插
255.255.0.0展开就是
1111 1111 1111 1111 0000 0000 0000 0000
1的范围就描述了ip地址对应的哪些位是网络号, 前16个bit就是网络号, 后16个bit就是主机号.
特殊的IP地址
- 将IP地址中的主机号全部设为0, 就成为了网络号.代表这个局域网
- 将IP地址中的主机号全部设为1, 就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
- 例如 IP 192.168.0.255 子网掩码: 255.255.255.0
- 192.168.0.是网络号, 255是主机号.主机号全为1, 这就是广播地址
- 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
- 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
三. 路由转发(了解)
每个路由器内部, 有一个数据结构"路由表", 当数据报到达路由器的时候, 就需要查询路由表看看下一步抵达哪.如果查到了, 就直接按照那个方向继续转发, 数据就能到达, 如果没有查到, 路由器会给一个默认的方向(下一跳地址), 沿着默认的方向走(往往是走到了上级路由器)