TCP传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在IP报文首部的源IP地址、目的IP地址,以及TCP数据报首部的源端口地址和目的端口地址。TCP首部结构如下:
其中在TCP连接和断开连接过程中的关键部分如下:
三次握手
三次握手的过程如下:
这里有几点需要说明一下:
下面是一个简单的客户端/服务器端连接程序,在Linux环境下,开启三个终端,在第一个终端输入命令
然后在第二个终端运行服务器端程序:
最后在第三个终端运行客户端程序:
完了之后,我们可以在第一个终端看到抓包的结果,如下:
前三个数据包就是三次握手的三个数据报了。我们逐个分析一下,第一个数据报是由客户端发送到服务器端,随机产生一个序号seq = 830831828。然后第二个数据报是由服务器端发回的确认,随机产生一个序号seq = 2690963443,然后根据接收到的请求数据报将确认序号设置为830831829。然后第三个数据报是有客户端对服务器端确认数据报的确认,可以看出确认序号为2690963444
四次挥手
连接双方在完成数据传输之后就需要断开连接。由于TCP连接是属于全双工的,即连接双方可以在一条TCP连接上互相传输数据,因此在断开时存在一个半关闭状态,即有有一方失去发送数据的能力,却还能接收数据。因此,断开连接需要分为四次。主要过程如下:
主要过程如下:
这里有几点需要说明:
http://blog.csdn.net/hulifangjiayou/article/details/47283387