网络编程中的TCP协议的几点总结

本文探讨了TCP协议在实际网络环境中出现丢包的原因,并解释了为何TCP可靠却还需应用层增加额外机制来确保数据传输的可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在基于TCP协议的网络通讯中,经常会发生丢包现象,TCP协议不是可靠传输的吗?在网上经常听到大牛在说,可靠的TCP其实并不可靠......是呀,既然TCP是可靠的,为什么还要在应用层增加接收回执机制或是心跳机制呢?经过几天的思考、调研、讨论后我总结了以下几点:

1 TCP协议是提供端到端数据传输的非常可靠的协议,其内部的重传机制、序列号和确认号机制、滑动窗口机制等都可以保证这一点,所以丢包现象的问题不在于TCP协议,它是无辜的,否则它和UDP协议又有何区别。

2 TCP协议一般由操作系统实现(如:Windows、Linux等),基于TCP协议传输数据时,发送方和接收方都有一个缓存区,在网络良好(注意是良好或者说是理想情况下)的前提下,发送方写入发送缓存区的数据一定能到达接受方的缓存区。

3 因为实际的网络环境十分复杂,时好时坏,时快时慢,TCP协议对网络中断的情况反应是非常迟钝的,在网络已经中断的情况下,发送方仍有可能向发送缓存区写数据,当然已经写入到发送缓存区的数据是不可能到达接受方的,而且当发送方发现网络已经中断了,为了尽快回收资源,已经写入发送缓存区的数据肯定是丢弃的(丢包现象发生了)。

4 现在应该已经知道,基于TCP传输数据发生丢包现象的问题在于应用层而不在于TCP层了,那如何解决呢?非常简单,上述已经提到过,增加接收回执机制即可,即使缓冲区中的数据被操作系统丢弃了,我们仍可感知数据没有到达对方,仍可重发完成。

5 最后提一点,TCP层的 keep-alive机制是为了保持连接,在连接中断时及时通知上层发生中断异常,其不应替代应用层的心跳机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值