显示标签为“读书”的博文。显示所有博文
显示标签为“读书”的博文。显示所有博文

2012年2月3日星期五

TCP/IP详解卷一摘抄

算下来,这是我第四次读《TCP/IP详解-卷一》了,读大学时读过一遍,那时懵懵懂懂,工作后又读过三遍,加上工作中的实践,理解渐渐加深。我想这样的经典读十遍也不为过。

UDP

11.10 限制最大UDP长度的因素
          1、IP数据包长度字段,16位的限制。最大为65535 - 20 - 8
          2、sockt API接口限制,用户可以修改此值,APUE上有讲
          3、内核TCP/IP协议栈的实现。
UDP为数据报协议,需要由应用层控制UDP单包大小,避免IP分片提高效率。


TCP

半关闭:TCP提供一种结束一端发送,但还可以继续接收数据的能力。
半打开:如果一端已经关闭或异常终结,而另一端还不知道,则称这种状态为半打开。


呼入连接请求队列(listen)
     1、完成三次握手后,TCP会把连接放入请求队列,应用层从队列中取连接。
     2、当队列满之后,TCP不会理会新到的SYN请求,且不发送RST回复。


交互数据包特性(小包)
     1、经受时延的确认ACK;实现数据包捎带ACK,减少包数量。
     2、Nagle算法;算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,该分组的确认到达之前不能发送其它小分组。这样,TCP可以收集多个小分组,等到确认ACK到达时,一并发出去。这样减少了网络上小分组的数量,减轻了慢速网络的压力。算法自适应特点:确认到达的越快,数据发送的也越快。这是一种流量控制的算法。
          Nagle算法并不适用所有环境,如X环境下需要关闭Nagle算法。
    

成块数据包特性(大包)
滑动窗口(通告窗口):
          是TCP的一种流量控制方法,其中窗口的大小由应用程序控制。

慢启动:
          增加拥塞窗口,简称cwnd;一种在连接上发起数据流的方法。窗口初始化为1个报文单位,收到一个ack则增加1个报文单位,发送窗口取拥塞窗口和通告窗口(滑动窗口)的最小值。
          拥塞窗口是发送方的流量控制,通告窗口是接收方的拥塞控制。

超时与重传:
          发送包后设置一个定时器(重传定时器),若定时器超时时间内未收到ACK确认,则重传数据包。
          当定时器超时、收到重复的ACK时,则认为网络发生了拥塞,就需要启动拥塞避免算法。

拥塞避免算法:
          一种处理丢失分组的方法。算法假定分组受损坏而丢失的可能性是非常少的,分组丢失就意味着在源目的地址中间发生了拥塞。
          拥塞避免算法和慢启动算法维护两个变量,一个拥塞窗口cwnd,一个慢启动门限ssthresh。
          1)对一个新连接,cwnd初始化为1个报文段,ssthresh初始化为65535字节。
          2)TCP的输出不能超过拥塞窗口cwnd和接收方的通告窗口。
          3)当拥塞发生时,ssthresh被置为当前窗口的一半(cwnd和通告窗口的最小值,不小于两个报文段),当因为超时引起拥塞时,将cwnd置为1个报文段(启动慢启动)。
          4)当收到新的数据的确认ACK时则增加cwnd。如果cwnd小于等于ssthresh,则执行慢启动,每个ACK确认cwnd增1;当cwnd大于ssthresh时,则执行拥塞避免每个ACK确认cwnd增加1/cwnd。

Jacobson快速重传算法:
          当收到3个ACK时,就假定那个报文已经丢失,并重传ACK序号开始的那个报文段。
Jacobson快速重传算法、快速恢复算法(两个算法,常配合使用)
          当收到3个重复的ACK时,不等待超时,马上重传丢失报文,这是快速重传算法。
          重传之后,不执行慢启动而执行拥塞避免算法,这称为快速恢复算法。
          1)当收到3个重复ACK后,将ssthresh设置为拥塞窗口cwnd的一半,重传丢失的报文。设置cwnd为ssthresh加三倍报文段大小。(根据图21-10、21-11并没有将cwnd设置为ssthresh加三倍报文?)
          2)每收到一个重复的ACK,则cwnd加1并发送1个分组(如果新的cwnd允许发送)。
          3)当下一个确认新数据的ACK达到时,设置cwnd为ssthresh(第1步中设置的值)。这一步采用的拥塞避免,因为分组丢失时我们将当前速率减半。

          ssthresh立即设置为当重传发生 时正在起作用的窗口大小的一半,但是在接收到重复 ACK的过程中cwnd允许保持增加,这是 因为每个重复的 ACK表示1个报文段已离开了网络(接收 TCP已缓存了这个报文段,等待所缺 数据的到达)。这就是快速恢复算法。

坚持定时器
          能够处理TCP打开窗口ACK丢失的情况。由发送方来维护坚持定时器,来周期性的查询(使用指数退避算法)窗口大小。TCP从不放弃窗口探测。

糊涂窗口综合征
          接收方通告一个小的窗口,而发送方也可以发送小量的数据。造成频繁发送小包。

保活定时器
          发现一个TCP连接何时断掉。主要用在服务器。
         


TCP特性:
     1、流量控制;Nagle算法、滑动窗口、慢启动
     2、拥塞控制;慢启动、拥塞避免、快速重传


问题:
Nagle算法和滑动窗口的选择
          TCP内核有mytcp_nagle_testv函数,此函数来判断这个数据包是否使用nagle算法,之后再调用tcp_cwnd_test判断是否使用滑动窗口算法。
          是否使用nagle算法和包的属性(SYN、FIN),包的大小有关。一半认为小于MSS的数据包都属于小包。
http://blog.sina.com.cn/s/blog_54b5ea250100g2xu.html

LAST_ACK 状态有超时机制吗?这个状态合适消失?
          这个和普通数据包的超时机制相同,发送FIN包之后进入LAST_ACK状态,如果超时之前没有收到ACK,则会重发FIN包。


留下一个疑问没有解决,上文标红快速恢复算法图21-10问题,不急,等下次重读再说。


2011年4月24日星期日

《把时间当作朋友》、《Rework》读书笔记

本周读了这两本书,李笑来的《把时间当作朋友》是读第二遍。读这两本书有有一些小思考。

两本书都是实用性的书,一本教你如何使用时间更好的工作生活,一本是教你如何开公司如何创业的。但是两本书有很多交集,在如何做决定、如何对待问题、如何解决问题上的处理方法都是相同的。我想人生任何事情的本质就是如何决定、对待和处理问题。

读的过程中每一页,每一个观点都很适用自己。但是两本书读完之后,又觉得什么收获都没有,什么都没有记住。很痛苦,从觉得自己不会读书。前些时间自己还读过一本《如何阅读一本书》来培养自己的阅读能力,但是读过之后还是没有多大提高。我只能用笑来的观点来告诉自己了:“你并不孤独”所有的人都不是天才,普通人都是这样的,读一次能从书中吸取的知识是很少的,需要之后不停的阅读并且实践。“耐心”学习需要很大的耐心,要学会“推迟自己的满足感”慢慢来学习。

慢慢的学会使用各种“工具”来辅助自己更好的管理住自己的时间,自己的生活。

没有办法一下学会书中所有的观点,就要学会抓住重点,先总结三个从有感觉的书中观点:
1、立刻行动,不要在乎方法、工具。因为你最重要的是完成某件时间,而你是用什么方法、什么工具完成的重要吗?不要把时间浪费在方法的确定和工具的选择上。
2、控制自己:控制大脑、控制情绪、推迟满足感。学会更有耐心,学会控制对外界输入的输出,学会利用自己的情绪。
3、你并不孤独:世界上肯定有人跟你遇到了相同的问题,痛苦的人不止你一个,但他们可以度过苦难,你也可以。

2011年2月18日星期五

《你的知识需要管理》读书笔记

  书中有理论也有实用的东西。理论告诉你向那个方向努力会比较好,实用的告诉你如何寻找这个方向,如何努力。
  书中讲的很多的理论其实也是大道理,读起来有种感觉就是:“这个我也知道啊”,但是知易行难,比如:
  与人沟通需要话题,而这个话题就需要自己去匹配。也让自己“有料”,对别人有话题才行。
  把自己的想法知识,不管用什么方法表达出来,都会自己有很大的提高。
  事后多总结,多反思自己,比读多少书都强。
  学会共享知识,推销自己,让别人知道自己的价值,自己的知识量。
  书中也共享了很多实用的知识:
  如何学习一个陌生的领域。
  如何更好的利用搜索引擎。
  如何更好的利用好工具,网络工具。
  如何给给文件和文件夹命名。
  如何保存自己的知识及寻找自己的知识。
  
  我很认同作者总结的个人知识管理的5个步骤:学习知识、保存知识、共享知识、使用知识、创造知识。人价值的体现也是遵循这些步骤的,有前两步铺垫的人,算一个合格的人;中间两步做的很好的人,别人会很认同这种能给被人带来价值和帮助的人,算一个优秀的人;能够创新的人就算是顶级的人才了,能够标新立异,做出别人做不出来的东西。
  
  ”世事洞明皆学问,人情练达即文章。“所有的东西都是可以在后天学习、练习的。从这本书中学到了些理论,但更多的是实用的知识,所以说这本书对我来说算一本实用书。

2011年1月13日星期四

《国富论》阅读笔记一

最近对经济学感兴趣,于是问了几位推上的经济学大牛该那什么作为入门读物,各位大牛一直推荐《国富论》。于是就从当当买了一本来读。
欧洲政策引起的不均等一小节,讲的是政府和同业行会指定的各种制度(学徒制、时间限制)对某一行也发展的影响。政府适度的政策和同业行会的适度整合是可以帮助行业的发展的,可以促进行业工人交流、共同学习,但是如果过度就会成为现在说的地方保护政策,限制了正常的竞争,影响了行业的正常发展。
这个让我联想到了我从事的程序员这一行业,我目前接触到的程序员基本上都是各做各的基本上很少交流,很少会有技术等类的分享。就和闭关锁国一样,没有交流,就很少会有提高。在推上看到,那些比较优秀的程序员,都会有很多的朋友,他们拥有沟通的技能,乐于沟通,经常参加同行聚会来交流来共同提高。由于公司的不合理政策,员工之间很少谈论薪资,没有参考,很难给自己一个合理的价格。互相交流可以相互参考,给自己一个合理的价格。销售比较容易跳槽,薪资也会比较高,也是这个原因。我想说的就是:做为一个程序员,想成为一个优秀且衣食无忧的程序员,就要多沟通(写博客、与人沟通)、多参加行业聚会、认识新朋友,认识外面的世界,不要成为一个自我感觉良好的井底之蛙。

PS:写的很痛苦,不能将文章写的由论据到论证到成为结论,不能将自己的想法完整的表述出来,还是需要多写来提高自己啊。

2010年12月19日星期日

平凡的世界

昨天将这本1251页的巨著读完了,感慨颇多。所有人对于这个世界来说都是很平凡的,最后的最后都是死亡。但是对于每个人来说,在自己内心的深处都可以有自己的一个不平凡的生活的方法。用自己的天枰衡量自己,衡量这个世界。不卑不亢。

2010年11月25日星期四

平凡的世界

        这几天开始读《平凡的世界》,中午、下午吃晚饭后都会读一小会,又往MP3中拷了一部有声的读物,第一次觉得小说这么有吸引力,起码对我本人来说。这样双管齐下,读的很快,平均一天能够读四个章节。书中孙少平、孙少安的未来一直让我牵挂着,少安和润叶的感情的结局我也很期待。中午去买饭的时候,听一个上学时代读过很多书的人说,最终少安自卑没有娶润叶,少平最后做了一个煤矿工人,去挖煤,还破了相。我很惊讶,怎么会这样,少平不是去读高中了吗,不是读书也不错啊。当时还安慰自己说,毕竟是小说,悲情的结局才会更吸引人。后来想了想,觉得这是一个很合理的结局,放到今天也一样,也是一样。今天那些那么多的XX二代什么的,不用费多大力气就可以过上优越的生活,而那些老百姓的子女们,需要多大的努力,奋斗多久才能出头呢。《平凡的世界》告诉我们,无论什么时候,为官,仕途总是一个好的选择。
        但是不论怎样,就像晚饭的时候同事调侃的那样,你丫的已经在这了,你还能怎么办呢!
      
        上学的时候,看同学在读小说的时候,总觉得很浪费时间。现在我不这么认为了,甚至有点后悔自己在读书的时候,在有大量时间的时候,没有好好的读几本书,读几本小说。现在自己有好多的书想读,恨不得一下子全部都给读了。当前我要把《平凡的世界》读完了,我想知道事情的结局,我想知道路遥想通过本书传递给我们什么。