首页 > 其他分享 >OSI和TCP的握手/挥手

OSI和TCP的握手/挥手

时间:2024-08-07 19:54:01浏览次数:13  
标签:断开 请求 ACK 握手 TCP OSI 服务器 连接 客户端

引子

关于3次握手,4次回收,OSI七层模型以及各层的作用,较为深入的整理一下。

OSI七层模型

全称 open-system-interconnect 。由国际组织提出的一套关于全球范围的计算机可以开放式通信的规范。OSI参考模型包含7层,从上到下分别是

从上到下

作用

请求发出的流程

相关协议

应用层

给网络应用程序使用,执行用户活动

用户在浏览器应用中输入URL并回车。
浏览器生成HTTP 请求

FTP-传输文件

HTTP/S-浏览网页

SMTP-邮件

Telnet-终端操作

表示层

转换 压缩 加密

在该层,请求数据会被处理

会话层

会话管理-建立和管理连接

认证

授权

在该层,请求数据被添加认证等信息

传输层

负责数据传输服务,保障通信的可靠性(分段,流量控制,差错控制)

在该层,请求数据被分段(TCP需要先建立连接)

TCP数据交付需要反馈,如万维网,电子邮件,FTP等,需要使用TCP协议

UDP数据交付无需反馈,更快

网络层

将数据包从A机传输到不同网络中的B机.

  • 逻辑寻址-IP寻址
  • 路由
  • 路径确定

在该层,数据段封装成数据包,同时添加IP信息

IP-互联网协议

OSPF

BGP-边界网关协议

IS-IS 中间系统到中间系统协议

数据链路层

物理寻址-在数据包中添加MAC地址,形成数据帧

在该层,数据包封装成数据帧,添加MAC地址信息

在局域网内,数据传输是基于MAC地址的,而不是IP地址

物理层

将二进制序列转换成信号通过物理硬件进行传输

在该层,数据帧被转为其他信号,然后传输

从请求的发出流程可以看到,OSI模型对请求进行逐层的封装处理。请求发起时,数据逐层封装;请求接收时,数据逐层解封装。(物理信号 - 字节流 - 数据帧 - 数据包 - 数据段 - 应用数据 - 解码等)

TCP 与 UDP

相同点是他们都是OSI模型中传输层的协议,不同点如下:

  • TCP是提供可靠连接的通信协议(可靠体现在:确认机制、重传机制、流量控制)
  • UDP则提供无连接的通信.(游戏丢帧,直播卡顿)
    • 不提供可靠传输,
    • 不保证数据一定被成功接收
    • 设计目的是提供简单高效的传输
    • 适用于实时性要求较高,快速且容忍少量丢失的应用

TCP 三次握手

  • 建立连接时的三次握手过程中,客户端不关心第三次的ACK是否被接收,因此不需要对方的ACK。因为如果对方接收到这次ACK,那么连接建立完成,皆大欢喜。如果对方没有收到第三次ACK,客户端发送后续数据肯定也得不到ACK应答,客户端会重新发起建立连接的请求。
  • 连接建立后,每一次传输都需要ACK确认,保证了数据的有序、不丢失。

思考:为什么不能是两次握手?

如果只有两次握手,可能会导致已失效的连接请求建立冗余连接。比如:

1. 客户端发送连接请求,但因为某些原因在网络中滞留,服务器没有收到。然后客户端再次发送连接请求,建立连接。

2. 这时第一个滞留的连接请求报文段仍可能在网络中传递,达到服务器后给出响应,导致建立连接.

3. 但客户端已经重新发起了连接请求,从而导致第一次请求产生冗余的连接。

三次握手就可以解决这种情况:在一定时间内,只有接收到第三次握手的ACK,服务端才认为这是一次有效的连接请求,才会建立连接。

四次挥手

过程描述:

1. 客户端请求断开连接:

        首先,客户端发送一个FIN(Finish)标志位给服务器,表示客户端不再发送数据。

2. 服务器确认客户端的断开请求:

        服务器收到FIN后,发送一个ACK(Acknowledgment)确认客户端的断开请求。此时,服务器进入半关闭状态,可以继续向客户端发送数据。

3. 服务器通知客户端可以断开连接:

        服务器发送一个FIN给客户端,表示服务器不再发送数据。

4. 客户端确认服务器的断开请求:

        客户端收到服务器的FIN后,发送一个ACK确认服务器的断开请求。此时,客户端进入TIME_WAIT状态,等待可能存在的延迟数据报文。

为什么需要四次挥手?

        通俗理解就是:断开的前提是双方都不再发送数据给对方,所以需要双方各自发起断开请求。

        客户端发起断开请求,仅表示自己不再发送数据,此时有可能服务端还会发送数据给客户端,所以此时客户端是等待关闭的状态。当服务端也发送了断开请求时,表示双方都同意关闭。每一个断开请求都对应一个ACK确认,所以是四次挥手。

思考

如果A发起断开请求,但没收到B的ACK,那么会不断重试发送断开请求,直到收到B的ACK。

第四次挥手完成,如果B没收到来自A的ACK,会怎样呢?

B肯定也是重试向A继续发送断开请求,此时A虽然完成了第四次挥手,但尚未关闭。在此期间,对于B的请求仍然能给出响应。A在多久之后真正关闭不再响应呢?2MSL

为什么主动断开连接的一方需要2MSL后自动关闭?

        MSL是TCP报文在传输中的最大生命周期。2MSL是被动方发出FIN报文和主动方发出ACK报文需要的最大时长。以A、B举例(A先发起断开请求):

当A收到B的FIN断开信号后,会给出ACK确认.在2MSL时间内,如果B没收到ACK,一定会再次重试发断开信号,此时如果A收到断开信号,则回复ACK并重置2MSL。如果在2MSL时间内A都没有再收到B的断开信号,则说明B已经收到ACK且关闭了,那么A在2MSL时间后也自动关闭。

标签:断开,请求,ACK,握手,TCP,OSI,服务器,连接,客户端
From: https://blog.csdn.net/wyy546792341/article/details/140999563

相关文章

  • Centos8下载报错:Errors during downloading metadata for repository ‘appstream‘:
    前提使用docker安装centos8步骤复现:启动后发现环境中没有vim功能,想着安装一下,发现报错:Errorsduringdownloadingmetadataforrepository'appstream':原因:找到AI工具翻译后:结合centos系统在2021年就没有在进行维护了,再进行网上大量查阅得知应该是yum源的问题,这里......
  • 认识Modbus RTU与Modbus TCP
    (选自成都纵横智控-ModbusRTU与ModbusTCP协议区别详解 )ModbusRTU和ModbusTCP是两种常用的工业通信协议,用于连接电子设备,但它们在多方面有所不同。以下是它们的详细比较:ModbusRTU协议类型:ModbusRTU是一种串行通信协议,通常使用RS-232、RS-422或RS-485标准进......
  • 泗博MODBUS TCP转PROFINET网关EPN-330实现焊机与西门子PLC的连接
    随着工业自动化水平的不断提高,各种设备之间的互联互通变得至关重要。然而,由于不同设备可能采用不同的通信协议,如何实现它们之间的无缝连接,成为了许多工程师和企业面临的难题。今天,我们就来分享一个上海泗博成功的案例,看看如何通过泗博自动化的MODBUSTCP转PROFINET网关EPN-330,实现......
  • OSI(Open Systems Interconnection Model)七层模型
    前情提要:是一个描述计算机网络通信协议设计的概念模型。它由国际标准化组织(ISO)在1984年发布,用于帮助不同系统之间的通信。这个模型将网络通信过程分为七个层次,每一层都承担着特定的功能:1.物理层(PhysicalLayer):负责在物理媒体上传输原始比特流。它关注的是比特在电缆、光纤......
  • 基于tcp,html,数据库的在线信息查询系统项目总结
    1.项目背景在线信息查询系统是一种可用于检索和展示各种信息的计算机程序或平台。主要特点包括:用户接口:通常提供友好的界面,用户可以方便地输入查询条件。数据存储:系统往往连接到数据库,存储大量信息,以供查询和分析。搜索功能:支持关键词搜索、筛选和分类功能,帮助用户快速找到......
  • 正本清源:TCP协议之三次握手和四次挥手
    一、三次握手的原理通俗解释:1>客户端发送一条请求到服务端(通过TCP报文,其中标记位是SYN),问:我可以跟你建立连接吗?--第一次握手2>服务端收到了客户端发来的请求连接的报文,回复给客户端一个确认信息同意建立连接(标记为ACK),同时发送连接请求到客户端,问:我服务端可以和你客户端建......
  • 快速理解 TCP 的三次握手和四次挥手
    前言TCP的三次握手和四次挥手是TCP协议的常见考点,下面我们通过一张图和几条记忆点来快速理解。TCP连接传输状态图三次握手上图中最上面的红色部分就是三次握手。握手是双方刚见面的时候,所以是用来建立连接的。第一次握手:客户端发送SYN报文给服务端。客户端发起......
  • linux运维一天一个shell命令之tcpdump详解
    一、tcpdump的概念tcpdump是一个数据包捕获工具,能够拦截和显示通过网络接口的数据包。它可以实时捕获数据包,也可以将捕获的数据保存到文件中以便后续分析。tcpdump支持基于多种条件(如IP地址、端口号、协议等)来捕获特定的数据包。二、主要功能和特点1.数据包捕获:tcp......
  • Modbus RTU与Modbus TCP协议区别详解
    工业自动化领域中,设备之间的数据传输至关重要,而Modbus协议作为一种通信标准,被广泛应用于各类自动化系统。而Modbus协议有两种常见的变体:ModbusRTU和ModbusTCP,下面本文将详细探讨这两种协议的区别。物理层ModbusRTU采用串行通信方式,利用RS-232或RS-485接口进行数据传输。它......
  • [Microsoft][ODBC Driver 17 for SQL Server]TCP 提供程序:错误代码 0x2746 - 客户端无
    我正在尝试运行odoo项目ubuntu:22.04pyodbc==4.0.28python:3.8opensslversion:OpenSSL1.1.1p21Jun2022**ERROR:DIAG[08001][Microsoft][ODBCDriver17forSQLServer]TCPProvider:Errorcode0x2746DIAG[08001][Microsoft][ODBCDriver......