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

一、TCP协议

1、TCP/IP协议族的传输层协议

TCP:传输控制协议

UDP:用户数据报协议

TCP和UDP都属于传输层的

2、TCP连接

通过Wireshark抓包来分析三次握手的过程:

下图是TCP连接的三次握手分别发送SYN报文、SYN+ACK报文、ACK报文

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

3、TCP协议

TCP是面向连接的、可靠的进程到进程通信的协议

TCP提供双工服务,即数据可在同一时间双向传输

4、TCP报文段

TCP将若干字节构成一个分组,叫报文段

TCP报文段封装在IP数据报中

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

 

序号:发送端为每个字节进行编号,便于接收端正确重组

确认号:用于确认发送端的信息

窗口大小:用于说明本地可接收数据段的数目,窗口大小是可变的

SYN:同步序号位,TCP需要建立连接时将该值设为1

ACK:确认序号位,当该位为1时,用于确认发送方的数据

FIN:当TCP断开连接时该位置为1

 

二、TCP连接

1、TCP连接建立的过程称为三次握手

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

 

 

SYN=1,确认Y发过来的数据是否有效

ACK=1,说明传送数据有效(小写的Ack是序号)

过程:

① 第一次握手:客户端向服务器发送连接请求报文,SYN=1,初始序列号Seq=x,客户端进入SYN-SENT(同步已发送)状态(SYN报文段不能携带数据,但要消耗一个序号)

② 第二次握手:服务器收到请求报文之后,发出确认报文,SYN=1,ACK=1,确认号是Ack=x+1,初始系列号Seq=y,服务器进入SYN-RCVD(同步收到)状态(SYN+ACK报文也不能携带数据,但要消耗一个号)

③ 客户端收到报文之后,要向服务器给出确认,发出确认报文,ACK=1,确认号Ack=y+1,初始序列号Seq=x+1,当服务器收到之后双方建立连接。(ACK报文段可以携带数据,不携带数据则不消耗序列号)

TCP客户端发送最后一次确认的原因是:主要防止已经失效的连接请求报文又突然传送到了服务器,从而产生错误

 

 

 

2、TCP断开连接的四次挥手

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

 

 

过程:

(1) 第一次挥手:客户端发出释放连接报文,并停止发送数据,FIN=1,ACK=1;

(2) 第二次挥手:服务器收到释放连接报文,并发送报文给客户端,报文中ACK=1;此时服务器进入关闭等待状态(半关闭状态)

(3) 第三次挥手:客户端收到报文之后,进入终止等待2的状态,等待服务器发送释放连接报文,服务器将最后的数据发送完毕之后,又发送FIN/ACK报文,FIN=1,ACK=1

(4) 第四次挥手:客户端收到之后,发送ACK报文,ACK=1

(5) 服务器收到之后,双方断开连接

三、TCP连接状态类型

1、半关闭

当TCP链接中A向B发送FIN请求关闭,另一端B回应ACK之后,并没有立即发送FIN给A,A处于半连接状态(半开关),此时A可以接收B发送的数据,但是A已经不能再向B发送数据

2、半连接

发生在TCP三次握手中

如果A向B发起连接,B也按照正常情况相应了,但是A不进行第三次握手,这就是半连接,

半连接攻击:半连接,会造成B分配的内存资源就一直这么耗着,直到资源耗尽(SYN攻击)。

3、半打开

如果一方关闭或者异常关闭(断电、断网),而另一方并不知情,这样的连接称之为半打开,处于半打开的连接,如果双方不进行数据通信,是发现不了问题的,只有在通信才真正的察觉到这个连接已经处于半打开状态,如果双方不传输数据的话,仍处于连接状态的一方就不会检测另外一方已经出现异常

解决方法:

如何解决半打开问题,引入心跳机制就可以察觉半打开

如果需要发数据的话,这边收到之后其实发现这个连接并不存在了,就会恢复RST包告知,这个时候就需要重新建立连接了

四、常用的TCP端口号及其功能

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

五、UDP协议

1、UDP概念

无连接、不可靠的传输协议(没有重传机制,TCP有RST)

花费的开销小

2、UDP报文的首部格式

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

UDP长度:用来指出UDP的总长度,为首部加上数据

校验和:用来完成对UDP数据的差错检验,它是UDP协议提供的唯一的可靠机制

 

3、常见的UDP端口号及功能

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

 

 

 

上一篇:Wireshark抓包,常用的过滤选项


下一篇:SYN攻击原理