tcp是一个复杂的协议

tcp是一个很复杂的协议,这是每个人都知道的,但是它是很重要的,超过半数的公司在应届生面试时会提供tcp三次握手的面试题,我当年就碰到了N次,只可惜我对网络比较了解,这件事几乎没有给我带来什么故事。
在理解tcp之前,如果有机会看一些理论知识,那么就会知道tcp实际上只是一种可靠连接的实现方式,可靠连接这种理论基本分为GBN和SR两种,当然从实践上分析还有二者的结合,如果细致的分析,二者各有优劣,GBN算法对于接收端来讲比较易于实现,特别是不需要维护缓存,对于接收端大多是服务器的情形来讲,这是再好不过的了,毕竟服务器不能有太大的开销,逻辑越简单越好,而SR将复杂度平摊到了两端,对于发送端和接收端复杂了一些,但是对于网络带宽的利用率却高效了很多,不管是GBN还是SR都要涉及到定时器,定时器的超时时延又是一个重要的概念,需要每个协议栈用测量的方式进行实现,另外不管是哪个算法,滑动窗口都是一个很重要的概念,之所以有这个概念,之所以限制窗口的大小是因为两点原因,一种是端点本身的内部原因,因为收发两端的速率需要匹配,另一种是端点作为一个整体和网络的对外关系的原因,因为收发速率即使匹配后也要受到网络的制约,这就有了窗口范围内的慢启动和加性增乘性减算法,实际上慢启动是在用最快的速度到达极端时应用加性增乘性减的一种做法,所有以上这些实现了tcp对于整个网络的公平和对于自身的高效它原来就是将所有最有效的算法结合在一起实现可靠传输的一种策略,在看看linux内核tcp实现,它无非是tcp的一种更加个性的表达方式罢了。

你可能感兴趣的:(tcp)