IPv4与IPv6编程-共15张课件

PPT
  • 阅读 110 次
  • 下载 0 次
  • 页数 15 页
  • 大小 463.000 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档10.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
IPv4与IPv6编程-共15张课件
可在后台配置第一页与第二页中间广告代码
IPv4与IPv6编程-共15张课件
可在后台配置第二页与第三页中间广告代码
IPv4与IPv6编程-共15张课件
可在后台配置第三页与第四页中间广告代码
IPv4与IPv6编程-共15张课件
IPv4与IPv6编程-共15张课件
还剩5页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 15
  • 收藏
  • 违规举报
  • © 版权认领
下载文档10.00 元 加入VIP免费下载
文本内容

【文档说明】IPv4与IPv6编程-共15张课件.ppt,共(15)页,463.000 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-45389.html

以下为本文档部分文字说明:

第7章IPv4和IPv6编程•知识点:•IPv4和IPv6服务器的工作原理•IPv6如何为IPv4客户端服务•IPv6地址测试宏与IPv6套接口选项IPv4客户与IPv6服务器•拥有双重协议栈的主机的一个基本持性是:其上运行的IPv6服务器既能应付IPv4客户,又能应付IPv6客户。这是

通过使用IPv4映射的IPv6地址实现的。••IPv4TCP客户与一个IPv6服务器之间讲行通信的步骤。•(1)启动IPv6服务器,创建一个IPv6的监听套接口,我们假定该套接口绑定了通配地址。•(2)IPv4客户调用gethostbynam

e找到一个与该服务器对应的A记录。因为这台服务器主机同时支持IPv4和IPv6,所以它应该既有一个A记录,又有一个AAAA记录,但IPv4的客户只需要一个A记录。•(3)客户进程调用connect,客户主机向服务器发送一个IPv4的S

YN。•(4)服务器主机收到这个发往IPv6监听套接口的IPv4SYN,置一个标志,表明这个连接使用IPv4映射的IPv6地址,然后响应一个IPv4的SYN/ACK。当这个连接建立后,accept返回给服务器的地址就是这个IPv4映射的IPv6地址。•(5)在客户和服

务器之间的所有通信使用IPv4数据报。•(6)除非服务器明确地去检查这个IPv6地址是不是一个IPv4映射的IPv6地址(使用IN6_IS_ADDR_V4MAPPKD宏),它将不会知道通信的对方是一个IPv4客户。双重协议栈屏蔽

了这个细节。同样,IPv4的客户也不知道与之通信的是一个IPv6的服务器。•对于一个IPv6的UDP服务器来说,情形是类似的,只需将每个数据报改变一次地址格式。例如一个IPv6服务器收到从IPv4客户发来的数据报,于是由r

ecvfrom返回的地址将是该客户对IPv4映射的IPv6地址。同时服务器用这个映射的地址调用sendto对客户的请求作出响应。若是IPv6客户,则地址为IPv6地址,而不是映射后的地址。在此UDP服务器问题得到解决。•下面来看当一个双重协议栈主机接收到数据时的处理,根据接收套接口的类

型(TCP或UDP)对一个收到的IPv4或IPv6数据报进行如图7-2所示的处理。IPv6客户与IPv4服务器•(1)如果IPv4的TCP客户调用connect时或IPv4的UDP客户调用sendto时指定的是一个IPv4地址,不需要作任何特殊处理。•(2)如果IPv6的TCP客户

调用connect时或IPv6的UDP客户调用sendto时指定的是一个IPv6地址,不需要作任何特殊处理。•(3)如果IPv6的TCP客户调用connect时或IPv6的UDP客户调用sendto时指定的是一个IPv4映射的IPv6地址,内核会检测到这个映射地址,并发送一个IPv4数据报,而

不是IPv6数据报。•(4)IPv4客户不能在调用connect或sendto时指定一个IPv6地址,因为在IPv4的sockaddr_in结构里的4字节的in_addr结构中放不下一个16字节的IPv6地址。•通过以上处理,也可以使IPv6客户与IPv4服务器通信,

这就达到了从IPv4过渡到IPv6的目的。IPv6_ADDRFORM套接口选项•为什么要学习IPv6_ADDRFORM套接口选项呢?这得从它的功能说起,IPv6_ADDRFORM套接口选项能把一个套接口从一种类型

转变成另一种类型。那为什么要转变地址格式呢?目的是在UNIX上文件描述字可以在进程之间进行传递,而最通常传递的方式就是通过fork来实现。•假设进程创建了一个IPv4的监听套接口,然后接收到一个来自IPv4客户的连接。该服务器调用fork和

exec,启动一个新程序处理客户请求。这个过程同以前介绍的并发服务器的唯一不同是将已连接套接口复制到事先约定的描述字,然后调用exec。但被加载的新程序期望一个这是IPv6套接口,而不是IPv4套接口,因此可以用IPv6_ADDBFORM套接口选项来转换该套接口的地址格式,如下

:•1.intaf;•2.socklen_tclilen;•3.structsockaddr_in6cli;/*IPv6struct*/•4.structhostent*ptr;••5.af=AF_INET6;•6.Setsockopt(

STDIN_FILENO,IPPROTO_IPV6,IPV6_ADDRFORM,&af,sizeof(af));••7.clilen=sizeof(cli);•8.Getpeername(0,&cli,&clilen);•如果用IPv6_ADDRFORM作

参数来调用getsockopt,返回值依赖于套接口地址的格式,将为AF_INET或AF_INET6。getsockopt和setsockopt的第二个参数可以是IPPROTO_IP或IPPROTO_IPV6。IPv6地

址测试宏•为测试IPv6地址的某些持性我们定义了总共12个宏来达到这个目的,如下:•#include<netinet/in.h>••intIN6_IS_ADDR_UNSPECIFIED(conststructin6_addr*aptr);•intIN6_IS

_ADDR_LOOPBACK(conststructin6_addr*aptr);•intIN6_IS_ADDR_MULTICAST(conststructin6_addr*aptr);•intIN6_IS_ADDR_LINKLOC

AL(conststructin6_addr*aptr);•intIN6_IS_ADDR_SITELOCAL(conststructin6_addr*aptr);•intIN6_IS_ADDR_V4MAPPED(conststructin6_addr*aptr);•intIN6_IS_ADDR_V

4COMPAT(conststructin6_addr*aptr);••intIN6_IS_ADDR_MC_NODELOCAL(conststructin6_addr*aptr);•intIN6_IS_ADDR_MC_LI

NKLOCAL(conststructin6_addr*aptr);•intIN6_IS_ADDR_MC_SITELOCAL(conststructin6_addr*aptr);•intIN6_IS_ADDR_MC_ORGLOCAL(con

ststructin6_addr*aptr);•intIN6_IS_ADDR_MC_GLOBAL(conststructin6_addr*aptr);•返回值:若非零表示IPv6地址是指定类型的,否则返回0。源代码的可移植性•将gethostbuname()和get

hostbyaddr()调用删除,转而使用getaddrinfo()和getnameinfo()函数。docin/sanshengshiyuandoc88/sanshenglu更多精品资源请访问

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?