Unix网络编程.第七章笔记

1. 有一个 Generic Socket OptionSO_BROADCAST 用来开启是否充许广播。2. 仅有TCP支持SO_DEBUGKernel把详细的发送包的接收包信息存在一个环路buffer里。可以用trpt查看它。3. SO_ERROR套接字选项只能被取得,不能被设置。如果进程阻塞在select调用里,不论是读还是写,select都会返回conditions set。如果进程使用signal-driven I/O,则SIGIO信号会被发到这个进程或者它所在的进程组。进程用getsockopt得到so_error后,so_error就会被重置为0.如果so_error不为0,此时调用 read 或者 write 就会立即返回-1errno被置为so_error的值。

 

 

4. SO_KEEPALIVE在一个tcp连接没有任何收发达两个小时时会发一个prob给对方。两个钟喔。好长的时间啊!!!Richard Stevens认为SO_KEEPALIVE应该改叫 make-dead。大多Unixkernel把这个两小时时长存为一个系统级的变量。这意味着如果你用某种方法改变了这个时长,会影响这个操作系统的所有socket.Richard Stevens认为想把这个时长改短的想法是错误理解了这个选项的意义。

5. SO_LINGER仅仅适用于面向连接的socket,比如TCPSCTP,因此不适用UDP

Struct linger{

int l_onofff;

int l_linger;

};

L_onoff为零是,closebehavior就是默认情况:close立即返回,kernel继续发送缓冲区内未发送的数据。当l_onoff不为零,而l_linger0TCP协议则会立即终止连接,发送RSTpeer端,这样做避免了TCPTIME_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 chunkpeer.第三种情况:如果l_onoff为真,l_linger不为0.close不会立即返回,会最多等待指定的时长,在这段时间里kernel发送缓冲区内的数据给peer。如果在这段时间内发送完则close返回0.如果没有发送完毕,close就会返回EWOULDBLOCKsend buffer里的数据会被丢弃。

6. MSL: maximum segment lifetime.

7. 因此close默认情况下立即返回,即使用SO_LINGER设置等待时间也在理论上存在close先于发送缓冲区的数据被peeracknowleded的情况。因此一个更好的解决方案是用shutdown系统调用with a second argument of SHUT_WR。在调用shutdown后,用read调用直到read返回0,即收到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 socketlistening socket继承这个选项。

10. TCP的套接字缓冲区大小至少需要是4MSS的大小。这里指的套接字缓冲,如果是针对单向的传输,比如单向传一个文件,指的是发送方的发送缓冲和接收方的接收缓冲。如果是双向的传输,则指的是双方的接收和发送缓冲。为什么tcp套接字的缓冲区需要至少   是4MSS的大小呢?这是因为tcp的快恢复(fast recovery)算法。快恢复算法定义:如果接收端连续收到三个同样的ACK,就认为有packet丢失了。而接收端在segment丢失后,每收到新的segment就不停地重发一个重复的acksender。如果窗口大小小于4segments,就不会有三个重复的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.只要socketbuffer 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能够保持空闲状态的最长时间。超时就会被关闭。

人类中心主义未必导致环境的破坏.自然辩证法作业

人类中心主义是一种价值尺度。它主张把人类的利益作为价值原点和道德评价的依据,有且只有人类才是价值判断的主体。作为这个星球上唯一具备高级的情感,复杂的逻辑思维,有复杂的语言系统等等一般生物所不具备的特征的生物。人类明显区别于其它生物种类。人类要生存与发展,不断实现人类价值的提升突破,当然要利用我们生存的环境中的其它生物和自然物。

有一种观点认为:人类中心主义将会导致环境的破坏。这种观点实际上并没有真正理解什么是人类中心主义。人类中心主义最重要最核心的一点,它把是否符合人类的利益作为是非评价的标准。按照这样的价值尺度,又依据破坏环境的行为将最终损坏人类的利益,那么,破坏坏境的行为显然就不是人类中心主义所主张的!恰恰相反,人类中心主义为了维护人类的利益,就要毫不含糊地,旗帜鲜明地支持保护环境。

那么为什么会有那么多人把人类中心主义与环境保护对立起来呢?我想,是因为这些人并未真正理解人类中心主义的中心思想。一个重要的原因是一部分人想当然的把人类中心与环境保护对立起来。另一个重要的原因还在于很多伪人类中心主义者为了短期的眼前利益,为了一时一刻一朝一夕的短期发展,不惜牺牲环境。伪人类中心主义者也自称是人类中心主义者,实际上他们的所作所为与真正的人类中心主义者背道而驰。这些自我标榜的人类中心主义者并不是少数,他们在社会上为人类主心主义造成了相当的负面影响,于是影响了公众对人类中心主义的看法。

作为结论,为了从根本上长远地使我们生活的环境有符合人类的利益,有利于人类的生存与发展。我们在判断一件事是否符合人类中心主义的价值尺度时,不能仅仅着眼于眼前和局部利益,而是要站在更高更远的位置着眼于大局,着眼于长期发展。这样,就能同伪人类中心主义者划清界限。

就人类中心主义的现实意义来讲。我国在过去半个多世纪的发展,尤其是近三十年来的发展只是片面的追求短期的GDP指标,忽略了对环境的保护。这样的粗放型发展模式已经难以为继。在目前的中国社会中,因为忽视环境保护而造成的负面影响已经越来越明显,越来越频繁的表现出来。如频繁的自然灾害,如最近媒体集中关注的北京空气质量问题。这样的发展模式最终损害了人类的利益,实际上是不符人类中心主义主张的。
http://ykyi.net  zausiu’s blog

新千年伊始胡温政府提出的科学发展观就是为了解决上文提到的偏差。其实际效果却不能说”成效显著”。对于如此宠大的一个十亿人口的大国,环境问题极端重要,每个人都必须意识到掠夺式地破坏坏境最终会损害社会大众的共同利益,也会损害自已的利益。