TCP的三次握手与四次挥手

本文深入解析了网络通信的基础知识,包括OSI七层模型与TCP/IP四层模型。重点阐述了TCP的三次握手与四次挥手过程,详细解释了为何需要这些步骤以确保连接的可靠建立和安全断开。同时,讨论了服务器在面对SYNFlood攻击时的防护措施以及CLOSE_WAIT状态产生的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络基础知识

OSI七层协议

image.png

  1. 物理层主要定义物理设备标准,主要作用是传输Bit流,网卡工作这这层中
  2. 数据链路层,在传输bit流的过程中会产生错传、数据传输不完整的可能,因此数据链路层定义如何格式化数据,以及如何控制对物理介质的访问,本层将bit数据组成了帧,其中交换机在本层工作,对帧解码,并根据帧中的信息把消息发送到正确的接收方
  3. 网络层,主要功能将网络地址翻译成对应的物理地址,路由器数据网络层,此层的数据称为数据包,此层的协议为IP协议

image.png

  1. 传输层,传输层解决了主机间的传输,并且解决了传输质量,协议有TCP/UDP
  2. 会话层,建立和管理应用程序之间的通信
  3. 表示层,解决不同系统之间的通信语法问题

image.png

  1. 应用层,更方便的应用层网络接收到的数据 http协议

image.png

TCP/IP

OSI的实现:TCP/IP四层网络模型

TCP/IP是协议族的统称

image.png

image.png

TCP的三次握手与四次挥手

TCP简介:

  • 面向连接的、可靠的、基于字节流的传输通信协议
  • 将应用的数据流分割成报文段并发送给目标节点的TCP层
  • 数据包都有序号,对方收到则发送ACK确认,未收到则重传
  • 用奇偶校验和函数来检验数据在传输过程中是否有误

2635580881-58b7ca8173112_fix732.webp

TCP三次握手流程

image.png

三次握手:首先客户端和服务器都是关闭状态,假设客服端主动打开,服务器被动打开

服务器先创建传输控块时刻准备接收连接请求,服务器进入listen监听状态,客户端发出连接请求报文,报文头syn=1,初始序号seq=x,此时客户端进入同步已发送状态,发送过去的报文段是不能携带数据的,并且会消耗掉一个序号,这是第一次握手

服务器接收到如果同意连接就发送确认报文,确认报文中包含了SYN=1,ACK=1,seq=y,ack=x+1,因为x序列号已经消耗,所以seq等于x+1,发送完成后服务器进入同步收到状态,这是第二次握手

当客户端收到确认报文后,会向服务端一个给出一个确认,ACK=1,seq=x+1,ack=y+1,发送完成后客户端进入已建立连接状态,这个报文段可以携带数据,如果不携带数据就不会消耗seq序号

当服务器收到确认后也会进入已建立连接状态,三次握手完成

总结

image.png

为什么需要三次握手才能建立连接

为了初始化Sequence Number的初始值

首次握手的隐患-sun超时

问题原因

  • Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认
  • Server不断重试直至超时,Liunx默认等待6秒才断开连接
  • 可能会收到SYN Flood风险,恶意程序不停的发,让连接耗尽不能处理正常请求

针对SYN Flood的防护措施

SYN队列满后,通过tcp_syncookies参数回发SYN Cookie

若为正常连接则Client会回发SYN Cookie,直接建立连接

TCP的四次挥手

image.png

image.png

为什么会有Time_wait状态

原因

  • 确保有足够的时间让对方收到ACK包
  • 避免新旧连接混淆

为什么需要四次挥手才能断开连接

因为全双工,发送方和接收方都需要FIN报文和ACK报文

服务器出现大量CLOSE_WAIT状态的原因

对方关闭socket连接,我方忙于读或写,没有及时关闭连接

  • 检查代码,特别是释放资源的代码
  • 检查配置,特别是处理请求的线程配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值