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连接管理

TCP-【建立连接】-3次握手

TCP-【释放连接】-4次挥手

TCP-【建立连接】-3次握手

请添加图片描述

状态解读:

CLOSED: client处于关闭状态

LISTEN:server处于监听状态,等待client连接

SYN-RCVD(同步已接受):表示server接收到了SYN报文,当收到client的ACK报文后,server进入ESTABLISHED状态

SYN-SENT(同步已发送):表示client已发送SYN报文,等待server的第二次握手

ESTABLISHED:表示连接已经建立

前两次握手的特点:

  • SYN字段都设置为1
  • 数据部分长度都为0
  • TCP头部长度一般都是32字节
    • 固定头部:20字节
    • 选项部分:12字节
  • 双方会交换确认一些信息
    • MSS(最大发送段的长度)、是否支持SACK、Window scale(窗口缩放比例)等
    • 这些信息都存放在TCP头部的选项部分中(12字节)

TCP-建立连接-面试知识点

  1. 为什么建立连接的时候,要进行3次握手?2次不行吗
  • 主要目的;防止server端一直等待,浪费资源
  • 如果只需要2次握手,可能会出现的情况
  1. 假设client发送的第一个连接请求报文段,因为网络延迟,在连接释放后某个时间才到达server
  2. 本来是一个早已失效的连接请求,但server收到此失效请求后,误认为是client再次发送的一个新的连接请求
  3. 于是server就向client发送确认报文段,新的连接就建立了
  4. 由于现在的client并没有真正想连接服务器的意愿,因此不会理睬server的确认,也不会向server发送数据
  5. 但server却认为新的建立已连接,并一直等待client发来数据,就这样server很多资源被白白浪费
  • 采用三次握手的办法可以防止上述现象发生
  • client没有向server发出确认,server由于收不到确认,就知道client并没有建立连接

2、第3次握手失败了,会如何处理?

  • 此时server状态为SYN-RCVD,若等不到client的ACK,server会重新发送SYN+ACK(1,1)包
  • 如果server多次重发SYN+ACK都等不到client的ACK就会发送RST包,关闭连接

请添加图片描述

TCP-【释放连接】-4次挥手

请添加图片描述

状态:

FIN-WAIT-1:表示想主动关闭连接

  • 向对方发送FIN报文,此时进入到FIN-WAIT-1状态

CLOSE-WAIT:表示在等待关闭

  • 当对方发送FIN给自己,自己会回应一个ACK报文给对方,此时进入CLISE-WAIT状态
  • 在此状态下,需要考虑自己是否还有数据要发送给对方,如果没有,发送FIN报文给对方

FIN-WAIT-2:只要对方发送ACK确认后,主动方会处于FIN-WAIT-2状态,然后等待对方发送FIN报文

CLOSING:罕见的例外状态

  • 表示双方同时发送FIN报文(此时没有主动和被动方一说)
  • 双方都主动关闭连接

LAST-ACK(最后确认):被动关闭一方在发送FIN报文后,最后处于等待主动方的ACK报文

  • 当被动方收到主动方的ACK后,就进入CLOSED

TIME-WAIT(时间等待):表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即进入了CLOSE状态

  • 如果主动方在FIN-WAIT-1状态下,就受到了被动方的FIN和ACK标志的报文
  • 此时就主动方直接进入TIME-WAIT

TCP释放连接的细节

  • TCP/IP协议栈的设计上,允许任何一方先发起断开请求

  • 主动方发送ACK后,需要有个TIME-WAIT阶段,等待一段时间后,再真正关闭连接

    • 一般等待2倍的MSL(最大分段生存期)
      • MSL是TCP报文在Internet最长生存周期
      • TCP标准都有一个确定的MSL值,某RFC建议为2分钟
      • MSL可以防止本次连接中产生的数据包误传到下一次连接中(因为本次连接中的数据包会在2MSL时间内消失掉)
  • 如果主动方发送完ACK立马释放连接,然后因为网络原因,被动方没有收到client的ACK,被动方就会重新发送FIN

    • 这时可能出现的情况
      1. 主动方没有任何响应,被动方在那里干等,甚至多次重发FIN,浪费资源
      2. 主动方(假设为client)有个新的应用程序刚好分配了同一个端口,新的应用程序收到FIN立马开始执行断开操作,本来它可能想跟新的server建立连接

TCP释放连接-4次挥手-面试

为什么释放连接时候,要进行4次挥手?

  • TCP是全双工模式
  • 第一次挥手:当主机1发送FIN报文段时
    • 表示主机1告诉主机2,主机1已经没有数据要发送,但是,此时主机1还是可以接受来自主机2的数据
  • 第二次挥手:当主机2返回ACK报文段时
    • 表示主机2接收到了主机1没有数据要发送,但是主机2还是可以发送数据到主机1
  • 第三次挥手:当主机2发送FIN报文段
    • 表示主机2告知主机1,主机2已经没有数据要发送
  • 第四次握手:当主机1返回ACK报文段
    报文段时
    • 表示主机2接收到了主机1没有数据要发送,但是主机2还是可以发送数据到主机1
  • 第三次挥手:当主机2发送FIN报文段
    • 表示主机2告知主机1,主机2已经没有数据要发送
  • 第四次握手:当主机1返回ACK报文段
    • 表示主机1已经知道主机2没有数据发送
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 01:04:54  更:2022-09-21 01:08:58 
 
开发: 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年12日历 -2024/12/28 19:56:39-

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