网络进阶与架构(day 28)

TCP三次握手

tcp之所以称为稳定,可靠的。因为建立连接的时候要经过三次握手
tcp三次握手目标:与端口建立连接
udp没有三次握手建立连接的过程,是直接连接

①客户端发出建立连接请求:SYN建立连接请求,发出seq的随机数(假设seq=100)
②服务端口收到客户端请求:ACK(确认),SYN(与客户端建立连接),发出ack=seq+1(101),seq随机666
③客户端收到服务端请求与确认:发出ack确认建立连接,发出ack=seq+1(667),seq=ack(101)

以上数据总结:seq=上一步的ack,ack=上一步的seq+1

TCP四次挥手

四次挥手目的:断开连接

①客户端:发出断开连接请求:(FIN)断开连接请求,seq=1000,ack=668
②服务端:收到客户端请求,确认(ACK),确认断开,seq=668,ack=seq+1(1001)
③服务端:向客户端发出断开连接请求,(FIN)断开连接请求,seq=668 ack=seq+1(1001)
④客户端:确认收到请求,断开连接,(ACK)确认收到请求,seq=1001,ack=seq+1(669)

连接断开

常见TCP中的标记位

抓包时看到的标记位
SYN       sync同步请求,与服务器端口建立连接
ACK       ack确认(回复:收到)
FIN        finnish/final 结束:断开连接
PSH       表示传输数据

seq,ack
seq      sequence 序列号,随机
ack      ack,确认号

TCP/UDP区别

TCP注重稳定,UDP注重效率
同为4层协议(OSI)
TCP:传输控制协议:基于3次握手4次挥手,可靠连接
UDP:用户数据报协议:不可靠连接

TCP/UDP数据包结构

TCP的11种状态转化

目标:掌握tcp三次握手,四次挥手的时候客户端,服务端常见状态
tcp3次握手,4次挥手的时候需要经历一个过程,在建立连接和断开连接的时候,服务端和客户端就有一些状态
最容易理解的状态:CLOSED关闭      establish建立连接

三次握手的状态

TCP三次握手状态转换简单说明:
准备1.:首先,建立连接之前服务器和客户端的状态都为CLOSED.
准备2.:服务器创建socket后开始监听(启动服务),变为LISTEN状态。
客户端3.:SYN请求,客户端请求建立连接,向服务器发送SYN报文,客户端的状态变为SYN_SENT
服务端4.:服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD,(收到了客户端发送的SYN请求)
客户端5.: 然后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED
服务端6.:服务器收到客户端的ACK后也变为ESTABLISHED。

此时3次握手完成,连接建立!

四次挥手的状态

客户端01:客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1
服务端02.:服务器收到FIN后向客户端发送ACK,服务器状态变为CLOSE_WAIT
客户端03.:客户端收到ACK后就进入FIN_WAIT2状态。此时连接已经断开了一半了。如果服务器还有数据要发送给客户端,就会继续发送。
服务端04.:直到发完了,就发送FIN报文,此时服务器进入LAST_ACK状态
客户端05.:客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态,再过了2MSL长的时间后进入CLOSED状态。
服务端06.:服务器收到客户端的ACK就进入CLOSED状态。

此时四次挥手完成,连接断开!

第十一种状态补充

CLOSING状态表示: 客户端发了FIN,但客户端在FIN_WAIT状态时没有收到服务器的ACK确认字段,却收到了服务器的FIN字段,这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外。

tcp11种状态小结

核心必会:CLOSED,ESTABLISHED,LISTEN,TIME_WAIT,CLOSE_WAIT

逐渐掌握:FIN_WAIT,FIN_WAIT2,CLOSING,SYN_SENT,LAST_ACK

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部