<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>网络 on kamuszhou&#39;s blog</title>
    <link>https://ykyi.net/tags/%E7%BD%91%E7%BB%9C/</link>
    <description>Recent content in 网络 on kamuszhou&#39;s blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 01 Jul 2012 08:46:32 +0000</lastBuildDate>
    <atom:link href="https://ykyi.net/tags/%E7%BD%91%E7%BB%9C/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Linux如何设置IPv6地址</title>
      <link>https://ykyi.net/?p=824/</link>
      <pubDate>Sun, 01 Jul 2012 08:46:32 +0000</pubDate>
      <guid>https://ykyi.net/?p=824/</guid>
      <description>&lt;p&gt;IPv6最终全面取待IPv6是不可逆的潮流。本文则讲一下在Linux下如何配置IPv6地址。当然本文假设你使用静态IP（不必是公共IPv6地址或公共IPv4地址，可以是私有IPv4地址）。本文不适用使用DHCP获取地址的情况。&lt;/p&gt;
&lt;p&gt;首先，你要确保你使用的Linux的内核已经支持IPv6。当前比较新的Linux都已经内建IPv6了。&lt;/p&gt;
&lt;p&gt;用root用户登录，运行：&lt;/p&gt;
&lt;p&gt;# lsmod | grep ipv6&lt;/p&gt;
&lt;p&gt;看看系统有没有已经加载了IPv6模块。如果没有，尝试用以下命令加载： &lt;/p&gt;
&lt;p&gt;# /sbin/modprobe ipv6&lt;/p&gt;
&lt;p&gt;第二，你需要有你的静态IP地址。&lt;/p&gt;
&lt;p&gt;**IPv4地址如何转成IPv6地址呢？**如果你的IP是一个IPv4地址，那么可以换算得到IPv6的地址形式。比较简单的作法可以去到 &lt;a href=&#34;http://grox.net/utils/ipv6.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;a href=&#34;http://grox.net/utils/ipv6.php&#34;&gt;http://grox.net/utils/ipv6.php&lt;/a&gt;&lt;/a&gt;。在左边的下拉列表中选择: IPv4 to 6to4 Address，在右边的编辑框中填上你的IPv4地址。点击: Calculate 则得到了你的IPv4地址的IPv6转化格式。&lt;/p&gt;
&lt;h2 id=&#34;配置ipv6地址&#34;&gt;配置IPv6地址&lt;/h2&gt;
&lt;p&gt;一般的Linux发行版用 /etc/network/interfaces 文件配置网卡。如果没有这个文件，那么请注意 /etc/network 目录下其它文件或者目录。&lt;/p&gt;
&lt;p&gt;假如要配置的Linux的静态IPv4地址是 192.168.1.10，这个IPv4地址转换成对应的IPv6地址则是 2002:c0a8:10a:: 。再提醒一下，上文提到过如何把IPv4地址转成IPv6地址。&lt;/p&gt;
&lt;p&gt;网关的IPv4地址是 192.168.1.1，这个IPv4地址转成对应的IPv6的地址是:2002:c0a8:0101:: 。&lt;/p&gt;
&lt;p&gt;那么 /etc/network/interfaces 文件应该配置成如下：&lt;/p&gt;
&lt;p&gt;#IPV6 static configuration(我是注释)&lt;br&gt;
iface eth0 inet6 static&lt;br&gt;
pre-up modprobe ipv6&lt;br&gt;
address 2002:c0a8:10a::&lt;br&gt;
netmask 64&lt;br&gt;
gateway 2002:c0a8:0101::&lt;/p&gt;
&lt;p&gt;注意 &amp;ldquo;pre-up&amp;rdquo; 命令。这一行保证系统在启动的时候加载支持ipv6的模块。&lt;br&gt;
最后重新启发动网络，如下：&lt;/p&gt;
&lt;p&gt;# /etc/init.d/networking restart&lt;/p&gt;
&lt;p&gt;你现在可以使用你的IPv6地址了。&lt;/p&gt;
&lt;h2 id=&#34;测试ipv6地址&#34;&gt;测试IPv6地址：&lt;/h2&gt;
&lt;p&gt;检测路由：&lt;/p&gt;
&lt;p&gt;# ip -6 route show&lt;/p&gt;
&lt;p&gt;如果IPv6工作正常的话，应该会有如下的提示。&lt;/p&gt;
&lt;p&gt;2002:c0a8:0100/64 dev eth0 proto kernel scope link src 2002:c0a8:10a&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unix网络编程.第九章笔记</title>
      <link>https://ykyi.net/?p=307/</link>
      <pubDate>Sat, 17 Dec 2011 08:58:14 +0000</pubDate>
      <guid>https://ykyi.net/?p=307/</guid>
      <description>&lt;p&gt;# TCP 协议在1981年标准化，而SCTP协议则是在2000年由IETF组织标准化。IETF： Internet Engineering Task Force 互联网工程任务组成立于1985年。&lt;/p&gt;
&lt;p&gt;# SCTP支持两种类型的socket. one to one(为了方便现有的tcp程序迁移到sctp) 和 one to many.&lt;/p&gt;
&lt;p&gt;# sctp的sctp_bindx可以绑定多个地址，并且可以动态增删。但动态增删不影响已经存在的associations.不过各个unix分支不一定支持这个特性。&lt;/p&gt;
&lt;p&gt;# sctp_getpaddrs和sctp_getladdrs分别是getpeername和gethostname的sctp版。They are designed with the concept of a multihoming aware transport protocol.&lt;/p&gt;
&lt;p&gt;# sctp传输的报文是有边界的。sctp在传输层支持传输超大的message.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unix网络编程.第七章笔记</title>
      <link>https://ykyi.net/?p=296/</link>
      <pubDate>Thu, 15 Dec 2011 06:33:56 +0000</pubDate>
      <guid>https://ykyi.net/?p=296/</guid>
      <description>&lt;div&gt;
  1.&amp;nbsp;有一个&amp;nbsp;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;Generic&amp;nbsp;Socket&amp;nbsp;Option&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;：&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;SO_BROADCAST&amp;nbsp;&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;用来开启是否充许广播。&lt;/span&gt;2.&amp;nbsp;仅有&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;TCP&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;支持&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;SO_DEBUG&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;。&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;Kernel&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;把详细的发送包的接收包信息存在一个环路&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;buffer&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;里。可以用&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;trpt&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;查看它。&lt;/span&gt;3.&amp;nbsp;SO_ERROR&lt;span style=&#34;font-family: 宋体;&#34;&gt;套接字选项只能被取得，不能被设置。如果进程阻塞在&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;select&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;调用里，不论是读还是写，&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;select&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;都会返回&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;conditions&amp;nbsp;set&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;。如果进程使用&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;signal-driven&amp;nbsp;I/O&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，则&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;SIGIO&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;信号会被发到这个进程或者它所在的进程组。进程用&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;getsockopt&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;得到&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;so_error&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;后，&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;so_error&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;就会被重置为&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;0.&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;如果&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;so_error&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;不为&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，此时调用&amp;nbsp;&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;read&amp;nbsp;&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;或者&amp;nbsp;&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;write&amp;nbsp;&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;就会立即返回&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;-1&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;errno&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;被置为&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;so_error&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的值。&lt;/span&gt;&lt;/p&gt; 
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    &amp;nbsp;
  &lt;/p&gt;
  &lt;p&gt;
    4.&amp;nbsp;SO_KEEPALIVE&lt;span style=&#34;font-family: 宋体;&#34;&gt;在一个&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;tcp&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;连接没有任何收发达两个小时时会发一个&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;prob&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;给对方。两个钟喔。好长的时间啊！！！&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;Richard&amp;nbsp;Stevens&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;认为&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;SO_KEEPALIVE&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;应该改叫&amp;nbsp;&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;make-dead&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;。大多&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;Unix&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;kernel&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;把这个两小时时长存为一个系统级的变量。这意味着如果你用某种方法改变了这个时长，会影响这个操作系统的所有&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;socket.Richard&amp;nbsp;Stevens&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;认为想把这个时长改短的想法是错误理解了这个选项的意义。&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    5.&amp;nbsp;SO_LINGER&lt;span style=&#34;font-family: 宋体;&#34;&gt;仅仅适用于面向连接的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;socket&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，比如&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;TCP&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;和&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;SCTP&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，因此不适用&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;UDP&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;。&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    Struct&amp;nbsp;linger{
  &lt;/p&gt;
  &lt;p&gt;
    int&amp;nbsp;l_onofff;
  &lt;/p&gt;
  &lt;p&gt;
    int&amp;nbsp;l_linger;
  &lt;/p&gt;
  &lt;p&gt;
    };
  &lt;/p&gt;
  &lt;p&gt;
    L_onoff&lt;span style=&#34;font-family: 宋体;&#34;&gt;为零是，&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;behavior&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;就是默认情况：&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;立即返回，&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;kernel&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;继续发送缓冲区内未发送的数据。当&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;l_onoff&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;不为零，而&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;l_linger&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;为&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;TCP&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;协议则会立即终止连接，发送&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;RST&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;给&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;peer&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;端，这样做避免了&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;TCP&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;TIME_WAIT&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;状态，这样的坏处是&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;:&amp;nbsp;leaves&amp;nbsp;open&amp;nbsp;the&amp;nbsp;possibility&amp;nbsp;of&amp;nbsp;another&amp;nbsp;incarnation&amp;nbsp;of&amp;nbsp;this&amp;nbsp;connection&amp;nbsp;being&amp;nbsp;created&amp;nbsp;within&amp;nbsp;2MSL&amp;nbsp;seconds&amp;nbsp;and&amp;nbsp;having&amp;nbsp;old&amp;nbsp;duplicate&amp;nbsp;segments&amp;nbsp;from&amp;nbsp;the&amp;nbsp;just-terminated&amp;nbsp;connection&amp;nbsp;being&amp;nbsp;incorrectly&amp;nbsp;delivered&amp;nbsp;to&amp;nbsp;the&amp;nbsp;new&amp;nbsp;incarnation.&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;对于&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;SCTP,&amp;nbsp;&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;也会发送一个&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;ABORT&amp;nbsp;chunk&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;给&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;peer.&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;第三种情况：如果&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;l_onoff&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;为真，&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;l_linger&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;不为&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;0.&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;则&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;不会立即返回，会最多等待指定的时长，在这段时间里&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;kernel&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;发送缓冲区内的数据给&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;peer&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;。如果在这段时间内发送完则&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;返回&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;0.&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;如果没有发送完毕，&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;就会返回&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;EWOULDBLOCK&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;send&amp;nbsp;buffer&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;里的数据会被丢弃。&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    6.&amp;nbsp;MSL:&amp;nbsp;maximum&amp;nbsp;segment&amp;nbsp;lifetime.
  &lt;/p&gt;
  &lt;p&gt;
    7.&amp;nbsp;因此&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;默认情况下立即返回，即使用&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;SO_LINGER&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;设置等待时间也在理论上存在&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;先于发送缓冲区的数据被&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;peer&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;端&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;acknowleded&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的情况。因此一个更好的解决方案是用&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;shutdown&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;系统调用&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;with&amp;nbsp;a&amp;nbsp;second&amp;nbsp;argument&amp;nbsp;of&amp;nbsp;SHUT_WR&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;。在调用&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;shutdown&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;后，用&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;read&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;调用直到&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;read&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;返回&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，即收到&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;peer&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;端的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;FIN&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;。&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    8.&amp;nbsp;UDP&lt;span style=&#34;font-family: 宋体;&#34;&gt;没有&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;congestion&amp;nbsp;control&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，如果发得太快，不仅仅&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;peer&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;端来不及收。&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;A&amp;nbsp;fast&amp;nbsp;sender&amp;nbsp;can&amp;nbsp;overwhelm&amp;nbsp;its&amp;nbsp;own&amp;nbsp;network&amp;nbsp;interface,&amp;nbsp;causing&amp;nbsp;datagrams&amp;nbsp;to&amp;nbsp;be&amp;nbsp;discarded&amp;nbsp;by&amp;nbsp;the&amp;nbsp;sender&amp;nbsp;itself.&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    9.&amp;nbsp;因为&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;tcp&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;在三次握手阶段的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;SYN&amp;nbsp;segment&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;里交换窗口大小&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;(windows&amp;nbsp;scale)&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;。所以&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;tcp&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的接收缓冲大小必须在&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;shank&amp;nbsp;hands&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;之前就设置好。&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;Connected&amp;nbsp;socket&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;从&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;listening&amp;nbsp;socket&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;继承这个选项。&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    10.&amp;nbsp;TCP&lt;span style=&#34;font-family: 宋体;&#34;&gt;的套接字缓冲区大小至少需要是&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;倍&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;MSS&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的大小。&lt;/span&gt;这里指的套接字缓冲，如果是针对单向的传输，比如单向传一个文件，指的是发送方的发送缓冲和接收方的接收缓冲。如果是双向的传输，则指的是双方的接收和发送缓冲。为什么&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;tcp&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;套接字的缓冲区需要至少&amp;nbsp;&amp;nbsp;&amp;nbsp;是&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;倍&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;MSS&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的大小呢？&lt;/span&gt;这是因为&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;tcp&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的快恢复&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;(fast&amp;nbsp;recovery)&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;算法。快恢复算法定义：如果接收端连续收到三个同样的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;ACK&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，就认为有&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;packet&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;丢失了。而接收端在&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;segment&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;丢失后，每收到新的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;segment&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;就不停地重发一个重复的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;ack&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;给&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;sender&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;。如果窗口大小小于&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;个&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;segments,&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;就不会有三个重复的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;ACK,&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;所以快恢复算法就没办法工作了。&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    11.&amp;nbsp;What&amp;nbsp;is&amp;nbsp;bandwidth-delay&amp;nbsp;product.
  &lt;/p&gt;
  &lt;p&gt;
    A:&amp;nbsp;The&amp;nbsp;capacity&amp;nbsp;of&amp;nbsp;the&amp;nbsp;pipe&amp;nbsp;is&amp;nbsp;called&amp;nbsp;the&amp;nbsp;bandwidth-delay&amp;nbsp;product&amp;nbsp;and&amp;nbsp;we&amp;nbsp;calculate&amp;nbsp;this&amp;nbsp;by&amp;nbsp;multiplying&amp;nbsp;the&amp;nbsp;bandwidth(in&amp;nbsp;bits/sec)&amp;nbsp;times&amp;nbsp;the&amp;nbsp;RTT(in&amp;nbsp;seconds),&amp;nbsp;converting&amp;nbsp;the&amp;nbsp;result&amp;nbsp;from&amp;nbsp;bits&amp;nbsp;to&amp;nbsp;bytes.&amp;nbsp;&lt;span style=&#34;font-family: 宋体;&#34;&gt;即网速乘上&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;RTT.&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    12.&amp;nbsp;UDP&lt;span style=&#34;font-family: 宋体;&#34;&gt;没有&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;send&amp;nbsp;buffer&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，但有一个&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;send&amp;nbsp;buffer&amp;nbsp;size.&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;只要&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;socket&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;buffer&amp;nbsp;size&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;大于&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;LO_WATER&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;，就永远是可写的。&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    13.&amp;nbsp;SO_REUSEADDR&lt;span style=&#34;font-family: 宋体;&#34;&gt;有四种用途。好难写。见&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;Unix&amp;nbsp;Network&amp;nbsp;Programming&amp;nbsp;Section&amp;nbsp;7.5&amp;nbsp;&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;影印版第&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;211&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;页啦。&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    14.&amp;nbsp;It&#39;s&amp;nbsp;Ok&amp;nbsp;for&amp;nbsp;the&amp;nbsp;MSS&amp;nbsp;to&amp;nbsp;be&amp;nbsp;different&amp;nbsp;in&amp;nbsp;each&amp;nbsp;direction.
  &lt;/p&gt;
  &lt;p&gt;
    15.&amp;nbsp;Nagle&lt;span style=&#34;font-family: 宋体;&#34;&gt;算法是为了减少&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;small&amp;nbsp;package&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;的数量.&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;The&amp;nbsp;algorithm&amp;nbsp;states&amp;nbsp;that&amp;nbsp;if&amp;nbsp;a&amp;nbsp;given&amp;nbsp;connection&amp;nbsp;has&amp;nbsp;outstanding&amp;nbsp;data,&amp;nbsp;then&amp;nbsp;no&amp;nbsp;small&amp;nbsp;packets&amp;nbsp;will&amp;nbsp;be&amp;nbsp;sent&amp;nbsp;on&amp;nbsp;the&amp;nbsp;connection&amp;nbsp;in&amp;nbsp;response&amp;nbsp;to&amp;nbsp;a&amp;nbsp;user&amp;nbsp;write&amp;nbsp;operation&amp;nbsp;until&amp;nbsp;the&amp;nbsp;existing&amp;nbsp;data&amp;nbsp;is&amp;nbsp;acknowledged.&amp;nbsp;Small&amp;nbsp;package&amp;nbsp;&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;指的是任何比&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;MSS&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;小的&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;package.&lt;/span&gt;
  &lt;/p&gt;
  &lt;p&gt;
    16.&amp;nbsp;Delayed&amp;nbsp;ACK&amp;nbsp;algorithm:&amp;nbsp;This&amp;nbsp;algorithm&amp;nbsp;causes&amp;nbsp;TCP&amp;nbsp;to&amp;nbsp;not&amp;nbsp;send&amp;nbsp;an&amp;nbsp;ACK&amp;nbsp;immediately&amp;nbsp;when&amp;nbsp;it&amp;nbsp;receives&amp;nbsp;data;&amp;nbsp;instead,&amp;nbsp;TCP&amp;nbsp;will&amp;nbsp;wait&amp;nbsp;some&amp;nbsp;small&amp;nbsp;amount&amp;nbsp;of&amp;nbsp;time&amp;nbsp;(typically&amp;nbsp;50-200ms)and&amp;nbsp;only&amp;nbsp;then&amp;nbsp;send&amp;nbsp;the&amp;nbsp;ACK.
  &lt;/p&gt;
  &lt;p&gt;
    17.&amp;nbsp;SCTP&lt;span style=&#34;font-family: 宋体;&#34;&gt;有一个&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;SCTP_AUTOCLOSE&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;套接字选项。&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;This&amp;nbsp;option&amp;nbsp;allows&amp;nbsp;us&amp;nbsp;to&amp;nbsp;fetch&amp;nbsp;or&amp;nbsp;set&amp;nbsp;the&amp;nbsp;autoclose&amp;nbsp;time&amp;nbsp;for&amp;nbsp;an&amp;nbsp;SCTP&amp;nbsp;endpoint.&amp;nbsp;The&amp;nbsp;autoclose&amp;nbsp;time&amp;nbsp;is&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;seconds&amp;nbsp;an&amp;nbsp;SCTP&amp;nbsp;association&amp;nbsp;will&amp;nbsp;remain&amp;nbsp;open&amp;nbsp;when&amp;nbsp;idle.&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;即&lt;/span&gt;&lt;span style=&#34;font-family: Times New Roman;&#34;&gt;SCTP&amp;nbsp;association&lt;/span&gt;&lt;span style=&#34;font-family: 宋体;&#34;&gt;能够保持空闲状态的最长时间。超时就会被关闭。&lt;/span&gt;
  &lt;/p&gt;
&lt;/div&gt;</description>
    </item>
    <item>
      <title>tcpdump基础教程</title>
      <link>https://ykyi.net/?p=45/</link>
      <pubDate>Sun, 31 Oct 2010 05:34:49 +0000</pubDate>
      <guid>https://ykyi.net/?p=45/</guid>
      <description>&lt;p&gt;英文原文出自： &lt;a href=&#34;http://danielmiessler.com/study/tcpdump/&#34;&gt;A tcpdump Tutorial and Primer&lt;/a&gt;&lt;br&gt;
翻译: ykyi.net&lt;/p&gt;
&lt;p&gt;Tcpdump是信息安全专业人士最重要的一个网络分析工具。对这个工具有一个深入的理解对于每一个喜欢透彻理解tcp/ip协议栈的人来话都是必须的。但很多人选择一个更高级别的工级，比如Ethereal Wireshark，但是我认为这是一个错误！&lt;/p&gt;
&lt;p&gt;不应该机械的反复记忆概念而应该做到真正的理解，因为对tcp/ip协议簇保持清醒的认知非常的重要。如果对该协议簇能够完全精通，那你调试网络的能力则能比同行们高出几个档次。但是，要学精神tcp/ip协议簇，只有不够的实践剖析它们才能做到。&lt;/p&gt;
&lt;p&gt;当你使用某种工具来显示网络中的原始流量信息时，人类，而不是机器，就要承担起分析这些流量的重任了。用这种方法就可以不断地加深对tcp/ip的理解。并且，用这种学习方法的时候，我在任何可能的情况下都强烈主张使用tcpdump而不是其它工具。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;选项&lt;/strong&gt;&lt;br&gt;
下面将列出一些用例子的选项，这样可以在你使用这个工具时对你有很大的帮助。这些选项很容易淡忘或与其它类型的滤镜(Filter,笔者认为这里的滤镜实际上指的是其它网络工具)混淆。比如, ethereal。所以，希望这篇文章可以作为一个参考文档，我就是这样使用它的。&lt;/p&gt;
&lt;p&gt;首先，我要先介绍几个我认为很方便的tcpdump的选项。第一个是 -n, 这样的话域名就不会被解析了，而是用数字IP的形式显示地址(译者注: 同netstat的-n是一样的喔)。第二个是 -X, 这样就会同时把包的内容以ASCII码和十六制的形式显示。最后一个是 -S, 它个选项会显示绝对序号而不是相对序号。因为当包被隐藏起来的话，你也不会看到奇怪的序号。请谨记，tcpdump较之其它工具的优势之一就是可以与包(packets)手工交互。&lt;/p&gt;
&lt;p&gt;值得注意的是，tcpdump默认只会从packet中取出前96个字节。如果你想要多一些的话，那就需要需要把 -s xxxx 加上。这里的xxxx是你确切想要抓取的总字节数。如果我使用这个选项的话，我通常会把这个数字设定为1514而得到所有的数据。下面是一个简短的列表列出我经常使用的选项。&lt;/p&gt;
&lt;p&gt;-i any: 监听所有的介面。这样你就知道是不是有流量产生。&lt;br&gt;
-n: 不要解决主机名，以IP数字形式显示主机。&lt;br&gt;
-nn: 不要解析主机名或端口名字。&lt;/p&gt;
&lt;p&gt;-A: 以ASCII字符显示包的数据。&lt;br&gt;
-X: 同时以十六进制和ASCII字符显示包的数据。&lt;br&gt;
-XX: 同-X,但也会显示 Ethernet头部。&lt;br&gt;
-v, -vv, -vvv: 详细，更详细，再详细些！ 冗余输出得到的包信息。&lt;br&gt;
-c: 抓取 x 个包后就停下。&lt;br&gt;
-S: 打印绝对序号。&lt;br&gt;
-e: 同时得到Ethernet头部。&lt;br&gt;
-q: 显示少一点协议信息。&lt;br&gt;
-E: 用提供的密钥解密 IPSEC 流量。&lt;br&gt;
-s: 设置显示前多少个字节的包内容（snaplength）。&lt;/p&gt;
&lt;p&gt;tcpdump 4.0的snaplength的长度从68字节改成了96字节，这样你就可以看到多些内容了。但仍然看不到所有的内容，指定 -s 1514 得到包的所有内容。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://ykyi.net&#34;&gt;http://ykyi.net&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;一些基本的应用&lt;/strong&gt;&lt;br&gt;
根据我要查看的不同流量，我使用不同的选项组合，如下:&lt;/p&gt;
&lt;p&gt;1.Basic communication // see the basics without many options&lt;br&gt;
tcpdump -nS&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
