一、通过握手来连接
双方各自发送和接收几次,传递一些信息。
例如:
1、双方是开启了连接,并且是正常工作(因为对方有对数据包的确认回复)。
2、告诉对方下次能发送的最大数据包大小。(通过窗口来设置)
3、确定开始通信的序号。
二、每次发送数据包,对方都需要确认
1、发送方发送一个数据包,对方要回复确认。
2、确认代表对方已经成功收到。
三、超时重发
1、如果发送方发送数据包后,在一定时间内没有收到对方的确认包。(出现超时)
2、出现超时后,发送方需要再次发送相同的数据包。
四、确定数据包的顺序
1、给每个数据包设置1个序号。
序号一般是按照自然数递增,例如0、1、2。
2、发送方每次给数据包编号,接收方收到每个数据包后需要排序数据包。
如果顺序不一致,那么就不发送确认包。
也就是判断本次序号是否为上次序号加一。
五、告诉对方剩余多少空间
1、接收方回复确认的时候,告诉对方剩余多少缓存空间。
2、发送方只能发送不超过对方缓冲空间的数据包。
六、阻塞时询问
1、如果对方缓存满了,发送方需要定时询问有没有腾出空间。
2、接收方收到询问包,需要回复剩余空间。
七、关闭确认
1、当任意一方需要关闭,要通知对方。
也就是发送一个关闭信号包。
如果对方没有回复,也需要超时重发。
2、对方收到关闭信号包,需要回复一个确认关闭。
关闭时对当前缓冲的没有发送数据的处理:
第一种,立刻丢弃,退出程序。
第二种,定时发送,超过时间后丢弃。
第三种,继续发送,直到全部发送成功。