Linux如何设置IPv6地址

IPv6最终全面取待IPv6是不可逆的潮流。本文则讲一下在Linux下如何配置IPv6地址。当然本文假设你使用静态IP(不必是公共IPv6地址或公共IPv4地址,可以是私有IPv4地址)。本文不适用使用DHCP获取地址的情况。 首先,你要确保你使用的Linux的内核已经支持IPv6。当前比较新的Linux都已经内建IPv6了。 用root用户登录,运行: # lsmod | grep ipv6 看看系统有没有已经加载了IPv6模块。如果没有,尝试用以下命令加载: # /sbin/modprobe ipv6 第二,你需要有你的静态IP地址。 **IPv4地址如何转成IPv6地址呢?**如果你的IP是一个IPv4地址,那么可以换算得到IPv6的地址形式。比较简单的作法可以去到 http://grox.net/utils/ipv6.php。在左边的下拉列表中选择: IPv4 to 6to4 Address,在右边的编辑框中填上你的IPv4地址。点击: Calculate 则得到了你的IPv4地址的IPv6转化格式。 配置IPv6地址 一般的Linux发行版用 /etc/network/interfaces 文件配置网卡。如果没有这个文件,那么请注意 /etc/network 目录下其它文件或者目录。 假如要配置的Linux的静态IPv4地址是 192.168.1.10,这个IPv4地址转换成对应的IPv6地址则是 2002:c0a8:10a:: 。再提醒一下,上文提到过如何把IPv4地址转成IPv6地址。 网关的IPv4地址是 192.168.1.1,这个IPv4地址转成对应的IPv6的地址是:2002:c0a8:0101:: 。 那么 /etc/network/interfaces 文件应该配置成如下: #IPV6 static configuration(我是注释) iface eth0 inet6 static pre-up modprobe ipv6 address 2002:c0a8:10a:: netmask 64 gateway 2002:c0a8:0101:: 注意 “pre-up” 命令。这一行保证系统在启动的时候加载支持ipv6的模块。 最后重新启发动网络,如下: # /etc/init.d/networking restart 你现在可以使用你的IPv6地址了。 测试IPv6地址: 检测路由: # ip -6 route show 如果IPv6工作正常的话,应该会有如下的提示。 2002:c0a8:0100/64 dev eth0 proto kernel scope link src 2002:c0a8:10a ...

July 1, 2012 · 1 min · kamus

Unix网络编程.第九章笔记

# TCP 协议在1981年标准化,而SCTP协议则是在2000年由IETF组织标准化。IETF: Internet Engineering Task Force 互联网工程任务组成立于1985年。 # SCTP支持两种类型的socket. one to one(为了方便现有的tcp程序迁移到sctp) 和 one to many. # sctp的sctp_bindx可以绑定多个地址,并且可以动态增删。但动态增删不影响已经存在的associations.不过各个unix分支不一定支持这个特性。 # sctp_getpaddrs和sctp_getladdrs分别是getpeername和gethostname的sctp版。They are designed with the concept of a multihoming aware transport protocol. # sctp传输的报文是有边界的。sctp在传输层支持传输超大的message.

December 17, 2011 · 1 min · kamus

Unix网络编程.第七章笔记

1. 有一个 Generic Socket Option:SO_BROADCAST 用来开启是否充许广播。2. 仅有TCP支持SO_DEBUG。Kernel把详细的发送包的接收包信息存在一个环路buffer里。可以用trpt查看它。3. SO_ERROR套接字选项只能被取得,不能被设置。如果进程阻塞在select调用里,不论是读还是写,select都会返回conditions set。如果进程使用signal-driven I/O,则SIGIO信号会被发到这个进程或者它所在的进程组。进程用getsockopt得到so_error后,so_error就会被重置为0.如果so_error不为,此时调用 read 或者 write 就会立即返回-1,errno被置为so_error的值。     4. SO_KEEPALIVE在一个tcp连接没有任何收发达两个小时时会发一个prob给对方。两个钟喔。好长的时间啊!!!Richard Stevens认为SO_KEEPALIVE应该改叫 make-dead。大多Unix的kernel把这个两小时时长存为一个系统级的变量。这意味着如果你用某种方法改变了这个时长,会影响这个操作系统的所有socket.Richard Stevens认为想把这个时长改短的想法是错误理解了这个选项的意义。 5. SO_LINGER仅仅适用于面向连接的socket,比如TCP和SCTP,因此不适用UDP。 Struct linger{ int l_onofff; int l_linger; }; L_onoff为零是,close的behavior就是默认情况:close立即返回,kernel继续发送缓冲区内未发送的数据。当l_onoff不为零,而l_linger为,TCP协议则会立即终止连接,发送RST给peer端,这样做避免了TCP的TIME_WAIT状态,这样的坏处是: leaves open the possibility of another incarnation of this connection being created within 2MSL seconds and having old duplicate segments from the just-terminated connection being incorrectly delivered to the new incarnation.对于SCTP, 也会发送一个ABORT chunk给peer.第三种情况:如果l_onoff为真,l_linger不为0.则close不会立即返回,会最多等待指定的时长,在这段时间里kernel发送缓冲区内的数据给peer。如果在这段时间内发送完则close返回0.如果没有发送完毕,close就会返回EWOULDBLOCK,send buffer里的数据会被丢弃。 6. MSL: maximum segment lifetime. 7. 因此close默认情况下立即返回,即使用SO_LINGER设置等待时间也在理论上存在close先于发送缓冲区的数据被peer端acknowleded的情况。因此一个更好的解决方案是用shutdown系统调用with a second argument of SHUT_WR。在调用shutdown后,用read调用直到read返回,即收到peer端的FIN。 8. UDP没有congestion control,如果发得太快,不仅仅peer端来不及收。A fast sender can overwhelm its own network interface, causing datagrams to be discarded by the sender itself. 9. 因为tcp在三次握手阶段的SYN segment里交换窗口大小(windows scale)。所以tcp的接收缓冲大小必须在shank hands之前就设置好。Connected socket从listening socket继承这个选项。 10. TCP的套接字缓冲区大小至少需要是4倍MSS的大小。这里指的套接字缓冲,如果是针对单向的传输,比如单向传一个文件,指的是发送方的发送缓冲和接收方的接收缓冲。如果是双向的传输,则指的是双方的接收和发送缓冲。为什么tcp套接字的缓冲区需要至少   是4倍MSS的大小呢?这是因为tcp的快恢复(fast recovery)算法。快恢复算法定义:如果接收端连续收到三个同样的ACK,就认为有packet丢失了。而接收端在segment丢失后,每收到新的segment就不停地重发一个重复的ack给sender。如果窗口大小小于4个segments,就不会有三个重复的ACK,所以快恢复算法就没办法工作了。 11. What is bandwidth-delay product. A: The capacity of the pipe is called the bandwidth-delay product and we calculate this by multiplying the bandwidth(in bits/sec) times the RTT(in seconds), converting the result from bits to bytes. 即网速乘上RTT. 12. UDP没有send buffer,但有一个send buffer size.只要socket的buffer size大于LO_WATER,就永远是可写的。 13. SO_REUSEADDR有四种用途。好难写。见Unix Network Programming Section 7.5 影印版第211页啦。 14. It's Ok for the MSS to be different in each direction. 15. Nagle算法是为了减少small package的数量.The algorithm states that if a given connection has outstanding data, then no small packets will be sent on the connection in response to a user write operation until the existing data is acknowledged. Small package 指的是任何比MSS小的package. 16. Delayed ACK algorithm: This algorithm causes TCP to not send an ACK immediately when it receives data; instead, TCP will wait some small amount of time (typically 50-200ms)and only then send the ACK. 17. SCTP有一个SCTP_AUTOCLOSE套接字选项。This option allows us to fetch or set the autoclose time for an SCTP endpoint. The autoclose time is the number of seconds an SCTP association will remain open when idle.即SCTP association能够保持空闲状态的最长时间。超时就会被关闭。

December 15, 2011 · 1 min · kamus

tcpdump基础教程

英文原文出自: A tcpdump Tutorial and Primer 翻译: ykyi.net Tcpdump是信息安全专业人士最重要的一个网络分析工具。对这个工具有一个深入的理解对于每一个喜欢透彻理解tcp/ip协议栈的人来话都是必须的。但很多人选择一个更高级别的工级,比如Ethereal Wireshark,但是我认为这是一个错误! 不应该机械的反复记忆概念而应该做到真正的理解,因为对tcp/ip协议簇保持清醒的认知非常的重要。如果对该协议簇能够完全精通,那你调试网络的能力则能比同行们高出几个档次。但是,要学精神tcp/ip协议簇,只有不够的实践剖析它们才能做到。 当你使用某种工具来显示网络中的原始流量信息时,人类,而不是机器,就要承担起分析这些流量的重任了。用这种方法就可以不断地加深对tcp/ip的理解。并且,用这种学习方法的时候,我在任何可能的情况下都强烈主张使用tcpdump而不是其它工具。 选项 下面将列出一些用例子的选项,这样可以在你使用这个工具时对你有很大的帮助。这些选项很容易淡忘或与其它类型的滤镜(Filter,笔者认为这里的滤镜实际上指的是其它网络工具)混淆。比如, ethereal。所以,希望这篇文章可以作为一个参考文档,我就是这样使用它的。 首先,我要先介绍几个我认为很方便的tcpdump的选项。第一个是 -n, 这样的话域名就不会被解析了,而是用数字IP的形式显示地址(译者注: 同netstat的-n是一样的喔)。第二个是 -X, 这样就会同时把包的内容以ASCII码和十六制的形式显示。最后一个是 -S, 它个选项会显示绝对序号而不是相对序号。因为当包被隐藏起来的话,你也不会看到奇怪的序号。请谨记,tcpdump较之其它工具的优势之一就是可以与包(packets)手工交互。 值得注意的是,tcpdump默认只会从packet中取出前96个字节。如果你想要多一些的话,那就需要需要把 -s xxxx 加上。这里的xxxx是你确切想要抓取的总字节数。如果我使用这个选项的话,我通常会把这个数字设定为1514而得到所有的数据。下面是一个简短的列表列出我经常使用的选项。 -i any: 监听所有的介面。这样你就知道是不是有流量产生。 -n: 不要解决主机名,以IP数字形式显示主机。 -nn: 不要解析主机名或端口名字。 -A: 以ASCII字符显示包的数据。 -X: 同时以十六进制和ASCII字符显示包的数据。 -XX: 同-X,但也会显示 Ethernet头部。 -v, -vv, -vvv: 详细,更详细,再详细些! 冗余输出得到的包信息。 -c: 抓取 x 个包后就停下。 -S: 打印绝对序号。 -e: 同时得到Ethernet头部。 -q: 显示少一点协议信息。 -E: 用提供的密钥解密 IPSEC 流量。 -s: 设置显示前多少个字节的包内容(snaplength)。 tcpdump 4.0的snaplength的长度从68字节改成了96字节,这样你就可以看到多些内容了。但仍然看不到所有的内容,指定 -s 1514 得到包的所有内容。 http://ykyi.net 一些基本的应用 根据我要查看的不同流量,我使用不同的选项组合,如下: 1.Basic communication // see the basics without many options tcpdump -nS ...

October 31, 2010 · 4 min · kamus