一个http包很大,在tcp层被分成了多个tcp包,如果某个tcp包丢失,应用层会读取这个http请求吗?

一个http包很大,在tcp层会被分段,即被分成了多个tcp包,如果其中某个tcp包丢失,并且重传失败,那应用层会读取这个http请求吗?

阅读 3.9k
1 个回答

tcp是可靠连接,你怎么理解“可靠”两个字?

补充回答。

答案是肯定的,但可能只能读取一部分,这要取决于丢失的包所在的位置。

具体来说,tcp向上层提供的数据肯定是按顺序排好的。比如一共有1 2 3 4 5五个包,假设前3个包的大小可以填满tcp的缓冲区,那么如果第4个包丢失,这时候并不会影响应用层接收前三个包。而如果是前三个包里面发生丢失,即使4 5都正常接收也不行,因为前面还有包没有收到,这时候tcp是不会向上层提供数据的。

这里面的关键是要了解tcp缓冲区,以及tcp所提供的顺序保证(这也是可靠性的一个方面)机制。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题