TCP协议的三次握手和四次挥手

来源:互联网 发布:htpc 播放软件 编辑:程序博客网 时间:2024/06/11 19:22

一、TCP/IP协议栈

主要有应用层、运输层、网际层和网络接口层,每层都有相应的协议

TCP/IP协议栈结构

在网络中,以太网数据包格式如下:

以太网数据包格式

二、TCP头部结构

TCP头部结构
在TCP头部有6个标志位,置1时表示有效
URG 紧急指针(urgent pointer)有效
ACK 确认序号有效
PSH 指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满
RST 一般表示断开一个连接
SYN 同步序号用来发起一个连接
FIN 发送端完成发送任务(即断开连接)

三、三次握手

三次握手

其中client_isn表示客户机选择的该连接的初始序列号,server_isn表示服务器选择的该连接的初始序列号,大写SYN表示TCP头部的标志位

第一次握手:客户端发出带有自己的初始序列号的请求,标志位SYN=1, 6个标志位如下所示:

第一次握手标志位

其中SYN表示同步序列,用来建立一个客户端到服务器端的连接,序列号为client_isn,确认号为0.

第二次握手:服务器端发出带有自己的初始序列号的报文应答,标志位为SYN=1,ACK=1如下所示:

第二次握手标识位

其中SYN用来同步,建立一个服务器端到客户端的连接,ACK用来表示确认序号有效, 即TCP头部的32为确认号有效,序列号为server_isn,确认号为client_isn+1

第三次握手:客户端发出一个应答确认,ACK=1,其他标志位0,标志位如下:

第三次握手标志位

其中ACK表示32位确认号有效,序列号为client_isn+1,确认号为server_isn+1。

TCP头部中,序列号可以认为是用来表示自己发出去的这个报文段中第一个数据字节的顺序号,确认号表示下一个期望收到的顺序号。

四、TCP传输数据

序列号表示自己发出去的这个报文段中第一个数据字节的顺序号,确认号表示下一个期望收到的顺序号,因此,标志位中ACK为1。

五、四次挥手

关闭一个TCP连接如下:

四次挥手
【PS:中断连接的可能是客户端也可能是服务器端】

假设客户端发起中断连接请求:
第一次挥手:客户端发出一个FIN来请求断开连接,标志位FIN=1,如下:

第一次挥手

其中ACK=1表示有期待的服务器端的顺序号,FIN=1表示客户端请求断开连接。

第二次挥手:服务器端确认客户端的请求,标志位ACK=1,如下:

第二次挥手

第三次挥手:服务器端请求断开和客户端的连接,标志位FIN=1,ACK=1,如下:

第三次挥手

其中ACK=1表示服务器端期望客户端对它的请求做应答,FIN=1表示服务器端请求断开与客户端的连接

第四次挥手:客户端对服务器断开连接的请求应答,标志位ACK=1,如下:

第四次挥手

其中ACK=1表示客户端同意服务器端断开连接。

在wireshark中抓包如下:

wireshark四次挥手

1 0