HTTP的请求消息一般不会很长,一个网络包就能装下,但如果要提交表单数据,长度就可能超过一个网络报所能容纳的数据量,比如在简书上发布一篇长文章就属于这种情况。
image.png说明:之前TCP控制位中的序号就是用来表示发送的数据序号的,用来标识数据的先后顺序,方便服务器端进行数据的组装。
服务器端返回ACK号,标识收到了多少的数据见下图:
image.png
说明:根据序号和ACK号确认信息是否已经送达。
1、使用窗口有效管理ACK号
像上图中一样,每发送一个包,就等待一个ACK号的方式是最简单也是最简单的,但是如果在等待ACK号的这段时间什么都不做的话,那就太浪费了。为了解决这样的浪费,TCP采用了滑动窗口
方式来管理数据发送和ACK号操作。
基本思路是接收方需要告诉发送方自己最多能接收多少数据,然后发送方根据这个值对数据发送操作进行控制。其中最大数据量为窗口大小
。
具体过程:
接收方将自己接收缓存区的空余大小发送给发送方,发送方根据剩余的空间,进行数据发送,当接收方缓存区满后,不再发送。
当缓存区满后,数据被应用程序从缓存区中取出,此时缓存区空间又有了,发送方继续发送数据。
ACK号和窗口更新可以一起发送给发送方。
2、从服务器断开连接及产出套接字
image.png3、以太网及IP的包收发操作
包
:是由头部和数据两部分构成的,头部包含目的地址等控制信息。
路由器是按照IP协议规则传输包的设备
集线器是按照以太网规则传输包的设备
网友评论