【Java】TCP连接中的三次握手和四次挥手

TCP连接中的三次握手四次挥手" title="三次握手和四次挥手">三次握手和四次挥手

一个呆头娃发布于 今天 06:25

TCP连接中的三次握手和四次挥手

1.协议简介

TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报,IP数据报由首部和数据两部分组成,IP报头中包含大量的信息,如源IP地址,目的IP地址,数据报长度,IP版本号等,数据部分呢保存传输层的数据,如保存TCP、UDP、ICMP等数据。

【Java】TCP连接中的三次握手和四次挥手

2.三次握手

在了解三次握手之前,我们需要先看TCP首部两个关键的属性——序号和确认号。序号字段代表报文端要发送的数据的第一个字节的序号;通信的任何一方收到消息都要发送一个确认报文,确认报文就需要一个确认号,它的值表示期望收到下一个报文段的序号值,也就是说在确认报文中确认号才会生效。

如何标识是否为确认报文呢?这里要关注六个标志位,分别是URG、ACK、PSH、PST、SYN、FIN。在这六个标志位中,又要重点关注三个,分别是

  1. ACK:当ACK=1==确认号字段有效,为确认报文==;当ACK=0,确认号无效
  2. SYN:同步比特SYN=1,表示这是一个==连接请求或请求接受报文==。
  3. FIN:用来==释放一个连接==。当FIN=1,表示次报文段的发送端的数据已经发送完毕了,用来释放连接。

【Java】TCP连接中的三次握手和四次挥手

第一次握手时,Client向Server发送一个连接请求,需要设置SYN=1,同时发送自己的序列号Seq到服务器。第二次握手,为服务器收到请求后,发送一个确认报文,ACK=1,同时发送一个确认号,是期望收到对方的下一个报文段的数据的第一个字节的序号,ACKnum=X+1,+1所示收到 SYN标识。第三次握手为客户端收到服务器的响应报文,他也要回复确认报文,确认报文ACK=1,ACKnum=Y+1

3.四次挥手

【Java】TCP连接中的三次握手和四次挥手

第一次挥手为客户端发送FIN=1,表示自己没有数据可以发送了,其次携带自己的序列号。第二次挥手为服务器端确认收到客户端的FIN包,发送一个确认包,表明自己接收到了客户端的关闭请求,但是这时并未准备好关闭连接。第三次挥手为服务器确认准备好关闭连接,这时发送FIN=1。第四次挥手为客户端收到服务端的关闭请求,发送一个确认包,服务器端收到这个请求后就关闭连接,不再回应客户端,客户端会等待一个固定时间后,自动关闭。

javatcp-ip

阅读 25更新于 今天 06:25

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

avatar

一个呆头娃

但行好事,莫问前程

6 声望

2 粉丝

0 条评论

得票时间

avatar

一个呆头娃

但行好事,莫问前程

6 声望

2 粉丝

宣传栏

TCP连接中的三次握手和四次挥手

1.协议简介

TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报,IP数据报由首部和数据两部分组成,IP报头中包含大量的信息,如源IP地址,目的IP地址,数据报长度,IP版本号等,数据部分呢保存传输层的数据,如保存TCP、UDP、ICMP等数据。

【Java】TCP连接中的三次握手和四次挥手

2.三次握手

在了解三次握手之前,我们需要先看TCP首部两个关键的属性——序号和确认号。序号字段代表报文端要发送的数据的第一个字节的序号;通信的任何一方收到消息都要发送一个确认报文,确认报文就需要一个确认号,它的值表示期望收到下一个报文段的序号值,也就是说在确认报文中确认号才会生效。

如何标识是否为确认报文呢?这里要关注六个标志位,分别是URG、ACK、PSH、PST、SYN、FIN。在这六个标志位中,又要重点关注三个,分别是

  1. ACK:当ACK=1==确认号字段有效,为确认报文==;当ACK=0,确认号无效
  2. SYN:同步比特SYN=1,表示这是一个==连接请求或请求接受报文==。
  3. FIN:用来==释放一个连接==。当FIN=1,表示次报文段的发送端的数据已经发送完毕了,用来释放连接。

【Java】TCP连接中的三次握手和四次挥手

第一次握手时,Client向Server发送一个连接请求,需要设置SYN=1,同时发送自己的序列号Seq到服务器。第二次握手,为服务器收到请求后,发送一个确认报文,ACK=1,同时发送一个确认号,是期望收到对方的下一个报文段的数据的第一个字节的序号,ACKnum=X+1,+1所示收到 SYN标识。第三次握手为客户端收到服务器的响应报文,他也要回复确认报文,确认报文ACK=1,ACKnum=Y+1

3.四次挥手

【Java】TCP连接中的三次握手和四次挥手

第一次挥手为客户端发送FIN=1,表示自己没有数据可以发送了,其次携带自己的序列号。第二次挥手为服务器端确认收到客户端的FIN包,发送一个确认包,表明自己接收到了客户端的关闭请求,但是这时并未准备好关闭连接。第三次挥手为服务器确认准备好关闭连接,这时发送FIN=1。第四次挥手为客户端收到服务端的关闭请求,发送一个确认包,服务器端收到这个请求后就关闭连接,不再回应客户端,客户端会等待一个固定时间后,自动关闭。

以上是 【Java】TCP连接中的三次握手和四次挥手 的全部内容, 来源链接: utcz.com/a/105359.html

回到顶部