天天看点

@TCP/IP是什么?TCP/UDP协议又是什么?

引语:

约42.9亿个IPv4地址中,你需要的数据是怎么准确地传到你的电脑上的?你的下载是怎么经过恶劣的网络环境完整准确地到达你的电脑的?

这里,我们不得不提到TCP/IP协议,TCP/IP协议为整个互联网连接的稳定性,数据包的准确性分开看,从IP讲起.

**

1. IP(网际协议)

**

**互联网协议地址(Internet Protocol Address)又称IP地址,**在我们计算机中,IP层是最接近硬件的软件层,也是网络与计算机交互的软件底层.**IP层接受网络传输过来的数据包传给后一层,我们将此处的数据包称为IP数据包,此时的后一层就是我们之后会提到的TCP/UDP层,我们称之为计算机网络结构的上层.此时的数据包中主要包含了版本,片偏移,生存时间,首部检验和,源地址,目的地址和数据.**因此不难理解,IP层作为计算机网路连接的底层,其IP数据包包含了全部计算机与网络通信需要的数据,哪么为什么我们还需要TCP/UDP协议呢?

2. TCP协议

传输控制协议(Transmission Control Protocol)是一种位于IP协议之上的数据交换控制协议.我们不妨想象一下你下载电影时的场景,网络不可能把接近2G的电影直接传给你,因为一点网络错误例如丢包,数据错误,整个文件出现问题.于是,将一个大文件分为大量极小的数据包这样的天才想法出现了,解决了大文件下载的问题,但同时又带来了另外的麻烦,如何保证数据包是正确的?数据包的顺序是怎样的?数据包出现错误怎么办?其实这些问题在TCP协议之前都有解决方法.比如通过md5,Hash,CRC验证数据包的完整性,但对大量数据包进行这样的校验未免有些占用性能,况且整个网络需要的是一套大家都遵循的规范.此时TCP协议诞生了.通过为每一个包赋值一个序号,解决了丢包和传输顺序的问题.不仅如此,发送端还会向接收端发送一个校验包来确保数据包的正确性.同时在接收到数据包之后接收端会向发送端发出一个确认信号(ACK),在合理的延迟(RTT)后如果发送端还未收到确认即认为这个包需要重发.这样一来,解决了网络信息传输的一系列问题.总体来看,TCP需要双方保持互相的链接才能传输数据,因此,TCP也被称为面向连接的协议.

3.UDP协议

用户数据报协议(User Datagram Protocol)与TCP协议一样是一种位于IP层之上的协议,既然两者为同级协议,那UDP与TCP有什么区别呢?刚才TCP协议中对数据包分组,排序和返回确认的功能在UDP中都没有,但UDP协议仍是有校验能力的,当UDP协议检测到数据包有问题的时候,它并不会要求发送端重发,因此UDP被认为是一种不可靠的传输协议,但这样的不可靠也并不是完全的不可靠,这时数据包的错误修正就交给应用层去处理.相应地,UDP被称为面向非连接的协议.

TCP/UDP

刚才谈到了UDP的种种不足,那么相比于TCP,UDP存在的意义如何?我们不妨对比一下TCP和UDP协议工作的的整个过程.

@TCP/IP是什么?TCP/UDP协议又是什么?

不难发现,TCP协议会对数据包校验并做相应处理,并且会返回一个确认信息,而UDP协议做的只有接收.这样一来,UDP协议相对TCP协议的优势就非常明显,就是性能消耗低,从IP层到应用层的时延也就更低,换一个角度,由于少了TCP协议中的校验包和返回值,理论上传输同一文件的流量消耗也就更低.这样的优势,在某些应用场景下显得格外重要.;例如语音聊天的时候,当然宁愿某一瞬间丢掉一点也不愿意TCP协议为了等待一个数据包而停掉后面的语音.

那可能有读者会问,UDP效率如此之高,为什么不将所有的校验工作和纠错工作都交给应用层完成呢?这样既可以兼顾UDP的高效率低延迟的优势,又能保证TCP的准确性.这样的想法无疑是优秀的,但明显这会大大增加程序编写人员的工作量,但这样的想法仍是值得借鉴的.例如目前都提供TCP和UDP两种协议接口,应用开发者根据应用类型自行选择.另外,浅谈一下目前大型网络游戏的解决方案,网络游戏本身对时延的要求极高,而对用户网络环境容错率又不能太差,采用TCP协议导致延迟太高,可能UDP协议300ms的延迟用TCP就能达到1000ms,于是部分游戏会先判断网络环境,采取不同的协议,并利用动画掩盖延迟.这也是相当不错的解决方案.

前景

或许不久之后,随着宽带提供商和内容服务商服务器的提升,或许UDP的劣势会越来的不明显,又或许以后会有更先进的协议能结合TCP和UDP的优势取代前者.

因编者水平能力有限,若有不足与错误,欢迎指正.

继续阅读