ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-05-20 17:33:28  阅读:185  来源: 互联网

标签:UDP ACK 报文 SYN TCP 连接 四次 握手


一、TCP协议

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

TCP:传输控制协议

UDP:用户数据报协议

TCP和UDP都属于传输层的

2、TCP连接

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

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

 

3、TCP协议

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

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

4、TCP报文段

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

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

 

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

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

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

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

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

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

 

二、TCP连接

1、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断开连接的四次挥手

 

 

过程:

(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端口号及其功能

五、UDP协议

1、UDP概念

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

花费的开销小

2、UDP报文的首部格式

 

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

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

 

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

 

 

 

标签:UDP,ACK,报文,SYN,TCP,连接,四次,握手
来源: https://www.cnblogs.com/weq0805/p/14790748.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有