zoukankan      html  css  js  c++  java
  • 1、简介(2)

    1、协议无关性

     上一节的程序只能在IPv4上运行,因为我们分配并初始化一个sockaddr_in类型的结构,把该结构的协议族成员设置为AF_INET,并指定socket函数的第一个参数为AF_INET

    为了使之能在IPV6上运行,则将上面程序修改如下,

    如何在redhat上打开IPV6

    http://www.jb51.net/LINUXjishu/206836.html

    这篇文章主要介绍了Linux下配置IPv6地址的方法,需要的朋友可以参考下
     

    Linux在内核版本2.2.0以后就支持IPv6了,可查看/proc/net/if_inet6文件是否存在以确定你的系统是否支持IPv6  如果没有,可尝试如下命令加载IPv6模组: 
    # modprobe ipv6 
    成功加载后就可以使用IPv6环境了,系统会自动获得IPv6地址。 
    IPv6相关命令: 
    # ifconfig eth0 inet6 add 2001:da8:2004:1000:202:116:160:41/64 (手工添加配置固定IPv6地址)  # route -A inet6 add default gw 2001:da8:2004:1000::1 (添加默认路由)  # ping6 ipv6.scau.edu.cn  PING ipv6.scau.edu.cn(2001:da8:2004:1000:202:116:160:48) 56 data bytes  64 bytes from 2001:da8:2004:1000:202:116:160:48: icmp_seq=0 ttl=64 time=0.020 ms  64 bytes from 2001:da8:2004:1000:202:116:160:48: icmp_seq=1 ttl=64 time=0.019 ms  64 bytes from 2001:da8:2004:1000:202:116:160:48: icmp_seq=2 ttl=64 time=0.014 ms  这个显示表明IPv6已配置成功。 
    Linux设置isatap隧道配置IPv6  Linux 设置如下:  ip tunnel add sit1 mode sit remote 192.168.253.49 local a.b.c.d  ifconfig sit1 up  ifconfig sit1 add 2001:da8:2004:2301:0:5efe:a.b.c.d  route -A inet6 add ::/0 fe80::5efe:192.168.253.49  注意: 上面的 a.b.c.d 请使用你的真实IPv4地址代替 
    配置好之后 ifconfig后应该看到一个2001:da8:2004:2301 为前缀的v6地址,hostid为5efe:a.b.c.d,其中a.b.c.d为你的真实的IPV4地址。
    以下补充内容:
    Debian

    复制代码
    代码如下:
    vi /etc/network/interfaces # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8) # The loopback interface # automatically added when upgrading auto lo iface lo inet loopback auto eth0 iface eth0 inet6 static    address 2001:da8:2:10d::2    netmask 64    up route -A inet6 add default gw 2001:da8:2:10d::1 dev $IFACE iface eth0 inet static    address 58.1.4.74    netmask 255.255.255.0 up route add default gw 58.1.4.1 dev $IFACE 

    Redhat CentOS Fedora

    复制代码
    代码如下:
    [root@server4 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 # Broadcom Corporation NetXtreme BCM5704 Gigabit Ethernet DEVICE=eth0 BOOTPROTO=none HWADDR= 00:09 :3D:22:E1:40 IPADDR=202.120.1.1 NETMASK=255.255.255.240 ONBOOT=yes GATEWAY=202.120.1.254 TYPE=Ethernet USERCTL=no IPV6INIT=yes PEERDNS=yes IPV6ADDR=2001:da8:8003:801:202:120:1:1

    静态默认网关设置

    复制代码
    代码如下:
    [root@server4 ~]# vi /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=yes HOSTNAME=server4 GATEWAY=202.120.1.254 IPV6_DEFAULTGW=2001:da8:8003:801::1%eth0 
    上面代码的运行没有成功,在于没有输入正确的ipv6的服务器地址
    2、错误处理:包裹函数
    在任何现实世界的程序都必须检查每个函数调用是否返回错误。当发生错误时,就调用我们自己的err_quit或err_sys函数输出一个出错消息并终止程序的运行。我们可以通过定义包裹函数来缩短程序。每个包裹函数完成实际的函数调用,检查返回值,并在发生错误时终止进程。我们约定包裹函数名是实际函数名的首字母大写形式。如
    sockfd = socket(AF_INET,SOCK_STREAM,0);它的包裹函数如下
    int Socket(int family,int type,int protocol)
    {
      int n;
      if((n=socket(family,type,protocol))<0)
                  err_sys("socket error");
      return (n);
    }
    Unix errno值
    只要一个Unix函数(例如某个套接字函数)中有错误发生,全局变量errno就被置为一个指明该错误类型的正直,函数本身则通常返回-1。err_sys查看errno变量的值并输出相应的出错消息,例如当errno值等于ETIMEDOUT时,将输出“Connection timed out”(连接超时)。
    errno的值只在函数发生错误时设置。如果函数不返回错误,errno的值就没有定义。errno的所有正数错误值都是常值,具有以“E”开头的全大写字母名字,并通常在<sys/errno.h>头文件中定义。值0不表示任何错误。
    在全局变量中存放errno值对于共享所有全局变量的多个线程并不适合。
    书中诸如“connect函数返回ECONNREFUSED”这样的句子简明表达以下意思:该函数返回一个错误(通常函数返回值为-1),同时errno被置为指定的常值。
     
    一个简单的时间获取服务器程序
    这个服务器函数可以与上一节的客户程序一起使用!!
    程序如下:
    为什么会这样???
    OSI模型
    描述一个网络中各个协议层的常用方法是使用国际标准化组织(ISO)的计算机通信开放系统互联(OSI)模型
     
    为什么套接字提供的是从OSI模型的顶上三层(网际协议的应用层)进入传输层的接口?这样设计有两个理由,理由一:是顶上三层处理具体网络应用(如FTP、Telnet或HTTP)的所有细节,却对通信细节了解很少;底下四层对具体网络应用了解不多,却处理所有的通信细节:发送数据,等待确认,给无序到达的数据排序,计算并验证校验和,等等。理由二是顶上三层通常构成所谓的用户进程,底下四层却通常作为操作系统内核的一部分提供。Unix与其他现代操作系统都提供用户进程与内核的机制,由此可见,第4层和第5层之间的接口是构建API的自然位置。
     
    BSD网络支持历史
     
    测试用网络及主机
    网络拓扑的发现
    1)netstat -i 提供网络接口的信息;-n标志以输出数值地址,而不是试图把他们反向解析成名字。
    2)netstat -r 展示路由表,也是另一种确定接口的方法。通常指定-n标志以输出数值地址,它还给出默认路由器的IP地址。
    3)有了各个网络接口的名字,执行ifconfig就可获得每个接口的详细信息。
    4)找出本地网络中众多主机的IP地址的方法之一是,针对从上一步找到的本地接口的广播地址执行ping命令。
    ping -b 192.168.1.255
     
    Unix标准
    POSIX(可移植操作系统接口)是Portable Operating System Interface的缩写。它并不是单个标准,而是由IEEE(电气与电子工程师学会)开发的一系列标准。
    最后一个标准是在2000年被认可的IEEE Std 1003.1g:Protocol-independent interfaces(PII)。它是联网API标准,它定义了两个API,并称他们为详尽网络接口(Detailed Network Interface,DNI)。
    DNI/Socket,基于4.4BSD的套接字API。
    DNI/XTI,基于X/Open的XPG4规范。
     
    开放团体的背景
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    IOS7 About
    iOS Newsstand Tutorial
    微信开发商
    网络流量监控相关资料
    EDM about
    thinkphp验证码的实现
    thinkphp表单上传文件并将文件路径保存到数据库中
    thinkphp分页实现
    linux 系统简单备份
    Google Hacking总结
  • 原文地址:https://www.cnblogs.com/gary-guo/p/5977718.html
Copyright © 2011-2022 走看看