默认
发表评论 4
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
关于TCP可靠性传输特性为何在系统内核层实现的疑问
阅读(35321) | 评论(4 收藏1 淘帖 3
昨天看帖想到一个TCP传输的问题,假设进程A与进程B建立一个TCP连接(A和B在不同的主机),A需要发送数据data到B。假设A的TCP发送缓冲区能容纳data数据的长度,那么用户进程A发送数据到B的过程是,A会使用系统调用把data数据拷贝到系统内核然后返回到应用程序,此时A进程根本就不知道进程B的TCP层是否收到了data数据。因为A进程只保证把data数据拷贝到操作系统内核,发送data数据到B进程是由A进程所在系统内核来完成的。

(在A进程把数据拷贝到内核后假设物理线路出现了问题)那么问题来了,TCP可靠性特性我们该怎么理解。好吧,我对她的理解是TCP可靠性特性是针对操作系统内核层面来说的,因为只有A进程所在系统内核知道B进程的TCP端是否收到了数据data,这个是因为ack。

那么问题又来了,TCP这个特性对应用进程有什么好处呢?假设我们要做一个应用层消息必须到达的应用,站在应用程序的角度传输层使用TCP和UDP好像也没什么区别,因为我们都需要在应用层做消息到达确认。

站在应用进程角度看发送端的传输层发送的数据永远无法保证接收端传输层能接收(假设物理链路有问题),感觉唯一的区别就是操作系统内核知道TCP传输的数据对方端是否收到,可是操作系统内核知道这个信息又有什么好处呢?

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:腾讯原创分享(一):如何大幅提升移动网络下手机QQ的图片传输速度和成功率下一篇:腾讯原创分享(二):如何大幅压缩移动网络下APP的流量消耗(上篇)
推荐方案
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部