TCP三次握手四次挥手抓包解析

TCP三次握手四次挥手抓包解析

上次面试,被问到TCP 三次握手,是怎么回事,直至呜呜,只说出了个大概的意思,甚是不好意思;

因没有实际根据抓包分析来解读TCP三次握手的过程,鉴于此,周末写了个TCP服务器、客户端通信程序(),将服务器下载到开发板,客户端PC 机上运行,通过wireshark抓包工具来抓取TCP的通信过程。

下图为TPC通信三次握手和四次挥手抓包截图:黄色部分为三次握手后抓取的通信数据包:hellobbbbb

TCP三次握手四次挥手抓包解析_第1张图片

从上图中,可知wireshark抓取到的数据封包列表(Packet List Pane) 格式:

封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 你可以看到不同的协议用了不同的颜色显示。

(高亮代表详细信息在下方说明)

TCP三次握手四次挥手抓包解析_第2张图片

封包详细信息 (Packet Details Pane)

这个面板是我们最重要的,用来查看协议中的每一个字段。各行信息分别为

Frame:    物理层的数据帧概况

Ethernet II:  数据链路层以太网帧头部信息

Internet Protocol Version 4: 互联网层IP包头部信息

Transmission Control Protocol:   传输层T的数据段头部信息,此处是TCP

Hypertext Transfer Protocol:   应用层的信息,此处是HTTP协议

参考此博文:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html

下图为客户端,服务器通信收发的数据:

TCP三次握手四次挥手抓包解析_第3张图片

下面用TCP协议,客户端(PC)向服务器(开发板)发送数据,通过wireshark抓包的方式,解析TCP协议3次握手的过程:

 

1次握手:No.522

TCP三次握手四次挥手抓包解析_第4张图片


第二次握手:No.523

TCP三次握手四次挥手抓包解析_第5张图片

次握手:No.524

TCP三次握手四次挥手抓包解析_第6张图片


TCP的三次握手,大致可以这么理解:假设PC_BSeriver) 、PC_AClient

握手1 PC_A:向服务器发送SYN报文,说明我要开始建立链接了; SYN = 1; Seq = X

握手2 PC_B:服务器收到客户端的请求后,给客户端发送SYN报文,以及应答数据(收到的序号+1); SYN = 1; ACK = 1; Seq = Y; ack = X+1

握手3 PC_A:客户端再次向服务器发送SYN报文,此次表示确认收到的数据; ACK = 1; Seq = X+1; ack = Y+1

故:确认的应答数据ack = 收到的序号Seq + 1

发送的序号Seq = 收到ack,若没有收到ack应答数据,则发送随机数;

【握手其实就是确保客户端链接服务器时,确保链接成功:客户端给服务器发送SYN 里面包含序号,服务器收到后将序号+1作为应答数据,以及服务器端的自己的序号一块发给客户端,客户端收到后,先确认自己的请求数据是否正确,若正确,则在将收到的服务器的序号+1作为应答数据,发给服务器确认】


【一般要发送报文时,确认序号为收到的序号+1;      序号为收到的确认序号 】


三次握手的流程图,如下所示:

TCP三次握手四次挥手抓包解析_第7张图片










你可能感兴趣的:(linux,应用程序开发,linux,网络开发)