台湾清华大学物联网--002 IPv6协议运作原理与应用

Plug and play: IPv6不需要自己去设定网址,直接就可以自己设定网址,与外界通信。
Security/QoS

IPv6的应用需要许多地址,IPv6刚好可以提供足够的地址。
IPv6的连线比较快
Remote control
家庭自动化
sensor network:身体上好多配件都会上网,比如项链,手表等
IoT:依靠目前的IPv4无法支撑,必须依靠IPv6
H-M:人通过遥控器控制家电
M-M:自动车之间的主动避让。

IPv4比较成功,在设计IPv6时,尽量保留IPv4的优点,增加一些IPv4有缺陷的一些功能,比如QoS,Security。而不仅仅是地址数量的增加。


IPv6的header非常简洁,长度只有40Byte。 精简header之后,让router处理IP header的效率提升
IPv4的header比较复杂,栏位比较多,而且不固定长度,IPv4 header比较复杂,也会导致router的处理IP header的效率降低。
比较重要的是source IP address与Destination IP address.

扫描二维码关注公众号,回复: 2240388 查看本文章

IPv4有6个栏位被IPv6拿掉,header length/type of service/identification/flags/fragment offset/header checksum。
三个栏位被重命名:长度,protocol type,time to live
option mechanicasm被修改。 原来IPv4有source routing(由发送端制定封包的发送路径,该封包该经过哪些router的ip。 做法是在IPv4 header的Optin+Padding 栏位填写不同的ip,经过几个router就填写几个IP,经过这些router将封包发给接收端。)与route recording(在封包上记录这个封包曾经经过哪些router,即每个router在处理封包时,这个router就将自己的ip添加到该IP封包中,经过多少个router就会记录多少个ip)两种。
在IPv6中增加了两个栏位:priority/Flow Label,针对real time service提供更高的优先级。

IPv6 header相比较IPv4 header主要做了三个简化的动作。
让header的长度固定,只有40byte,简化router的操作,方便router更加容易找到下一个header。
拿掉header的checksum。 在mac layer,数据帧已经有FCS,CRC的检查,现在的网络稳定性相比较以往30-40年前更高,ip层的checksum用处不是很大,因此此处拿掉ip层的checksum
拿掉hop-by-hop segmentation。 在IPv4中,router的一个很重要的工作,当收到一个很大的封包,传入网络时,当超过MTU限制时,router会将该封包切割成比较适合网络传输的小封包。而在IPv6的网络中,router不在做切割封包这一工作,这一动作交由source端的host来做,发送端,如果认为该封包太大,则自行切割。

IPv6拿掉这些功能,这些功能去了哪里? form options to extension headers
大概归类为6中extention headers
hop-by-hop extension headers:到底要不要让router处理
routing header:到底要不要做source routing,指定传输路径。 要就用这些header,不要就不用
fragment header:到底要不要处理fragment。 封包没有切割就不用
authentication headers:不需要特别的认证就不用
Encrypted security payload:如果传输不需要加密,则不用该header
Destination option header

最简单的,大部分的封包:IP+TCP,不要加密,不要source routing,不要fragment,处理起来就会比较简单,比较快,标准的40Byte
如果封包要做source routing,则它的next header就指定routing,后面还是接TCP
最前面,IPv6header,最后面tcp的header,中间加了两层header,routing header与fragment header
IPv6封包中到底包含几个header,取决于source在启动发送时到底要求启用什么功能。

Routing header:source routing时,就需要把经过的那些router的ip地址放置在header里面,最多可以放24个ip地址,即经过24个router。
Strict/Losse bit mask:Loose 只要经过这些router就好,比如经过router IP1 到 router IP2,只要经过这些ip地址就好,而不关心中间还经过哪些router地址,
Strict coupled:只能经过我们制定的router地址。

Fragment headers
假设source端有一个2800byte的封包,把它切割成2个封包,每个1400byte,则每一个切割后的封包必需加一个fragment header,加fragment header的目的是让接收端,收到这两个封包后,再将data组合起来。
Fragment header里面有一个Identifier,表示不同的子封包属于一个大的封包,它们的Identifier相同。
Offset:该子封包在原来大封包里面的位置。
如果没有切割, 就不需要fragment header

Unicast:Ip送给一个特定的地址
Multicast:Ip要送给一群目的地
Anycast:送出去时,只要有人帮它转送即可,送给谁不重要。 
128bit IPv6地址,表示为8个16bit的整数,之间用冒号间隔
每个16bit又由4个整数来表示,每个整数4bit。
如果16biy均为0,就可以用一个0来表示4个连续的0

如果有很多的零连在一起,就可以用两个连续的冒号表示,中间全部为0.
只能将一组连续的零用两个冒号表示,两组以上的零不可,因为那样会让我们无法判断零的长度。

有些地址是给Provider的,运营商。
Link Local:一个link就相当于一个网络,只在link内部使用,link外面看不懂,无法解析该地址,通常只在电脑刚刚开机(IPv6有一个很重要的特性是auto configuration/plug & play),自动会给自己分配一个ip地址,并自动去找router,而不用去设定router。router本身也有一些ipv6的地址,分配给该电脑正式的global的ipv6的地址。
Site Local:许多link连接在一起,组成一个site,比如一个site/企业/学校
Multi-Cast
Any Cast

TLA:第一级,一般是指世界上最大的电信运营商
NLA
SLA
依照大小规模,逐级分配。

Link Local地址:FE80开头。

Site Loca地址:FEC0开头

Interface ID:由网卡48bit的MAC地址自动生成64bit的地址。
或者是产生一个为随机的64bit地址。因为link loca地址是一个临时地址,当链接到路由器后就会得到正式的global ip地址,link local地址将不再使用。
透过DPCP分配/人工分配/其它的分配方式来分配interface id

ICMP:基于IPv4,新增了群播功能。

主要在130-137

Ping: Echo request/reply

目的不可达:对方可能未开机

IGP:AS内部

EGP:AS之间

IPv6的地址具有时效性,不像IPv4,设置一个静态地址可以长期使用

无状态:当前ip地址与历史无关

有状态:当前ip地址的设定与历史使用记录有关。比如给某一主机不变的ip,方便主机通信

群播地址: FF02::1, 所有在该子网络的的station都可以收到该封包。

FF02::2,所有在该链路上的路由器都可以收到该封包

链路上有N个路由器,就回给requester N个不同的ipv6地址,透过其它协议来判定究竟用哪个ip

得到IP后,就需要得到邻居的mac,方便与邻居通信

主机会维护4张表,

最近的目的地址是哪些,透过哪些router传出去的

邻居有哪些

路由器给的prefix list

路由器清单

路由器通过直接查看Flow Label就可能得到路由路径,而不需要查看其它栏位的信息,这样大大提高路由器的转发新能

如果5个flow优先级相同,则round-robin,轮流发送。

也可以设置优先级,最高优先级的先发送,发送完成后才发送次高优先级的

还可以根据每个不同的优先级设置不同的发送比例,比如Flow1 30%, flow 2 20%, flow 3 10%,..., 优先级越高,发送的占比越高,这种方式较FWQ,Fair wait queue

认证:对方无法欺骗

加密:即使被窃取,也无法看到具体的内容

认证与加密是两个不同的header,单独使用。属于extension header,需要时才使用

为了让接收方看懂信息,需要给对方发送key(基于对称加密),非对称加密则不需要

双栈技术:ipv4封包走ipv4协议栈,ipv6封包走ipv6协议栈

RFC2529: IPv6 host to IPv6 host,透过IPv4网络

RFC3056:IPv6 网络 to IPv6 网络,透过IPv4网络

RFC3053:IPv4/v6 双协议栈 host透过ipv4网络传给另一个ipv6网络

IPv6网络中的双栈主机,内部的ipv4 application与ipv4网络中的ipv4 applicaiton 通信

IPv6目前属于小众,如何与大众的ipv4沟通,而不至于被隔离为孤岛?

A会有C的目的IPv4地址

A向DSTM 网关请求一个IPv4地址,同时告诉A DSTM网关的IPv6地址

A产生一个IPv4数据封包,目的地值C,其中,这个IPv4封包外面会加一层IPv6 header,方便它在IPv6网络中传送

B收到该封包后,拆除ipv6header,并将它发送给C

B会维护一张A的IPv4 IPv6映射表,方便C回送给A时,DSTM 网关在将该封包添加IPv6 header,透过IPv6网络,发送给A。

IPv6中,大概有6中tunnel的方法。

RFC1933:主要是IPv6的host与IPv6的router做transition,主要有两种tunnel, Configred tunnel & Automatic tunnel

Configured tunnel:用于两个常常用于交换资料的网络当中,整两个网络中交换大的流量。

Automatic tunnels:假设router,看到一个ipv6的位置,发现这个位置本身就可以到达destination,由router自动建立tunnel到达目的地。

所谓configured tunnel:是指我们要让ipv6的封包在ipv4的网络上穿过去。这一个动作,叫做encapsulate,将ipv6的封包封装在ipv4的header里面。tunnel的end point(图示绿色通道的两端)必须明确的设定。 设置两个endpoint的ipv4的地址。

比如,设置ipv4 tunnel第一个router 对应的tunnel endpoint的ip地址:192.168.1.1, 对端router对应的tunnel endpoint的ip地址为192.168.2.1.

IPv6的封包,经过tunnel,打包成ipv4的封包(IPv6封包,添加一个ipv4的header),ipv6之间,透过ipv4的tunnel通信。

双向传输,只需要将两端tunnel的出口与入口设定好即可。

configured tunnel:基于人工设定。

Automatic Tunnel:自动设定,IPv6的地址中涵盖一个ipv4的地址。 ::140.114.1.101, 整体是一个128位的ipv6地址,左边的96位为0,右边是一个32位的ipv4地址。 这种地址称为IPv4 compatible IPv6地址。

如果router 发现这种IPv4 compatible IPv6地址,router就会将IPv4的地址放在最后32位,自动将该地址作为出口,作为tunnel的出口。

假设左边有一个dual-stack router, 对端有一个dual-stack node。 node的地址是一个特殊的ipv4 compatible ipv6地址。

从左边的IPv6 island 送封包到右边的 Dual-stack node, 左边的node 封包会将封包首先发给左边的router,destination ipv6地址位::140.114.1.101。

router收到该封包,发现目的ip是一个ipv4 compatible 的地址,router就会自动建立一个从该router到目的地的tunnel。

此时,router的出口会产生一个ipv4的header,router 转出来时,source ip为router 的ip:140.113.4.1, destination ip:::140.114.1.101, 从ipv6的地址中,萃取出ipv4的地址,放入ipv4 header。

host收到data后,会升为ipv6 header, router的目的只是让frame穿过ipv4网络。

希望让isolate的ipv6的地址/node,即ipv6的工作站,连在ipv4的网络上。

A/B/C是三个ipv6 host,它们连接在ipv4的网络上。 D链接在ipv6的网络上。如果有一个6over4的router,就希望它与外部ipv6的网络相容。

它希望ipv4的网络support ipv4 multicast,将ipv4的网络看作是local virtual link,将A/B/C三个host,一级两外的三个router,看作是建设在ipv4网络上面。ipv6的node架设在ipv4网络上,让ipv6的node可以互相通信。

如何将这些node/router形成一个group? IGMP协议。

如果做multicast,通常会建一颗mult-cast tree,丢一个封包,就沿着该树发给所有的member。 任何node发送data,就会沿着树丢给所有的member。

IPv6在6over4中,用了automatic tunneling,这个tunnel使用者不用管,由软体自动创建。

6over4的ipv6地址的prefix是特定的,link local。

host的ipv4地址变成ipv6网络上的interface id,放到最后32bit。

6over4的地址:prefix = FE80, 最后32位位IPv4地址; 即FE80::IPv4 address

ipv6 host产生的ipv6的封包一定要送给ipv4网络上,那么它的目的地址是谁?用IPv4的multicast address作为目的地址。

先用IGMP建立群组,使得所有的6over4 hosts通知ipv4 router,要求加入该群组。router收到IGMP join 信息

所有的multicast 群组内的成员都可以收到该封包,只有真正的目的地才会拆除ipv4 header,并处理ipv6封包。

如果通信的对象并不在multicast群组内,而是透过router链接到另外一端,只要一个ipv6 router,这个router本身执行6 over 4,参与了群粗,能够看懂该封包,就会帮忙建立tunnel endpoint,将封包转发到另外一个ipv6网络中去。

左边为ipv4网络,A/B/C为三个ipv6 host,接在ipv4网络上。并没有直接接到6over4 router上面。

A的IP  FE80::C080:0201, C080:0201就是ipv4地址192.168.2.1的16进制表示方式。由网络ipv4的地址,构造出ipv6的地址。

假设B要送封包给C,B/C均是ipv6 node,透过ipv4网络。B刚开始准备的是ipv6的封包,该封包的source ip/destination ip如下。 它用multicast技巧,先用multicast地址,自动在虚拟网络内广播,该封包为一个ipv4封包(原来ipv6封包的基础上再加一层ipv4 header),ipv4 header的source ip=192.168.1.1,destination ip为multicast 地址,该封包会沿着igmp multicast树送给群组的所有node,只有真正的目的地C收到封包才对该封包进行处理。

如果送的封包是IPv6 Multicast,比如IPv6找所有的router/neighbor时,会用到multicast

前面的例子:我们要发送的是IPv6 unicast,透过IPv4 multicast将封包丢出去。

本实例:发送的就是ipv6 multicast,如何利用ipv4的multicast,来发送ipv6的multicast?

如果将ipv6 multicast的message,tunnel进  ipv4的网络中时,一个很重要的点是ipv4的destination address,即ipv4的multicast的destination ip如何设置?用239.192.Y.Z, Y/Z为IPv6 multicast address的最后两个byte。

IPv6中发现FF02::2, 代表找所有的router,是一个multicast,IPv4 multicast 的destination ip:239.192.0.2

找所有的neighbor的multicast地址 FF02::1, IPv4 multicast 的destination ip:239.192.0.1

将IPv6的Multicast转成IPv4的multicast,然后传送。

A/B/C各自用IGMP join,形成一个IGMP multicast tree。可是对B而言,它并不清楚这个multicast tree上到底有哪些member,是自己主动加进去的。此时,B就会送一个neighbor discover的封包出去,寻找自己的虚拟的IPv6 neighbor(这个neighbor看起来是neighbor,但它是构建在ipv4网络之上,并非真正的ipv6网络)。

B出去找neighbor时,就会产生一个ipv6封包,该ipve封包的source ip为B的ipv6 ip, destination ip为FF02::1,

该IPv6封包丢到ipv4网络时,需要转化为ipv4的multicast封包,则IPv4 header的source ip为IPv6 ip的最后32位,destination ip位239.192.0.1. 群组里面的所有node都会收到该封包,并对该找neighbor的封包进行回应。

希望把独立的ipv6的domain,通过ipv4的tunnel,把它们链接起来。链接时使用了automatic tunnel,不需要认为设定。

将IPv4网络当作是一个point-to-point link layer

看到ipv6地址,就知道这个tunnel要建在哪里。

它将ipv4的destination ip嵌入到ipv6中,

IPv4出口的地址,潜入到ipv6地址中。2002:IPv4地址::/48   prefix长度位48(2001/16bit + IPv4 addr/32bit)。一个node就会有这样prefix长度为48位的ipv6地址。

ipv4潜入到ipv6地址中,使得router一看到ip就知道该把tunnel建在哪里。

IPv4的地址,用二进制换成ipv6的表达方式。

将192.168.2.1表达位C0A8:201

两边两个IPv6 station分别在各自的ipv6网络内。6to4 router看到该ip后,就会直接提取ipv4地址,把它们作为tunnel的两个端点(192.168.1.1/192.168.2.1)。

左边node prefix的前48位均一样。 右边同理,prefix前48位相同。

假设从最左边的host送到最右边,首先左边的host准备ipv6封包,其中source ip位自己的ipv6地址,destination ip为对端的ipv6地址。

6to4 router收到该封包后,会主动提取出ipv4地址,并利用该地址建立tunnel。其中,在tunnel上面走的封包会被6to4 router额外添加一个ipv4 header,其中该header的source/destination ip为刚刚提取出来的ipv4地址。

接收端的router收到封包后,会剥离ipv4 header,复原ipv6 header,并送到接收端。

该协议会比较简单,在接收到ipv6封包后,就知道如何提取ipv4地址,并且如何建立到对端的tunnel。

把一些dual stack node,在ipv4网络上传输。

ISATAP也是把ipv4网络当作ipv6网的link layer,一个虚拟的局域网


ISATAP router

把IPV4网络当作是IPv6 node之间的virtual link

IPv6中保留特定的bit(00:00:5E:FE)作为ISATAP的标志

最后32bit为IPv4地址。


以FE80开头的IPv6地址为自己产生的link local address

以3ffe开头的IPv6地址是router配给node的地址。


如果B要送给C,首先B准备IPv6封包,source ip为自己准备的FE80::5EFE:C080:0101,destination IP为C的IPv6地址。

这个封包要在IPv4网络中传输,就需要加一层IPv4 header,source IP为B的IPv4 source IP,destination IP为ISATAP router网关的IPv4地址(与B链接的ISTAP router网口IPv4地址)。封包经由ISATAP router收到封包后,拆除IPv4 header,然后由ISATAP router转给node C


NAT:很多direct的tunnel无法穿过NAT

Teredo:Miscrosoft提出,如何穿过NAT,用UDP(因为TCP需要建联线,实现起来比较复杂 )

IPv6封包,先包成UDP,然后穿过IPv4.

A传给B,A/B为IPv6 node,A在IPv4网络中,B在IPv6网络中。 NAT布止一层,可以是多层,nested NAT。同样,可以用这个service 穿过NAT,将封包从A送到B。

Teredo relay:用于转到另一个IPv6网络上。

三层打包

Prefix: 2001:0000 代表是Terodo

包public IPv4 and port number时,用的是反码(obfuscated),二进制1变0,0变1

192.0.2.45: NAT的public IP

65.54.227.120: Terodo server的public ip

A的IPv6地址:

Prefix=2001:0000

Terodo Server IP = 4136:e378 (65.54.227.120D = 41.36.e3.78H)

NAT IP = 3ffff:fdd2 (192.0.2.45 的十六进制表示的反码形式)

Port number = 63bf (假设port number=40000, (40000)D=(1001110001000000)B,反码=(110001110111111)B=(63BF)H)

flag = 8000

IPv6 host A to IPv6 host B

IPv6 Header: source-IP=2001:0:4136:e378:8000:63bf:3ffff:fdd2, destination-ip = 3ffe:ffff:0:1::1

IPv6 封包包成UDP,UDP port=40000

然后在包成IPv4,其中IPv4 source-IP=192.168.1.1,IPv4 destination IP=65.54.227.120, 该目标ip为Teredo router的ip。(该tunnel是从source host到teredo server之间的路径)

该封包送出去时,需要先经过NAT,NAT收到该封包以后,IPv6封包内容不变,将IPv4 header的source IP换成NAT Server的public IP,192.0.2.45. destination ip不动。

teredo server收到该封包后,拆除ipv4 header,udp header,然后根据IPv6 header转发给host B。


从B到A,首先由B准备好IPv6封包,其中source IP为自己的IPv6地址,destination IP为A的IPv6地址。

Teredo server收到B的封包后,会添加一层IPv4的header,其中source IP为Teredo server的IP, desinaiton IP为NAT server的public IP。

NAT server收到从teredo server发来的封包,会保持source ip不动,destination ip为host A的ipv4地址。 然后根据UDP port number来区分是哪个applicaiton。

家里的host一般都是透过NAT router自动获取ip上网,这些均在teredo server后端。

如何在本地host产看自己的Teredo tunnel信息?如何透过teredo的IPv6地址信息,获取子的的teredo server ip,NAT ip,port number?

http://www.wyae.de/docs/ipv6calc/

透过以上网页,将teredo ipv6地址输入,就可以获取。

Server: Teredo server的ip

Client:NAT的ip

Port:Port Number

6to4 tunnels:根据IPv4的地址,提供IPv6的表达方式。同样也可以用IPv6地址,获取IPv4的表达方式。

如果手工设定时,loading会很大。 对于一个ipv6 beginner,做这样的设定也会很难。如果由一个这样的tunnel broker,在使用与管理上也会方便不少。

透过tunne broker,任何人想建立tunnel,就把requrest交给server,由server 自动处理。方便一般人员/大众方便使用ipv6网络。

IPv4必须是routable,public ip,不可以在NAT后面。

右边IPv6的ISP会建立IPv6 Tunnel broker(有一堆tunnel server),DNS

左边是Client,tunnel broker会找到一个适合的tunnel server,建立tunnel,让client与IPv6的网络沟通。

www.ipv6.org上面有列名全球所有的Tunnel broker的清单,如:tb.cht.com/tb.aaa.com

如果Client要使用Tunnel Broker的服务,第一步需要到tunnel broker的入口,www.ipv6.org查看tunnel broker清单,决定使用哪家ISP企业的服务,然后与对应的tunnel broker链接。

首先,Client给tunnel broker提供自己的ipv4地址,nick name,IPv6 OS type给tunnel broker,提供方式基于client与tunnel broker的链接方式,比如http,https,。。。

Tunnel broker在收到client的请求之后,会设定DNS server,查询。 然后回复client,等一下应该去找谁。

即 Tunnel broker收到client的请求之后,会自动设定DNS server,设定client,设定Tunnel Server。设定本身可以透过多种方式,比如透过DHCPv6 重新分配IP地址,SNMP等等。

设定完之后,就会自动建立一条从client到tunnel server的tunnel,透过tunnel server, clinet就可以访问很多IPv6的站点。

使用这些tunnel broker,可能需要安装ISP对应的client端的软体。

以中华电信的HiNet为例。

安装gogo6 runnel broker软体gogoCLIENT utility

输入Tunnel Server的IP

输入user name/password:确定是不是中华电信的用户。

该设定只需要一次即可。

IPv4 header/IPv6 header互相转换

stateless:让没有IPv4地址的IPv6 hosts,自然的跟IPV4 host通信。

NAT:会记录穿过去是IPv4/IPv6地址之间的对应关系。 SIIT不会记录。

ICMPv4/ICMPv6 header直接相互转换。

IPv4/IPv6 header直接相互转换。

当左边的网络既有IPv4 host,又有IPv6 host时,也时候用SIIT做IPv4/IPv6的转换。

SIIT本身会有一个IPv4 pool,在转换过去后用哪个IPv4地址来表达原来的IPv6地址。

Sensor:本身只有IPv6地址,没有记录IPv4地址,则很适合用SIIT

转换时,尽量保留原来的checksum值。 保留TCP/UDP checksum

Translatable source address从IPv4 pool中取得。


NAT-PT:不仅仅会转换IP地址,还会使用到port number

维护一个IPv4/IPv6 mapping 表,类似于ipv4网络中的NAT

上面的IPv4 source/destination 地址会转换为下面的IPv6 source/destination地址,同时会维护这个IPv4/IPv6对照表。

会有两个网络,左边为ipv6网络,右边为ipv4网络,中间是translator。

透过Translator,如何让IPv6网络中的IPv6 host访问IPv4网络中的IPv4 host?


IPv6/IPv4网络,均没有dual stack的概念,纯IPv4/纯IPv6。

发送与接收必须经过同一个NAT-PT router。不允许发送与接收经过不同的router,否则无法一一对应。

NAT-PT只解决IPv4网络与IPv6网络的链接,不解决Dual-stack node

左边IPv4 host如何访问右边的IPv6 网站:www.gsnc6.tw?

IPv4网中的DNS Server:140.114.15.15

IPv6网中的DNS Server:2001:288::2

DNS Stack Mapping:记录右边的DNS Server在跟左边的IPv4网络链接时用的IPv4地址:140.114.134.184/ IPv6:2001:288::2, 即对于IPv4网络来说,右边IPv6网络中的DNS Server看起来IP是140.114.134.184

1> 首先,左边的host会问自己的IPv4 DNS,自己要访问的目的地 www.gsnv6.tw对应的ipv4地址是什么。

2> 左边的IPv4 DNS Server收到请求后,发现该网址属于IPv6,不属于自己的domain,就会想办法把这个Domain name query (查询封包)送给Translator,然后通过translator到达右边的IPv6 DNS。IPv6的DNS Server地址140.114.134.184, 准备好封包,source 为IPv4 DNS地址140.114.15.15,目的地为右边IPv6 DNS所对应的IPv4地址140.114.134.184。

3>Translator收到该封包后,转发,转发时,ip地址会转化为ipv6地址。抓发出来的IPv6封包,DA=2001:288::2, IPv6 DNS 的IPv6地址。source IP为 aaaa::140.115.15.15 (Prefix aaaa::/96 加上左边IPv4 DNS的IPv4地址。)

4>右边的IPv6 DNS收到请求后,会向目的地 www.gsnv6.tw 查询对应的IPv6地址,2001:288::1。

5>右边的IPv6 DNS收到查询结果后会回传给Translator

6>Translator会查询之前有没有做过IPv4/IPv6的mapping,如果没有,则重新mapping,如果有,则使用之前的mapping。此例,之前没有对2001:288::1 处理过,因而,重新找了一条IPv4地址与2001:288::1对应。该ipv4地址为:140.114.134.180. Translator就会以该对应为参考,

7> Translator回信息,说目的地www.gsnv6.tw的IP地址是140.114.134.180


8> IPv4 Host准备封包,source IP为自己,140.114.165.141, destination IP为140.114.134.180。然后透过IPv4网络传给Translator

9> Translator收到以后,会给IPv4 的source ip添加aaaa::/96的prefix,变为IPv6格式, destination IP依照对照表,使用真正的destinaiton IP (www.gsnv6.tw/2001:288::1)

本实例只是从IPv4端发起链接,到达IPv6,只要建立好之后,IPv4 host就可以与IPv6 host双向通信

假设,相反,从IPv6端发起请求,建立链接。

假设右边的host为:www.gsnc6.tw/2001:288::1

左边的Server为:cs.nthu.edu.tw/140.114.165.141

1> 首先,右手边的host会问自己的IPv6 DNS,自己要访问的目的地 cs.nthu.edu.tw对应的ipv6地址是什么。

2> 右手边的IPv6 DNS Server收到请求后,发现该网址属于IPv4,不属于自己的domain,就会想办法把这个Domain name query (查询封包)送给Translator,然后通过translator到达左边的IPv4 DNS。

最右边IPv6转发出来的封包,source IP为自己的IPv6地址2001:288::2,目的地址为aaaa::140.114.15.15(compatible IPv6 address),这个封包就会透过translator,丢给左边的IPv4 Domain Name Server。

3>Translator收到该封包后,转发,转发时,根据DNS Static Mapping,将封包转给IPv4网络。 ip地址会转化为ipv4地址。该IPv4地址的Destination: IPv4 DNS 140.114.15.15,源地址为:140.114.134.184(根据static mapping得到),该source为IPv6 DNS的地址。

4>左边的IPv4 DNS收到请求后,会向目的地 cs.nthu.edu.tw 查询对应的IPv4地址,140.114.165.141。

5>左边的IPv4 DNS收到查询结果后会回传给Translator

6>Translator将140.114.165.141的ipv6表达方式回传(aaaa::140.114.165.141)。 接下来就开始送封包。

7> 假设从右边送到左边,右边的IPv6 host就会准备封包。source IP:2001:288::1(host自己的IPv6地址),目的IP:aaaa::140.114.165.141(IPv4地址添加prefix后的ipv6表现形式),丢给translator

8> Translator收到封包后,做对照转换,之前有没有建立过IPv4/IPv6对照表? 刚才只是查询,还没有真正的做数据传输,因而需要重新建表。 从IP address pool中找一个IPv4地址,比如140.114.134.180与2001:288::1进行对照。

9> 对照表建好后,就将该封包转到IPv4网络。此时封包就换成ipv4 header, IPv4 source: 140.114.134.180, destination: 140.114.165.141(拿掉prefix)

mapping表建立完成后,就可以透过translator双向传送。

Client请求的数据,会透过Reverse Proxy,发给internel network的相应server,internel network server回复给client的回应信息,也会透过Reverse Proxy回送给Client。 对于client而言,它的感觉就是,它至于Reserve Proxy server进行交互就可以获取相应的信息。

Reverse proxy的好处:

1.隐藏内部server。 client并不知道内部网络的结构,内部有哪些server等等。

2. Reverse proxy的application firewall feature, 能够保护免于常用的基于网络的攻击。没有它,则会使的删除病毒软件比较困难

3. 让web server的设计/安装比较安全。可以让SSL加解密让Reverse Proxy来做,减轻web server的负担。 Reverse proxy通常通过一个加密解密的硬件加速卡来实现。

4. 负载均衡

如果reverse proxy用于ipv4/ipv6的转换,可以用于链接IPv4/IPv6网络。

要实现这个功能,IPv4 WEB Server DNS设定,需要保留两条记录。

原来的IPv4地址

IPv6地址,即Reverse Proxy的地址。

这样,如果IPv6 host实现与IPv4 网络的链接,首先在IPv6中找到Reverse Proxy的IPv6地址,然后透过Reverse Proxy,与IPv4网络通信。

1. 首先,IPv6 only Host向IPv6 DNS发出查询请求,www.gsn.tw对应的IPv6地址是什么

2. IPV6 DNS回复IPv6 only Host,告诉它地址为 2001:c50:ffff:1::2. 其中,2001:c50:ffff:1::2为reverse proxy server的网卡ip地址。

3. IPv6 only host会向Reverse Proxy server发同步信息,用于与目的端建立链接。然后reverse proxy server也会回复IPv6 only host,建立链接。

4. 建立链接后,Reverse Proxy Server就会准备IPv4封包,其中source IP为reverse proxy server网卡的IPv4地址 192.0.2.45, 目的地址为74.125.31.94. 将数据转发给IPv4 only host

这样,透过reverse proxy,就可以让ipv6的host访问ipv4 的web service。

// 如果是IPv4 only host与 IPv4 only web server 建立链接,则直接透过ipv4网络链接。

// 如果是IPv4/IPv6 dual stack host,位于IPv6网络中,要访问IPv4网络中的IPv4 only web server,怎么办?

1. 向IPv6 DNS请求,获取Reverse Proxy的IPv6地址

2. 与Reverse Proxy Server建立连线。此处,web server ipv6的地址,实际上就是reverse proxy server的ipv6地址。

3. 透过Reverse Proxy Server与IPv4 only webserver 通信   

不管需求来自哪里,都是透过Reverse proxy ip来做出响应/回复,无法得知真正的client ip是什么。

这里,(192)D = (C0)H  十进制转16进制

2.1 --》 201

潜入了ipv4的ipv6地址

封包过去时,会自动抓一个ip进行对应。返回时,进行查表

IPv6 to IPv4,不是一一对应的。 而是多对一


1. 首先,IPv6 host会问DNS64,www.gsn.tw的ipv6地址是什么。 DNS64收到该请求后,会转给IPv4网络上的DNS,告诉目的地www.gsn.tw的IP是192.0.2.1

2. DNS64收到后,回答ipv6 host的query时,回复一个ipv4 embeded ipv6 address。 64:ff9b::C000:0201

3. IPv6得到目的ip之后,就会构建封包,想办法与得到的ipv6地址建立连线,这个位置送给NAT64.

4. NAT64 router收到后,就会直接将该地址转为ipv4地址,转发给真正的目的地www.gsn.tw(转发ipv4封包的源IP为192.0.2.45/NAT64 router网卡的ipv4地址,目的地为www.gsn.tw的IP地址192.0.2.1),

哪些设备已经implement了NAT64?


PLAT: Provider translation, 用于IPv6 to IPv4

CLAT: Client/Custome Translation,用于IPv4 to IPv6

只需要一小部分IPv4地址即可。可用于有线网,更适合于无线网。

电信网:跑IPv6 

手机上的application:基于IPv4

Service provider(Server):基于IPv4

CLAT:部署于router/mobile phone中。不再需要DNS64与port mapping。

手机终端上获取的ipv4,为private ip

private IPv4 ---》 public IPv6  -----》 Public IPv4

假设最左边为client,最右边为IPv4 Server

最左边的IPv4 node 可能是电脑,也可能是手机,其ip为private ip。

1. 左边,node送出一个封包,其中souce ip为自己的ip 192.168.1.2, destination ip为server ip:198.51.100.1(假设该ip已经透过DNS得到)

2. 将该封包送给CLAT,做了stateless translation, 将ipv4地址作为ipv6地址的后32位(ipv4 embeded ipv6),前面为从网络上得到的prefix。source/destinaiton ip处理方式类似。只是prefix可能不同。 新的ipv6封包就会被送给PLAT

3. PLAT收到该封包后,会做一个mapping,mapping为public ipv4地址。source=192.0.2.100/destinaiton=198.51.100.1

回来的时候怎么办? (IPv4 public  -》IPv6 -》IPv4 private)

回来时,PLAT会是stateful的,基于原来相同的对照表。

JPIX:日本的互联网交换中心

2012年,有16个ISP加入。

Android 手机,implement了一个CLAT demon,运营商/router 有部署PLAT

中间的运营商,carrier ipv6 network,无论是有线还是无线。

这样,ipv4 application就需要知道ipv6 applicaiton怎么使用,就可以自动部署到ipv6网络上。



猜你喜欢

转载自blog.csdn.net/f2157120/article/details/80994387