先来张图片-.-
ACK:确认标志
SYN:同步序列
ISN:初始序列号
TCP协议工作在传输层,是一种可靠的面向连接的数据流协议。TCP之所以可靠,是因为它保证了传送数据包的顺序。顺序是用一个序列号来保证的。响应包内也包括一个序列号,表示接收方准备好这个序列号的包。在TCP传送一个数据包时,它会把这个数据包放入重发队列中,同时启动计时器,如果收到了关于这个包的确认信息,便将此数据包从队列中删除,如果在计时器超时的时候仍然没有收到确认信息,则需要重新发送该数据包。另外,TCP通过数据分段中的序列号来保证所有传输的数据可以按照正常的顺序进行重组,从而保证数据传输的完整。
TCP通讯中主要有连接的建立、数据的传输、连接的关闭三个过程。每个过程完成不同的工作,而且序列号和确认号在每个过程中的变化都是不同的。
TCP建立连接,也就是三路握手,需要三步完成。发送第一个SYN的一端执行的是主动打开。而接收这个SYN并发回下一个SYN的另一端执行的是被动打开。过程大致如下:
1、客户端向服务端发送一个同步数据宝请求建立连接,数据包中包括客户端产生的一个随机序列(Seq = ISN(c))确认号为0;
2、服务端收到这个同步数据包后会对客户端进行一个同步确认,这个数据包包括服务端产生的一个初始随机序列(ISN(s)),确认号为客户端产生的随机序列+1(ISN(c)+1);
3、客户端收到这个同步数据包在对服务器进行一个确认,序列号为上一个同步请求的序列号+1(ISN(c)+1),确认号为服务器的初始序列+1(ISN(s)+1);
发送首个SYN的一方被认为是主动的打开一个连接。如上文所述,它通常是一个客户端。连接的另一方会接收这个SYN,并发送下一个SYN,因此它是被动的打开一个连接。通常,这一方称为服务器。