网络原理——No.2 传输层_TCP的连接管理(画图理解三次握手与四次挥手)

news2024/11/19 16:27:51
JavaEE传送门

JavaEE

网络原理——传输层_UDP

网络原理——No.1 传输层_TCP的确认应答机制与超时重传


目录

  • TCP的连接管理
    • 三次握手(建立连接)
    • 四次挥手(断开连接)


TCP的连接管理

描述的就是 TCP 建立链接和断开链接的过程

TCP 的链接, 只是一个 “逻辑上的” “虚拟的连接” (只要网络能通信, 不管是用 TCP 还是 UDP 还是什么协议, 物理上肯定是连接好的)

  1. 主机A 和 主机B 建立连接
  2. 主机A 的系统内核里, 记录一个数据结构, 包含看和他连接的对方, 是谁(IP, 端口, 使用的协议…)
  3. 主机B 的系统内核里, 记录了一个数据结构, 包含了和他连接的对方, 是谁…

三次握手(建立连接)

双方建立一个相互认同的关系

我们来看这样一个场景: 小Gujiu 和 大GUJIU 本来只是普通关系, 之后开始建立连接

建立连接的过程其实是四次的数据交互, 那为什么是 “三次握手” 呢?

本来是四次, 但中间两次可以合并在一起, 一共就是三次.

# 注意 # 三次握手中, B 给 A 返回的 ACK 是收到 A 给 B 的 syn之后, 立即触发的, 也是立即发送的

为什么要建立链接

  1. 投石问路, 检查一下当前的网络情况是否通畅

  2. 三次握手同时也是在检查通信双方的发送能力和接收能力都是正常的

  3. 三次握手过程中, 也在协商一些重要的参数

    比如: TCP 的序号并非是从 1 开始的, 通常都是建立连接的时候协商了一个数字, 目的保证两个连接的序号有差别. 如果我们连接断开, 又快速重连, 接收方就可以区分当前收到的数据是当前连接的还是上次连接的

两个重点 TCP 状态

  1. LISTEN: 服务器启动之后, 绑定端口之后 (new ServerSocket 完成). 表示 手机打开, 信号良好, 可以接听别人的电话
  2. ESTABLISHED: 连接建立好了之后的稳定状态. 表示电话接通, 可以说话了

四次挥手(断开连接)

通信双方, 各自向对方申请断开连接, 再各自给对方回应

FIN: 结束报文段

四次挥手是有可能变为三次的, 但不是 100%.

既然两个数据实际都不相同, 为什么还有可能合并呢 ?

TCP 中还有一个机制, 捎带应答. 后面文章会讲解.

两个重要的 TCP 状态

  1. CLOSE_WAIT: 等待代码中调用 close 操作. (如果你的服务器上出现了大量的 CLOSE_WAIT 状态的连接,说明代码 bug, 说明 close 没有被及时调用到)

  2. TIME_WAIT: 主动发起关闭的一方, 会进入 TIME_WAIT. (A 处理完最后一个 ack 之后, 不能立即释放连接, 而需要保持一定的时间, 为了万一最后的ack 丢了, 还有机会进行重传.)

    TIME_WAIT 需要等待 2 MSL(网络上的两个位置之间传输消耗的最大时间)


🌷(( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))🌷

以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!
在这里插入图片描述
加粗样式

这里是Gujiu吖!!感谢你看到这里🌬
祝今天的你也
开心满怀,笑容常在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt学习笔记4:QMainWindow 菜单栏、工具栏、状态栏、铆接部件、

在创建基类的时候,有三大选择,一个是QWidge 空窗口, 另一个就是QMainWindow QMainWindow是一个为用户提供主窗口的类,包含一个菜单栏,多个工具栏,多个链接部件, 一个状态栏以及一个中心部件&…

《数据结构》(六)八大排序(上)

生活中大家从小到大处处可见排队,但是排队有哪些快速的方法你了解吗? 八大排序排序的基本概念插入排序直接插入排序基本思想代码直接插入排序总结希尔排序基本思想代码希尔排序总结选择排序直接选择排序基本思想:代码直接选择排序总结堆排序堆…

大数据基础之java常用API一

常用API1. Object类2. String类String案例1. Object类 构造方法空参构造全参构造 Object类: 是所有类的基类,或者说公共父类,每个类都直接或者间接的继承自Object,所以该类中有的方法,其他类中都有 构造方法: public Object(); 所有类的构造方法中都会默认调用super() 会逐级调…

C#里在子窗口与父窗口之间进行数据传送

在C#里经常需要在子窗口与父窗口之间进行数据传送,或者调用,虽然有很多方法可以实现,但是采用委托还是比较简单和直接的方式。 所以这次针对委托来演示一下怎么样实现这种功能。 下面先来创建一个带两窗口的例子,如下图所示: 接着来看一下,创建父窗口的代码: namespace…

【C++笔试强训】第十一天

🎇C笔试强训 博客主页:一起去看日落吗分享博主的C刷题日常,大家一起学习博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光 🌞。 💦 &…

vite基础知识-1

为什么选择vite? 讲vite之前,我们先来了解一下webpack的原理。 webpack支持多种模块化(浏览器端和服务端都可以运行)。比如: // index.js const lodash require("lodash"); // commonjs规范 import React…

win10 docker desktop 报 docker desktop stopped

win10电脑安装doker deskto遇到一些问题解决过程记录 报 docker desktop stopped 没过多会, docker desktop就自动退出了, 要以理解为闪退 网上查了一下原因, 虚拟化可能没设置 进入bios, 发现笔记本电脑没有这个设置 重启电脑后, 弹出消息 WSL 2 installation is incompl…

通道分离与合并、彩色图转换为灰度图、二值化

文章目录图像基础重要的函数图像基本知识图像基础通道分离与合并彩色图转换为灰度图二值化图像的加减乘除图像基础 矩阵分辨率8位整型图像浮点数图像 现在简单介绍下二值化、灰度图以及真彩色和假彩色 图像的二值化,就是将图像上的像素点的灰度值设置为0或255&am…

安装宝塔面板(详细教程)

目录 安装宝塔面板 (一)前言 (二)准备工作 1、官网:宝塔面板下载,免费全能的服务器运维软件 (三)安装宝塔面板 1、进入官网,选择“安装脚本” 2、选择对应版本的安…

C++游戏开发小笔记

1.入门小语法 1.1 命名空间 当想使用库文件的某个函数时,为了防止由于重名而引起的混乱调用,使用命名空间来区分同名函数。 字符串String也是标准命名空间的一个。如果没有using namespace std; 想用string 类型得 std:: string 1.2浮点数的存储…

计算机视觉--flask部署 目标检测算法,并在局域网内远端访问

1.flask框架 Flask是一个轻量级的基于Python的web框架。static 文件夹来保存静态文件,templates 文件夹存放前端页面 安装: pip install Flask框架代码: from flask import * from flask import Flaskapp Flask(__name__) //获取实例app.…

Web监听器:Listener

Listener简介常用监听接口监听在线用户信息的实现Model层Controller层OnlineUserListener的实现View层测试简介 监听器(Listener),是一个实现特定接口的普通Java程序,用于监听Web应用中的对象或信息发生改变时,作出相应…

大前端进阶

目录 1.概述和前端工具vscode安装 1.下载安装VScode 2.中文界面配置 3.插件安装 4.设置字体大小 5.开启完整的Emmet语法支持 2.Nodejs 1.Nodejs介绍与安装 2.快速入门-Hello World 3.Node - 实现请求响应 4.Node-操作MYSQL数据库 3.Es6 1.ES6的概述 2.ES6的语法…

Docker实战:使用Dockerfile部署第一个netcore程序

目录 1、创建一个NetCore API项目 2、云服务部署 2.1 首先登录云服务器创建一个测试目录 2.2 新建dockerfile文件用来构建镜像。 2.3 构建镜像 2.4 运行镜像 目录 1、创建一个NetCore API项目 2、云服务部署 2.1 首先登录云服务器创建一个测试目录 2.2 新建dockerfil…

Python3,10h行代码,制作艺术签名,从此走上人生巅峰。

制作艺术签名1、引言2、代码实战2.1 代码示例3、总结1、引言 小鱼:小屌丝,你在画啥呢? 小屌丝:… 我这在练习签名呢。 小鱼:这… 艺术签? 小屌丝:喔,鱼哥,你这真实博才多…

CSDN云IDE怎样克隆代码

文章目录1、怎样从GitHub导入项目?1.1、系统生成SSH-KEY2、克隆代码2.1、克隆代码方式一2.2、克隆代码方式二2.3、克隆代码方式三1、怎样从GitHub导入项目? 1.1、系统生成SSH-KEY 1、打开Terminal 2、查看是否存在现有的ssh密钥 $ ls -al ~/.ssh3、检…

【LeetCode】【二叉树的最近公共祖先】

力扣 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自…

《JavaSE-第十四章》之文件(一)

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页:KC老衲爱尼姑的博客主页 博主的github,平常所写代码皆在于此 刷题求职神器 共勉:talk is cheap, show me the code 作者是爪哇岛的新手,水…

Go 语言中的并发编程(Let‘s Go 二十八)

Go从底层就支持并发编程,同时实现垃圾回收机制。 先了解并发相关的几个名词概念。 进程:系统进行资源分配和调度的基本单位,使系统结构的基础,它是一个实体。 线程:是程序中一个单一的顺序执行流程,是进程…

python做了个自动关机工具,再也不会耽误我下班啦

上班族经常会遇到这样情况,着急下班结果将关机误点成重启,或者临近下班又通知开会,开完会已经迟了还要去给电脑关机。 【阅读全文】 今天使用PyQt5做了个自动关机的小工具,设置好关机时间然后直接提交即可,下班就可以…