欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

TCP的三次握手与四次挥手

程序员文章站 2022-06-28 19:22:29
TCP的三次握手与四次挥手 一、TCP(Transmission Control Protocol 传输控制协议) 二、TCP报文段(封装在IP数据报中) 1、端口号1)源端口号:发送方进程对应的端口号,源IP和端口的作用就是标志报文的返回地址。2)目标端口号:对应的是接收端的进程,接收端收到数据段 ......

tcp的三次握手与四次挥手

一、tcp(transmission control protocol 传输控制协议)

            tcp是面向对连接,可靠的进程到进程通信的协议
            tcp是提供全双工服务,即数据可在同一时间双向传输

二、tcp报文段(封装在ip数据报中)

TCP的三次握手与四次挥手

1、端口号
1)源端口号:发送方进程对应的端口号,源ip和端口的作用就是标志报文的返回地址。
2)目标端口号:对应的是接收端的进程,接收端收到数据段后,根据这个端口将数据对应给应用程序的接口。
注:tcp报头中的源端口号和目的端口号同ip数据报中的源ip与目的ip唯一确定一条tcp连接。
2、序号:发送端为每个字节进行编号,便于接收端正确重组。
3、确认号:用于确认发送端的信息。
4、控制位
1)urg:紧急指针有效位。
2)ack:确认序号位,当该位为1时,用于确认发送方的数据。
3)psh:标志位为1时要求接收放尽快将数据端送达应用层。
4)rst:为1时通过重新建立tcp连接
5)syn:同步序号位,tcp需要建立连接时将该值设为1
6)fin:当tcp断开连接时将该位置为1
5、窗口值:用于说明本地可接收数据段的数目,窗口大小是可变的。以此控制发送端发送数据的速率,从而达到流量控制。
6、校验和:用来做差错控制
7、紧急指针:只有当 urg 标志置 1 时紧急指针才有效。
8、选项:位于tcp首部多大40字节的可选信息,最常见的可选字段是最长报文大小。
注:8个字段中较为重要的是端口号、序号、确认序号、以及控制位中ack、syn、fin这三个控制位。

三、tcp三次握手(通过wireshark抓包分析)

TCP的三次握手与四次挥手

pc1为真机,pc2为虚拟机centos,pc1与pc2绑定在同一块虚拟网卡vnet8上,pc1ip地址为192.168.90.10,pc2ip地址为192.168.90.40。提前在centos上搭建号网站,pc1访问pc2,然后通过抓包工具进行tcp的抓报,如下所示:

1、第一次握手

TCP的三次握手与四次挥手

如上图,通过抓包工具抓包发现,源地址(source)为192.168.90.10,源端口号(source port)为55604,目的地址(destination)为192.168.168.90.40,目的端口号(destination port)为80。初始序列号(sequence number)和确认序列号(acknowledgment number)都为0。第一次握手pc1使用一个随机端口号向pc2的80端口发送建立连接的请求,此过程最典型的表示就是tcp的syn控制位为1,其他五个控制位全为0。

2、第二次握手

TCP的三次握手与四次挥手

如上图,第二次握手,源地址以及端口号和目的地址和端口与第一次握手相反,初始序列号为0,确认序列号为1,并且控制位中的ack和syn都为1。第二次握手实际上分两部分完成:
1)pc2收到pc1的请求,向pc1回复一个确认信息,此过程标志就是tcp的ack控制位为1,其他五个控制位全为0,并且确认序列号是pc1的初始序列号加1。
2)pc2也向pc1发送一个建立连接的请求,此过程的标志与第一次握手一样,tcp的syn控制位为1,其他五个控制位全为0。

3、第三次握手

TCP的三次握手与四次挥手

如图,源地址以及端口号和目的地址以及端口号与第一次握手相同,其中初始序列号即为第二次握手的确认序列号1,确认序列号即为第二次握手的初始序列号加1。pc1收到pc2的回复(包含请求和确认),也要向pc2回复一个确认信息,此过程最典型的标志就是tcp的ack控制位为1,其他五个控制位为0,而且确认序列号是pc2的初始序列号加1。这样完成了三次握手,在pc1和pc2之间建立了tcp连接。

四、tcp连接终止的四次挥手

TCP的三次握手与四次挥手

此时pc1为centos,对应的ip地址为192.168.90.40,pc2为真机,应该的ip地址为192.168.90.10,通过抓包来分析他断开连接的过程,如下所示:

1、第一次挥手

TCP的三次握手与四次挥手

pc1(服务器)向pc2客户端发送fin和ack位为1的tcp报文段。

2、第二次挥手

TCP的三次握手与四次挥手

pc2客户端向pc1服务器返回ack位为1的tcp报文段。

3、第三次挥手

TCP的三次握手与四次挥手

pc2客户端向pc1服务器发送fin和ack位为1的tcp报文段。

4、第四次挥手

TCP的三次握手与四次挥手

pc1服务器向pc2客户端返回ack位为1的tcp报文段,完成终止连接。

5、tcp四次挥手的半关闭概念(tcp一方终止发数据但可以接收)
1)pc2客户端fin报文段,半关闭了这个连接,pc1服务器发送ack报文段接收半关闭。
2)pc1服务器继续发送数据,而pc2客户端只发送ack确认,不再发送任何数据。
3)当pc1服务器把所有数据都发送完毕时,就发送fin报文段,pc2客户端再发送ack报文段,这样就关闭了tcp连接。