学习:TCP/UDP协议分析(TCP三次握手)

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。

TCP工作在网络OSI的七层模型中的第四层————传输层

数据从应用层发下来,会在每一层都会加上头部信息,进行 封装,然后再发送到数据接收端。

在数据传输之前,所有基于TCP协议进行通信都需要通过三次握手来建立可靠的连接。


先介绍TCP的三次握手四次挥手

有关TCP标志位 flags

SYN(synchronous建立联机) 

ACK(acknowledgement 确认) 

PSH(push传送) 

FIN(finish结束) 

RST(reset重置) 

URG(urgent紧急)

Sequence number(顺序号码) 

Acknowledge number(确认号码)

红框所圈处:TCP进行三次握手的数据包

第一次握手:主机A 通过向 主机B 发送一个带有(SYN)标志位和SEQ序列号的数据包 并且进入SYN SENT状态 等待服务器确认,在下面的数据包中SYN1,SEQ则为1812515538

第二次握手:主机B 收到 主机A 的请求后,会进入SYN-RECEIVE状态,再回复一个带有确认应答(ACK)和请求同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事: 我已经收到你的请求了,你可以传输数据了,在下面的数据包中SYN1ACK确认1SEQ1891499098ack第一次握手中的SEQ+1

第三次握手:主机A收到这个数据段后,再发送一个确认应答,表示确认已收到 主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了,这样3次握手就完成了,主机A和主机B 就可以传输数据了,此时的数据包为ACK1SEQ第一次握手中的SEQ+1ack第二次握手SEQ+1,该报文发送完毕后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

问题:每次发送请求时为什么ack要+1?

ack大家可以理解为代表下一个数据包的编号,这也就是为什么第二请求时,ackSEQ+1,来保证下一次的通信时可用的,来认证的确是对方的信息

问题:SEQ的作用?

SEQ:序列号,什么意思呢?当发送一个数据时,数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接受方才能对数据包进行再次拼接。


总结图:

原文地址:https://www.cnblogs.com/zpchcbd/p/12291007.html