采用TCP协议连接的2端,在通讯的过程中协议的细节有一定的差别。
连接建立阶段
连接发起者syn中的seq与连接接收者syn中的seq相差1
在连接建立时,双方需要通报自己的seq开始值,滑动窗口大小,包的最大字节数
滑动窗口的使用,使得通讯的两端不需要收到一个数据后,就马上发出ack,可以一直发送,只要seq不超过初始seq值+滑动窗口值
数据传输
数据接收者的ack中的seq等于数据发送者的seq+数据长度
有时可能多次接收数据,发送一次ack
每次发送数据时,都要将数据从应用层拷贝到内核,数据在发送前都要检查连接是否有异常
连接关闭
连接关闭者发起的fin中seq与连接关闭ack的seq值相同
tcp协议中有一个重要的协议命令reset,reset表示重置连接,一般来说server校验client信息不符时,会发送rst到client,这个命令常用于server意外重启,很多防火墙也用它来断开client连接。
reset命令的发起者,reset命令一发送,发送缓冲区中的所有包都被清掉,而接收者的接受缓冲区的数据也会被清理。
fin命令是正常关闭,它会根据缓冲区的顺序来发送,就是发送fin之前的数据都要发送完毕,才会发fin包,所以rst用来异常关闭连接的。
阅读(1455) | 评论(0) | 转发(0) |