1、IP协议在网络层中的位置
2、IP数据报的格式
- IP协议版本号:4bit;
IPv4网络这个值是0100;
- 头部长度:4bit,以4字节为单位;
没有option时是20个字节所以一般为20/4=5=0x101;
- type of service服务类型:8bit,有优先权、低延迟、高吞吐量、高可靠位;
在实际中已经不用了,因为大家都想把自己优先级设最高、最低延迟、高吞吐量、高可靠嘛;
- length:整个IP数据报的长度(报头+数据区),以字节为单位;
- 16位标识、flags、fragment offset:分片/重组使用,后面介绍;
- TTL:每经过一个路由器,减1;
- upper layer:IP协议可以承载各种上层协议;
- Internet checksum:头部的校验和;(校验方式同UDP)
- 32位源IP;32位目标IP;
2.1、IP分片和重组(fragment&reassembly)
网络中,不同的链路有MTU(最大传输单元)之分;
大的IP数据报如果通过另一种链路来转发,就要分成若干小的IP数据报,最后在目标主机处进行重组;
- 具有相同的16bit ID;
- 不同的偏移量,以8字节为单位;
- 最后一个分片标记为0,代表分片的总数;
一个具体的分组例子:如何将一个4000字节的IP数据报 转成 3个1500字节的IP数据报;
3、IP地址
3.1、什么是IP地址?
IP地址:32位,对主机或路由器的接口编址;
- 路由器通常有多个接口;
- 主机通常一个接口,也可能有多个接口;
3.2、什么是子网(Subnets)?
IP地址高位部分相同,低位不同,这些节点构成的网络叫做子网;
在子网内部,无需路由器介入,各主机可一跳到达;
3.3、IP地址的分类
3.4、内网专用IP地址
只在局部网络中有意义,以区分不同的设备;
专用地址不会被当做公用地址,因此路由器不会对目标地址是专用地址的分组进行转发;
专用地址范围
class A:10.0.0.0~10.255.255.255,mask 255.0.0.0
class B:172.16.0.0~172.31.255.255,mask 255.255.0.0
class C:192.168.0.0~192.168.255.255,mask 255.255.255.0
3.5、如何获得一个IP地址?
上网要配置4个信息,IP地址、子网掩码、默认网关、DNS服务器;
- 由系统管理员分配;
- 使用DHCP,从DHCP服务器中动态获取IP地址;
可以看到启动了DHCP,DHCP的服务器地址和默认网关的地址是一样的,也就是说我连接的路由设备兼具了默认网关和DHCP的功能;
DHCP给我分配了IP地址,时限是2小时;
3.6、DHCP(Dynamic Host Configuration Protocol)
3.6.1、DHCP提供的服务:
- 让加入网络的主机拥有一个IP地址;
- 动态IP是有限时的,可以更新限时;
- 重启时,允许重新使用以前的IP;
- 支持移动用户加入到网络(短期在网)
3.6.2、DHCP是如何工作的?
- 主机:广播 “DHCP discover” 报文;
- DHCP服务器:“DHCP offer” 响应报文;
- 主机:请求IP地址,发送“DHCP request”报文;
- DHCP服务器:回复“DHCP ack”报文;
4、路由转发
4.1、IP编址:CIDR(Classless InterDomain Routing)无类域间路由
- 子网部分可以在任意位置
- 地址格式:a.b.c.d/x,x是子网号的长度;
4.2、转发表和转发算法
首先,获取IP数据报中目标IP地址;
然后,将目标IP地址&子网掩码,与第一列网络号匹配,从最后一列Interface转发出去;
第一行:目标IP地址为202.38.73.00xx xxxx 与&子网掩码255.255.255.192,得到202.38.73.0;
第二行:目标IP地址为202.38.64.00xx xxxx 与&子网掩码255.255.255.192,得到202.38.64.0;
4.3、层次编址:路由聚集(route aggregation)
支持不完全的聚集,匹配最长子网掩码;
5、NAT(Network Address Translation)
5.1、什么是NAT?
本地网络只有一个IP地址,通过NAT技术可以让一个IP为局域网多设备使用;
NAT只有一个IP地址,但是端口号是16位(65536)的,用端口号来区分局域网内不同的主机;
5.2、实现:(NAT转换表,记录对应关系)
- 发送数据报:源地址→NAT的IP地址、源端口号→新端口号;
- 接收接收报:NAT的IP地址→源地址、新端口号→源端口号;
5.3、NAT 穿越问题
客户端如何主动访问NAT局域网内的服务器?
方案1:静态配置NAT
- 138.76.29.7,port 2500就对应着服务器10.0.0.1 port 2500;
方案2:Universal Plug and Play(UPnP)Internet Gateway Device(IGD)协议
- 在服务器部署之前,查询NAT路由器存在的端口映射,加一个新的端口来租用;
方案3:使用中继,客户端和服务器使用中继交换信息;
6、IPv6(128bit IP地址)
6.1、为什么有IPv6?
- IPv4的32bit地址空间用完了;
- 提升QoS服务质量:不分片、去掉checksum、
6.2、IPv6数据报格式
固定的40字节头部;
传输过程中不允许分片,如果数据报过大返回ICMP信息给源主机;
- ver:版本号,0110;
- pri:优先级;
- flow label:没有严格定义,标识哪些数据报在一个flow;(比如同一个IP发的数据报)
- payload len:载荷数据长度,除了头部40字节之后的部分,图中就后面data的字节数;
- next header:标识上层协议,或扩展头部;
- hop limit:相当于原来的TTL;
6.3、IPv4到IPv6的过渡
使用隧道(Tunneling),在IPv4路由器之间传输携带IPv6数据报的IPv4;
参考链接: