tcp是一个很复杂的协议,这是每个人都知道的,但是它是很重要的,超过半数的公司在应届生面试时会提供tcp三次握手的面试题,我当年就碰到了N次,只可惜我对网络比较了解,这件事几乎没有给我带来什么故事。
在理解tcp之前,如果有机会看一些理论知识,那么就会知道tcp实际上只是一种可靠连接的实现方式,可靠连接这种理论基本分为GBN和SR两种,当然从实践上分析还有二者的结合,如果细致的分析,二者各有优劣,GBN算法对于接收端来讲比较易于实现,特别是不需要维护缓存,对于接收端大多是服务器的情形来讲,这是再好不过的了,毕竟服务器不能有太大的开销,逻辑越简单越好,而SR将复杂度平摊到了两端,对于发送端和接收端复杂了一些,但是对于网络带宽的利用率却高效了很多,不管是GBN还是SR都要涉及到定时器,定时器的超时时延又是一个重要的概念,需要每个协议栈用测量的方式进行实现,另外不管是哪个算法,滑动窗口都是一个很重要的概念,之所以有这个概念,之所以限制窗口的大小是因为两点原因,一种是端点本身的内部原因,因为收发两端的速率需要匹配,另一种是端点作为一个整体和网络的对外关系的原因,因为收发速率即使匹配后也要受到网络的制约,这就有了窗口范围内的慢启动和加性增乘性减算法,实际上慢启动是在用最快的速度到达极端时应用加性增乘性减的一种做法,所有以上这些实现了tcp对于整个网络的公平和对于自身的高效它原来就是将所有最有效的算法结合在一起实现可靠传输的一种策略,在看看linux内核tcp实现,它无非是tcp的一种更加个性的表达方式罢了。
tcp是一个复杂的协议
原创
©著作权归作者所有:来自51CTO博客作者dog250的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
linux之TCP协议
linux下TCP协议的认识,包括确认应答,超时重传,流量控制,滑动窗口,拥塞控制,三次握手四次挥手等。
TCP 面向字节流 可靠性 有连接 滑动窗口 -
一个复杂关联的sql
在项目中遇到了一个比较复杂关系的sql,关联关系有些模糊,现在梳理一下 sql如下:
oracle sql 关联关系 -
android tcp封装到一个服务中 tcp协议封装
大家好呀,我是请假君,今天又来和大家一起学习数通了,今天要分享的知识是TCP的封装。 TCP段的头格式如上图所示,其协议头最少20个字节。其中主要字段如下:
android tcp封装到一个服务中 tcp/ip p2p 网络协议 字段