tcp三次握手图解

TCP三次握手是为了保证客户端和服务端的可靠连接,目的是为了确保双方都有正常的发送和接收能力。下图是TCP三次握手的流程图,描述了从客户端向服务端发起连接的全过程。下面我会逐项解释图中的关键词和术语所代表的含义及作用。

左侧:客户端

  •  connect()

是发起连接请求的函数调用,应用程序调用这个函数后,操作系统会发起TCP三次握手。

  •  SYN_SENT

是客户端状态,表示SYN报文已经发送,等待服务端响应。

  • ESTABLISHED

表示三次握手完成,连接建立成功,可以进行数据传输了。

 右侧:服务端

  • listen()

表示服务端正在监听某个端口,准备接受客户端的连接。

  •  LISTEN

是服务端状态,处于监听状态,等待接收连接请求。

  • SYN_RCVD

表示服务端接收到客户端的SYN请求,并已经回复了带有SYN+ACK的响应包。

  • ESTABLISHED

表示服务端状态变为已连接,双方可以开始通信。

  • accept()

是服务端接受客户端连接的函数,在三次握手完成后,这个函数会返回一个新的socket连接实例,用于后续通信。

中间:通信过程的三次握手

  • 第一次握手:SYN,seq=x

客户端发送一个SYN报文(同步报文),请求建立连接,seq=x表示客户端的初始序列号为x。

作用:告诉服务端客户端想要建立连接,并传递初始序列号。

  • 第二次握手:SYN,seq=y,ACK=x=1

服务端收到后,回复一个同时带有SYN和ACK的报文,seq=y表示服务端的初始序列号为y,ACK=x+1表示服务端确认收到客户端的序列号x,所以返回x+1。

作用:告诉客户端收到了请求,同意连接,并附上自己的初始序列号。

  • 第三次握手:ACK=y+1

客户端收到服务端回复的带有SYN和ACK报文后,发送一个ACK确认报文,ACK=y+1表示客户端确认收到服务端的序列号y,所以返回y+1。

作用:告诉服务端收到了回复,至此连接建立完成。

 

总结

SYN(同步位):用来发起连接。

ACK(确认位):用来确认收到对方的消息。

seq(sequence number):表示序列号,用于TCP的可靠传输。

x/y:是客户端和服务端各自初始选择的随机序列号。

x+1/y+1:是对序列号的确认。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值