TCP/IP的三次握手、四次挥手

发布于:2022-12-14 ⋅ 阅读:(268) ⋅ 点赞:(0)

目录

七层网络模型​编辑

TCP/IP的三次握手

TCP/IP的四次挥手

为什么连接时是三次握手,断开连接时是四次挥手

如果已经建立了连接,客户端突然故障如何处理

socket、TCP/IP、HTTP的区别

socket

TCP/IP

HTTP

七层网络模型

  • IP、socket在网络层
  • TCP、UDP在传输层
  • HTTP在应用层
  • HTTPS是HTTP的安全版本

TCP/IP的三次握手

握手过程

  • 第一次握手:建立连接时,客户端进入SYN_SENT状态,客户端发送SYN包(seq = x)给服务器,等待服务器确定。
  • 第二次握手:服务器收到客户端的SYN包后进入SYN_RECV状态,给客户端发送一个ACK包(ack = x+1),用来告诉客户端服务器已经收到了SYN包并已确认,同时也给客户端发送一个SYN包(seq = y)。
  • 第三次握手 :客户端收到服务器的SYN+ACK包后进入ESTABLISHED状态,客户端向服务器发送ACK包(ack = y+1),当服务器收到这个ACK包后,服务器进入ESTABLISHED状态,此时双方TCP建立连接成功,可以开始全双工通信。

为什么需要三次握手

TCP连接是全双工的,即需要client和server两端发送消息的两个方向都要连接成功,那么为了保证两端都连接成功,至少需要三次通信来建立连接,次数增多了也是在浪费资源,所以需要三次握手。

TCP/IP的四次挥手

 

挥手过程

  • 第一次挥手:断开连接时,客户端发送FIN包(seq = u)到服务器。
  • 第二次挥手:服务器收到客户端的FIN包后并确认后,向客户端发送ACK包(ack = u+1,seq = v),同时服务器发送结束标识到应用层程序,应用层程序可以决定马上结束还是等服务器处理完数据后结束,结束后,应用层程序会关闭与服务器的连接。
  • 第三次挥手:服务器处理完数据后,应用层程序会关闭与服务器的连接,服务器发送FIN+ACK包(seq = w,ack = u+1)到客户端,然后关闭服务器。
  • 第四次挥手: 客户端收到服务器的FIN+ACK包后,发送结束标识到应用层程序,应用层程序关闭与客户端的连接,然后客户端向服务器发送ACK包(seq = u+1,ack =w+1),然后关闭客户端。

为什么需要四次挥手 

 因为TCP协议是一个全双工协议,在断开连接时必须单独拆开每一条信道,四次挥手的目的就是中断通信,终止数据传输,并且回收资源,此时两个方向的端点都没有任何关系,必须等两个方向都没有数据传输后,才能拆解虚链路,发现SYN包后就初始化一个序列号并确认SYN的序列号。因此必须单独在一个方向上终止该方向的数据传输,至少需要四次操作。

为什么连接时是三次握手,断开连接时是四次挥手

在连接时当服务器收到客户端的SYN包连接请求后,服务器可以直接发送SYN+ACK包,ACK包用来应答,SYN包用来同步,断开连接时,服务器收到客户端的FIN包后,可能不会马上关闭服务器,只能发个ACK包用来应答,只有当服务器的数据处理完毕,服务器才会发送FIN+ACK包关闭服务器。

如果已经建立了连接,客户端突然故障如何处理

服务器每收到一次客户端请求后都会重新启动TCP的保活计时器,时间一般是两个小时,两个小时后还收不到客户端的任何数据,服务器就会发送一个探测报文,随后每隔75s发送一个探测报文,当连续发送10个仍然没有反应,服务器会认为该客户端发生故障,从而关闭连接。

socket、TCP/IP、HTTP的区别

  • TCP/IP协议是一个协议栈,而socket是通信的基石,是对TCP/IP协议的封装,即socket是网络开发的接口
  • TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,HTTP协议是应用层协议,主要解决如何包装数据 

socket

  • socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。
  • socket包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

TCP/IP

  • 在不同网络之间实现数据传输的协议栈
  • 由TCP、UDP、IP、FTP、SMIP等协议组成的TCP/IP协议栈

HTTP

  • 建立在TCP/IP协议上的一种应用,包装在网络中传输的数据

网站公告

今日签到

点亮在社区的每一天
去签到