TCP的连接建立(三次握手)
- 客户端的TCP首先向服务器端的TCP发送一个特殊的TCP报文段。该报文段中不应包含应用层数据。但是在报文段的首部中的一个标志位(SYN比特)置为1。因此这个特殊报文段被称为SYN报文段。另外客户端会随机选择一个初始序号(client_isn),并将此编号放置于该起始的TCP SYN报文段的序号字段中,并发送给服务器。
- 一旦包含TCP SYN报文段的IP数据报到达服务器主机,服务器会从该数据报中提取出TCP SYN报文段,为该TCP连接分配TCP缓存和变量,并向该客户TCP发送允许连接的报文段。首先,SYN的比特位被置为一。其次,该TCP报文段首部的确认号字段被置为client_isn+1。最后,服务器选择自己的初始序号(server_isn),并讲其放置到TCP报文段首部的序号字段中。该允许连接的报文段被称为SYNACK报文段。
- 在接收到SYNACK报文段后,客户也要给该连接分配缓存和变量。客户主机则向服务器发送另外一个报文段;该客户端通过将值server_isn+1放置到TCP报文段首部的确认字段中来完成此项工作,因为连接已经建立了,所以该SYN比特被置为0。这个阶段可以在报文段负载中携带客户到服务器的数据。
在以后每一个报文段中,SYN比特都被置为0。
TCP连接断开(四次挥手)
- 客户端打算关闭连接,发送一个关闭连接命令,客户端TCP向服务器进程发送一个特殊的TCP报文段,将FIN比特置为1。
- 当服务器接收到该报文段后,就向发送方回送一个确认报文段。
- 然后,服务器发送它自己的终止报文段,,其FIN被置为1。
- 最后该客户端对这个服务器的终止报文段进行确认。此时,在两台主机上用于连接的所有资源都被释放了。
|