tcp三次握手和四次挥手原理解析

计算机网络基础基础知识系列:tcp模型状态下的三次握手链接,四次挥手断开链接过程分析

tcp/ip模型是计算机网络中的经典模型相对于osi模型tcp/ip模型是实际实现了的网络模型。

  • 相对于osi模型的七层结构,tcp/ip模型总共只分为了四层
ositcp/ip功能tcp/ip协议族相关设备传输单位
应用层应用层文件传输,电子邮件,文件服务等Http、FTP、等终端、服务器-
表示层数据格式化,代码转换,数据加密等LPP、GIF、JPEG等终端、服务器-
会话层通讯管理,建立或者断开通信链接RPC、SSL、TLS终端、服务器-
传输层传输层管理两个网络终端之间的数据传输TCP,UDP等终端、服务器
网络层网络层网络地址管理和路由选择IPV4/IPv6、ICMP等路由器、三层交换机分组,包
数据链路层网络接口层互联设备之间传送和识别数据帧ARP、PARP等网桥、二层交换机
物理层比特流与电子信号之间的转换IEEE 802.3/802.2网卡、网线、集线器、中继器、调制解调器比特位

由上表可以其实可以看出tcp协议是工作在tcp/ip模型的传输层的,它主要的功能是负责通讯管理,建立链接或者断开链接。那么它是如何建立链接,和断开链接的呢?下面我们就来分析分析

tcp的三次握手建立链接

三次握手流程图

过程分析
  • 第一次握手:建立链接客户端发送:SYN包[seq=x]到服务器,并进入SYN_SEND状态,等待服务器确定;
  • 第二次握手:服务器收到SYN包,必须确定客户的SYN[ack=x+1] 同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确定包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLSHED状态,完成三次握手。
    这个过程非常形象,
    通俗的来说就是
    •   客户端问服务器:听得到吗?
        服务器回答:听得到,你呢?
        客户端回答:我也听得到
      

补充扩展知识:

如果第一次握手后,服务器收到了客户端发来的SYN,并且回复了SYN-ACK,
这时候客户端突然挂了,这就会导致服务器再没有收到客户端的响应,就会重发SYN-ACK,
一般再linux系统下默认为重发五次,五次的时间间隔是前一次时间间隔的2倍,
在第五次发出后还需要等待32秒,才能够判定超时,所以总共需要63秒,如果客户端还没有响应,则服务器就会断开链接。
这就导致了服务器的SYN风险,即恶意向服务器发送SYN。

另外如果建立链接后客户端出现故障,tcp协议还提供了一个保活机制,即向对方发送保活探测报文,如果未收到响应则继续发送。
直到发送探测报文的次数达到保活探测数,这时对方主机将被确认为不可到达,连接也将被中断。

以上就是三次握手的过程,经历过三次握手后服务器和客户端就能建立连接,然后就可以进行数据的传输了

tcp的四次挥手断开链接

tcp的四次挥手断开链接过程

过程分析
  • 第一次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传输,客户端进入FIN_WAIT_1状态
  • 第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确定序号为手到序号+1(与SYN相同,一个ACK给客户端,确定序列号为收到序列号+1,同样与SYN相同,一个FIN占用一个序号)服务器端进入CLOSE_WAIT状态。
  • 第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态;
  • 第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态接着发送一个ACK给服务器,确定序号为收到序号+1,服务器进入CLOSED状态,完成四次握手链接断开。

这个过程非常形象,
通俗的来说就是

		客户端对服务器说:我说完了
		服务器说:我知道你说完了,容我再说两句,
		服务器说:(最后的两句)说完了咱们断了吧
		客户端:断开链接。
		

扩充知识

在四次挥手时客户端在TIME_WAIT状态时后等待2msl:
	之所以等待完全是因为确保服务器有足够的时间收到ACK包,还有就是避免新旧连接的混淆。

为什么需要四次握手才能断开连接:
	因为tcp协议下的连接都是全双工的,这就要求发送方和接收方都需要FIN报文和ACK报文。

服务器出现大量CLOSE_WAIt状态的原因:
			1.代码问题,一般出现这种情况都是程序中没有释放资源导致的
			2.配置问题:如果程序释放了资源,那就有可能是处理请求的线程配置有不合理的设计,可以重点检查一下					


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值