IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP三次握手和四次挥手 -> 正文阅读

[网络协议]TCP三次握手和四次挥手

TCP & UDP

  • TCP是一个 面向连接的可靠的基于字节流 的传输层协议
    • 面向连接,双方通信需要先通过 三次握手 建立连接释放连接通过 四次挥手
    • 可靠的, TCP会保证数据包的有序到达,当因为网络不佳等因素导致的 丢包会进行重发,保证其有序到达,因此会导致传输层的队头阻塞产生
    • 面向字节流,对于应用层交付下来的数据报
      • 若太小,会积累在 缓冲区,直到某个阈值,才将其发送
      • 若太大,则进行 拆分,有序传达
  • 而UDP是一个 面向无连接 的传输层协议,数据包的传输是 无序的
    • 对于引用层交付下来的数据报,太大或大小都不进行拆分或等待,包装头部后向下交付

三次握手

TCP三次握手

过程分析

  • ① 主动方处于 CLOSED状态,被动方则处于 LISTEN状态
  • ② 主动方 发送SYN报文 后,进入 SYN-SENT状态,被动方接收到该报文后进入 SYN-RCVD状态 且返回一个 SYN,ACK报文
  • ③ 主动方接受到后进入 ESTABLISHED 状态,且返回 ACK报文,被动方接受到该报文后也进入 ESTABLISHED 状态
    • 三次握手的每次报文都会消耗一个序列号seq
    • SYN ACK其实是用两位的二进制来表明相应的状态

目的

  • TCP通过三次握手建立连接的目的在于确定 通信双方 均有 发送和接受报文的能力
    • ① 客户端发送 SYN报文,服务端接受到后表明 客户端有发送报文的能力
    • ② 服务端返回 SYN ACK报文,客户端接受到后表明 服务端有接受和发送报文的能力
    • ③ 客户端返回 ACK报文,服务端接受到后表明 客户端有接受报文的能力
  • 基于此,若少于三次的握手,则不能确保通信双方均有发送和接受报文的能力
  • 反之,多于三次的握手则是不必要的,因为三次就可以确定了

双方同时请求

同时请求TCP连接

  • ① 初始双方同时发送SYN报文,由 CLOSED状态 进入到 SYN-SENT状态
  • ② 双方接收到后均进入 SYN-RCVD状态,并返回SYN ACK报文
  • ③ 双方接收到后均进入 ESTABLISHED状态

四次挥手

四次挥手

过程分析

  • ① 主动关闭方发送 FIN报文 后进入 FIN-WAIT1 状态,此后不可主动发送报文,被动关闭方接收后进入 CLOSED-WAIT 状态,返回 ACK确定报文
  • ② 此时被动关闭方 将需要发送的报文全部发送完毕 后,才会发送 FIN ACK报文,而主动关闭方接收到ACK确认报文后,会进入 FIN-WAIT2 状态
  • ③ 被动方发送完 FIN ACK报文 后,进入 LAST-ACK 状态,等待最后的确认报文
  • ④ 主动方接收到 FIN ACK报文 后,进入 TIME-WAIT 状态且重新计时(等待时间为2MSL),发送最后的ACK确认报文,被动方接收到后进入 CLOSED 状态,主动方在2MSL中没有接收到被动方 重传的FIN ACK报文,也进入 CLOSED 状态

目的

  • ① 主动方发送 FIN报文 后,处于 half-closed(半关闭 - 不能主动发送报文)
  • ② 被动方接收到此消息,先发送 ACK确认报文,再将 仍需要发送的报文全部发送完,最后发送 FIN ACK报文 通知主动方关闭
    • 被动方发送完 FIN ACK报文不能立即进入关闭状态:因为网络传输的过程有可能会发生 丢包 的现象,主动方在TIME-WAIT状态等待2MSL也是因为这个原因
    • 最后的ACK报文需要1MSL,若丢包了,重传FIN ACK也需要1个ACK,然后TIME-WAIT 重新计时

同时关闭

  • 同时关闭意味着 **双方初始均发送FIN报文,**然后进入 half-closed,失去发送报文的能力,那么在 发送ACK确认报文 后就进入 TIME-WAIT
    在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:46:40  更:2021-10-21 12:48:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:53:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码