1、客户端访问FTP服务器进行下载文件,由于FTP是基于TCP协议进行工作的,所以客户端在访问FTP服务器时必然会进行建立TCP连接。
2、通过在交换机上对任意端口进行抓包,来分析TCP的传输数据时报文交互的过程,以及TCP的窗口机制凸显的现象。

其中一项就是因为TCP协议在传输数据的过程对,会对接收到的TCP数据进行一个确认。
当对方发来一个Seq报文序号2、并承载100Byte的TCP数据,我成功收到且FCS检查无误之后,回复Flags-ACK置位1、ack序号=(收到的Seq+收到的数据大小)=4+100=104TCP报文进行确认。对方收到Seq为104的报文,就知道了我成功接收到了100Byte的数据。
(传输最大文件大小限制),而下载的index.html文件大小为1649Byte,需要分成1460+189两个FTP-DATA包进行传输ack=1651。





TCP成功建立之后,回复的TCP报文ackp字段只会将收到的报文中seq字段与Data字段大小进行相加成为ack字段的新值。
即:ack=seq+data,如果收到的TCP报文中data(载荷)=0,即ack=seq,也就是图中ack=seq=b+1的原因。
TCP通过滑动窗口机制来控制数据的传输速率,保障数据传输时不会因为其中一端传输太快导致数据丢失。
在TCP三次握手建立连接时,双方都会通过Window(win)字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小,单位Byte)。
教程中常常看到的数据交互都是发一个数据包就回复一个确认,这种主要为了让我们好理解,现实中如果需要实现这种一个数据报文就回复一个确认,就需要使用到TCP报文中的PSH字段。
如果网络中都是这样一包一回复,大量不必要的数据报文在网络中传输,易造成网络负载较重,使得传输效率降低。
窗口机制有个特点就是不断的接收数据放置在缓冲区中,直到缓冲区被占用满或者遇到PSH置位的TCP报文,才会进行数据转发,以及回复ACK进行数据确认。这样统一的回复有效减少了大量确认数据在网络中传输。
立即传送出去。
注:图中的win=3,表示可接收的数据包为3个。在实际环境中,该字段通常表示目前可接受处理的数据大小,单位Byte。

因为win表示的是本端目前所能接收的数据窗口大小,即目前可处理的数据量大小。自己发送的数据并不会占用win窗口量。
因为win表示的是本端目前所能接收的数据窗口大小,即目前可处理的数据量大小。自己发送的数据并不会占用win窗口量。