您的位置:首页 > 理论基础 > 计算机网络

在TCP半开连接上发送数据,结果怎样?

2017-10-20 11:03 246 查看
问题描述:假设现在有一个TCP长连接A和B,B端突然遭遇停电断网等突发事件close掉了,此时处于半开连接状态,假设不考虑心跳包机制、A端的发送内核缓冲区没有满,此时A端写数据发送会成功吗?为什么?

肯定会成功,send函数跟实际发送其实没啥关系,send函数更确切的含义是copy_data_from_userspace_to_kernelspace,只有内核空间有富余就会成功,不过很显然B端是接收不到数据的,A发送后数据后期望收到B的ACK包却一直收不到,根据tcp机制,A端的协议栈会自动进行重传,当重传次数达到上限后就发发送RST包重置连接,半开连接就彻底死掉了。

发散一下,如果说A和B都是好的,A端send成功的数据B端一定能收到吗?

答案是未必,首先send成功表明数据已经放到了A的发送内核缓冲区中,如果B端的接收内核缓冲区满了是没有办法收到数据的,在B端用tcpdump也是抓不到包的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tcp 网络
相关文章推荐