IPv4

1. IPv4报文头部介绍

在这里插入图片描述
解释:

  • 版本表示IP数据报的版本号,Internet头部长度表示32位字的数量,DS是区分服务字段,ECN是显式拥塞通知字段,总长度16位说明一个IPv4数据包最大为2^16字节
  • 以太网最小有效载荷为46字节,主机不接收大于576字节的IP包
  • 标识字段帮助标识IPv4主机发送的数据报,用于实现分片
  • 生存期TTL用于设置一个数据报经过的路由器数量上限,每经过一个减1,到0时丢弃。(防止路由环路导致数据报永远循环)
  • 协议字段表示数据报有效载荷部分的数据类型(17表示UDP,6表示TCP)
    头部校验和只计算头部。
2. IPv4五类地址

A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同

在这里插入图片描述

A类地址

  1. A类地址网络号第一位固定为0,其它7位可以分配,主机号长度为24位,网络号分配的数量为2^7 = 128
  2. 地址范围为:1.0.0.0—127.255.255.255
  3. 10.0.0.0-10.255.255.255是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址,路由器接收到私有地址,不会向Internet转发该分组,私有地址与NAT相关)
  4. 127.0.0.0-127.255.255.255是保留地址,用做循环测试用的
  5. 0.0.0.0—0.255.255.255也保留用作特殊用途
  6. 因此网络号可分配的只有125个,每个网络段的主机号可以分配的只有 2^24-2=16777214个(主机号全0和主机号全1保留)

B类地址

  1. B类地址网络号第1,2位固定为10,其它14位可以分配,主机号长度为16位
  2. 地址范围为:128.0.0.0—191.255.255.255
  3. 172.16.0.0—172.31.255.255是私有地址
  4. 169.254.0.0—169.254.255.255是保留地址(如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP)
  5. 每个网络段可分配的主机号为2^16 - 2 = 65534(主机号全0和主机号全1保留)

C类地址

  1. C类地址网络号前3位固定为110,其它21位可以分配,主机号长度为8位
  2. C类地址范围:192.0.0.0—223.255.255.255
  3. 192.168.0.0—192.168.255.255是私有地址
  4. 网络号可分配的块数为2^21 = 2097152,没块网络号可分配的主机号数为2^8-2 = 254(主机号全0和主机号全1保留)

D类地址

  1. D类IP地址不标志网络,前4位固定为1110
  2. 地址范围为:224.0.0.0—239.255.255.255
  3. 用作特殊用途,如多播地址

E类地址

  1. E类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1111
  2. E类地址范围:240.0.0.0—255.255.255.255
  3. 用于某些实验和将来使用
3. NAT

NAT将内部系统的地址空间和互联网地址空间分隔开,所有内部系统都可以使用本地分配的私有IP访问互联网。

NAT的工作原理就是重写通过路由器的数据包的识别信息。(将数据包的源IP地址修改为面向internet的网络接口地址,同时修改校验码)

NAT分为基本NAT和NAPT

  • 基本NAT利用地址池中的地址重写IP,来自同一端口需要两个IP
  • NAPT会重写端口号以区分不同主机的流量

NAT内主机发起TCP连接过程:

  1. 目标是Web服务器主机(IPv4地址212.110.167.157),数据包表示为(源IP:端口为10.0.0.126:9200,目的IP:端口为212.110.167.157:80)。

  2. NAT作为默认路由器,会收到这个包。注意到TCP报头中的SYN标志位是打开的,是一个新连接。会把数据包中的源IP修改为NAT路由器外部接口的IP(源IP:端口为63.204.134.177:9200,目的IP:端口为212.110.167.157:80),然后转发此数据包。

  3. NAT还创建一个内部状态(NAT会话)表示处理新连接,状态至少包括客户端的源端口和IP,称为NAT映射。

  4. 服务器以NAT外部地址和初始端口(端口保留)来回复,NAT收到后比对映射,确定内部主机。

IPv6

IPv6地址表示

IPv6二进位制下为128位长度,以16位为一组,每组以冒号“:”隔开,可以分为8组,每组以4位十六进制方式表示,每组的前导0可以省略
IPv6地址通常由两个逻辑部分组成:一个64位的网络前缀和一个64位的主机地址,主机地址通常根据物理地址自动生成,叫做EUI-64

IPv6地址分类

IPv6地址可分为三种:

  • 单播(unicast)地址
    单播地址标示一个网络接口。协议会把送往地址的数据包送往给其接口。
    IPv6要求所有的单播地址的子网必须是64位的
  • 任播(anycast)地址
    Anycast是IPv6特有的数据发送方式,像IPv4的多点广播一样,会有一组接收节点的地址列表,但指定为Anycast的数据包,只会发送给距离最近或发送成本最低(根据路由表来判断)的其中一个接收地址,当该接收地址收到数据包并进行回应,且加入后续的传输。该接收列表的其他节点,会知道某个节点地址已经回应了,它们就不再加入后续的传输作业。
    以目前的应用为例,Anycast地址只能分配给中间设备(如路由器、三层交换机等),不能分配给终端设备(手机、计算机等),而且不能作为发送端的地址。
  • 多播(multicast)地址
    多播地址也称组播地址。多播地址也被指定到一群不同的接口,送到多播地址的数据包会被发送到所有的地址。多播地址由皆为一的字节起始,亦即:它们的前置为FF00::/8。其第二个字节的最后四个比特用以标明"范畴"。
IPv6特殊地址

IPv6的特殊地址(用双冒号“::”表示一组0或多组连续的0,但只能出现一次)

  • 未指定地址
    ::/128-所有比特皆为零的地址称作未指定地址。这个地址不可指定给某个网络接口,并且只有在主机尚未知道其来源IP时,才会用于软件中。路由器不可转送包含未指定地址的数据包。
  • 链路本地地址
    ::1/128-是一种单播绕回地址。如果一个应用程序将数据包送到此地址,IPv6堆栈会转送这些数据包绕回到同样的虚拟接口(相当于IPv4中的127.0.0.1/8)。
    fe80::/10-这些链路本地地址指明,这些地址只在区域连线中是合法的,这有点类似于IPv4中的169.254.0.0/16。
  • 唯一区域位域
    fc00::/7-唯一区域地址(ULA,unique local address)只可在一群网站中绕送。这定义在RFC 4193中,是用来取代站点本地位域。这地址包含一个40比特的伪随机数,以减少当网站合并或数据包误传到网络时碰撞的风险。这些地址除了只能用于区域外,还具备全域性的范畴,这点违反了唯一区域位域所取代的站点本地地址的定义。
  • 多播地址
    ff00::/8-这个前置表明定义在"IP Version 6 Addressing Architecture"(RFC 4291)中的多播地址[11]。其中,有些地址已用于指定特殊协议,如ff0X::101对应所有区域的NTP服务器(RFC 2375)。
IPv6数据包

在这里插入图片描述

IPv6数据包由两个主要部分组成:头部和负载。
包头是包的前64比特并且包含有协议版本,通信类别(8位,包优先级),流标记(20比特,QoS服务质量控制),分组长度(16位),下一个头部(用于入栈解码,类似IPv4中的协议号),跳段数限制(8位,生存时间,相当于IPv4中的TTL),源和目的地址。后面是负载。
MTU至少1280字节长,在常见的以太网环境中为1500字节。负载在标准模式下最大可为65535字节。
头部固定为40字节,扩展头部仅在需要时添加,头部中有下一个头部字段,可以构成级联头部。

IPv6协议

协议:
ICMPV6:internet 控制管理协议,子协议:
1、PMTU—路径MTU发现协议 通过ICMPV6 error包来获取整段路径上最小MTU值
2、NDP------邻居发现协议—用于取代IPV4下的ARP协议
3、前缀通告------auto-config 仅在以太网环境存在
IPV6的单播路由功能,该功能开启后,设备上的auto-config被激活,同时可以收发IPV6路由协议信息;且可以为ipv6的流量进行路由,前提是路由器接口上已经拥有合法ipv6的单播地址;
只要在路由器上开启了IPV6的单播路由功能,那么该路由器将向所有存在IPV6地址的以太网接口周期发送其地址的前缀

IPv4与IPv6的比较

链接: IPv4与IPv6的区别超详细

路由转发

主机和路由器处理数据报的区别:主机不转发不由他生成的数据报,路由器会转发。
主机也可配置为路由器

直接交付与间接交付

IP转发中,如果源主机与目的地在同一个以太网内(不经过路由器,用网络子网掩码计算后具有相同网络号),数据报直接发送到目的地,称为直接交付。

直接交付中,因为在同一个网段,只涉及交换机转发原理(学习源MAC,根据目的MAC转发),IP数据报封装成帧,数据解封装只会解到二层(链路层),帧已经可以识别数据来源。
源主机发送ARP请求广播包,请求目的主机的MAC地址。收到目的主机的ARP应答后获得其MAC地址,然后作为目的MAC发送报文。
交换机原理:
交换机从某个端口收到一个数据包,它会先读取包中的源MAC地址,再去读取包中的目的MAC地址,并在地址表中查找对应的端口,如表中有和目的MAC地址对应的端口,就把数据包直接复制到这个端口上。

详细过程见: 计算机网络笔记1 MAC地址学习过程

间接交付中,涉及到路由器转发原理。
路由器的转发原理就是根据路由表转发,路由表中有路由才会转发,无路由则直接丢弃

路由转发过程

(假设三层交换机上未建立任何硬件转发表项)

  • 源主机判断目的主机与自己位于不同网段,首先发送ARP请求获得网关IP地址对应的MAC,得到应答后,用网关MAC作为报文的目的MAC发送报文。

  • 路由器收到一个报文时,首先根据源MAC更新MAC地址表,因为交换芯片(ASIC)未建立任何表项,因此将报文送到CPU处理。

  • CPU会把报文解封装到第三层,查看IP头部的目的IP地址。然后用掩码按位与操作,在路由表中查找是否有路由(匹配直连路由,最长前缀匹配算法)

  • 有则转发(假设已知下一跳的MAC)无则丢弃。路由转发确定接口(下一跳的网络接口)和下一跳(路由器或主机的IP地址)。

  • 路由器转发给下一个路由器时,会将出接口的MAC地址替换报文的源MAC地址,用下一跳MAC地址替换报文的目的MAC地址,同时TTL减1。并且把相应的目的IP、下一跳MAC、出接口等信息存储到硬件转发表。后续发往同一网段的报文就可以直接通过交换芯片转发。

  • 目的主机收到报文后,解封装到第三层,发送响应数据包。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐