JAVAEE初阶 网络编程(六)

TCP协议

    • 一. 四次挥手
    • 二. 连接管理过程中TCP状态的变化
      • 2.1 listen状态
      • 2.2 established状态
      • 2.3 CLOSE_WAIT状态
      • 2.4 TIME_WAIT状态
    • 三. 滑动窗口
      • 3.1 ack丢了
      • 3.2 数据丢了

一. 四次挥手

在这里插入图片描述

我们都知道,在三次握手中是可以把中间步骤合并成一个步骤执行,那么在四次挥手中是否可以呢?
答案是不一定的,因为触发时机的不同,在三次握手中,在内核收到syn之后立即触发,因此是可以合并的。
但是在四次挥手中,ack和fin执行时间中间差异很多,所以一般是不能进行合并的。

在这里插入图片描述

那么服务器主动挥手,是服务器挂了的缘故吗?
答案当然并不全是,服务器挂了的话,确实是会触发四次挥手,但是服务器如果不想跟客户端继续进行连接通信的话,也是会触发四次挥手的。

二. 连接管理过程中TCP状态的变化

所谓的状态,描述的是一个实体,现在正在做什么的意思。
服务器和客户端都需要一种数据结构来保存对端的信息,在这个数据结构当中有一种属性,就叫做状态。

在这里插入图片描述

2.1 listen状态

在这里插入图片描述
在这里插入图片描述

listen状态表示,服务器这边serverSocket已经创建好,端口号也绑定完成,等待客户端。

2.2 established状态

在这里插入图片描述

established状态已经建立好了连接,在三次握手之后。
并且LISTENING和ESTABLISHED各自有服务器和客户端的状态。

2.3 CLOSE_WAIT状态

接收到对端传来的fin之后,要进入到调用close来主动发起fin。谁被动断开连接,谁就会进入到CLOSE_WAIT状态。

2.4 TIME_WAIT状态

TIME_WAIT状态就是本端发出了fin,也接收到了对端发出的fin之后,进入此状态。
存在的意义就是防止最后一个ACK丢包。
服务器如果没有收到最后一个ACK,就会重传fin。但是客户端如果在此处释放TCP,就意味着重传的FIN不会接收到ACK。此处等待时间最多2MSL。MSL是客户端到服务器的最长时间。超过这个时间,就不会重传了。

三. 滑动窗口

在这里插入图片描述
在这里插入图片描述

滑动窗口是怎样工作的呢?

在这里插入图片描述
在这里插入图片描述

如果出现丢包,怎么办呢?

3.1 ack丢了

在这里插入图片描述

3.2 数据丢了

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openGaussdb5.0单点企业版部署_Centos7_x86

本文档环境:CentOS7.9 x86_64 4G1C40G python2.7.5 交互式初始化环境方式 介绍 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续…

使用vscode查bug

具体操作 修改CMakeList.txt # set(CMAKE_BUILD_TYPE "Release")//注释Release模式 set(CMAKE_BUILD_TYPE "Debug")//设置为Debug模式 # set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g")//注释*这行代码是用来设置 CMake 构建系统中 Release 模式…

我道歉!我被小米汽车举报了

文 | AUTO芯球 作者 | 雷歌 前几天,我写了《小米,不要将卖手机那套话术带进汽车圈》。 小米汽车向腾讯举报,谴责我对他们进行“品牌抹黑、虚构诋毁”! 我要向小米道歉。 我不该说“16.8亿种驾驶模式是文字游戏”。那是你们的说…

[C++]c++判断CPU的类型及支持的指令集

1、利用cpui判断cpu的类型及支持的指令集,可以进行条件编程:(InstructionSet.h) #pragma once// InstructionSet.cpp // Compile by using: cl /EHsc /W4 InstructionSet.cpp // processor: x86, x64 // Uses the __cpuid intrin…

DolphinScheduler + Amazon EMR Serverless 的集成实践

01 背景 Apache DolphinScheduler 是一个分布式的可视化 DAG 工作流任务调度开源系统,具有简单易用、高可靠、高扩展性、⽀持丰富的使用场景、提供多租户模式等特性。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方…

uniapp上传音频文件到服务器

视频教程地址: 【uniapp录音上传组件,将录音上传到django服务器】 https://www.bilibili.com/video/BV1wi4y1p7FL/?share_sourcecopy_web&vd_sourcee66c0e33402a09ca7ae1f0ed3d5ecf7c uniapp 录制音频文件上传到django服务器保存到服务器 &#xf…

群辉开启WebDav服务+cpolar内网穿透实现移动端ES文件浏览器远程访问本地NAS文件

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 本文主要介绍如何在群辉中开启WebDav服务,并结合cpolar内网穿透工具生成的公网地址,通过移动客户端ES文件浏览器即可实现移动设…

msfconsole实战使用(结合靶场演示)

msfconsole实战使用 前言 MSFconsole(Metasploit Framework Console)是Metasploit框架的一部分,是一个功能强大的渗透测试工具。Metasploit框架是一个开源的安全工具,旨在开发、测试和执行针对计算机系统的攻击。MSFconsole是Me…

数据湖技术之发展现状篇

一. 大数据处理架构: 大数据处理架构的发展过程具体可以分为三个主要阶段:批处理架构、混合处理架构(Lambda、Kappa架构)、湖仓一体。首先是随着Hadoop生态相关技术的大量应用,批处理架构应运而生,借助离线…

ThinkPhp3.2(qidian)部署文档

宝塔环境部署 申请域名以及域名解析 具体配置,可百度之 在宝塔面板中创建网站 上传代码导入数据配置运行目录 注意:(如果版本:thinkphp3.2 )配置 运行目录要特别注意:运行目录要选择根目录“/”&#xff…

C# 实现 gRPC 服务和调用

写在前面 gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。 主要优点如下: 1.高性能轻量化。 2.协议优先的 API 定义模式,默认使用协议缓冲区,允许与语言无关的实现。 3.可用于多种语言的工具,以生成强类型服务器和客户…

计算方法实验2:利用二分法及不动点迭代求解非线性方程

一、问题描述 利用二分法及不动点迭代求解非线性方程。 二、实验目的 掌握二分法及不动点迭代的算法原理;能分析两种方法的收敛性;能熟练编写代码实现利用二分法及不动点迭代来求解非线性方程。 三、实验内容及要求 二分法 (1) 编写代码计算下列数字…

w24文件上传之PHP伪协议

PHP支持的伪协议 file:// - 访问本地文件系统 http:// - 访问网址 ftp:// - 访问文件 php:// -访问各个输入/输出流 zlib:// -压缩流 data:// - 数据 glob:// -查找匹配的文件路径模式 phar:// - php归档 ssh2:// - Secure shell 2 rar:// - RAR ogg:// - 音频流 expect:// - …

时序预测 | Python基于Multihead-Attention-TCN-LSTM的时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时序预测 | Python基于Multihead-Attention-TCN-LSTM的时间序列预测 Multihead-Attention-TCN-LSTM(多头注意力-TCN-LSTM)是一种结合了多个注意力机制、时序卷积网络(TCN&#xff0…

elasticsearch8.x版本docker部署说明

前提,当前部署没有涉及证书和https访问 1、环境说明,我采用三个节点,每个节点启动两个es,用端口区分 主机角色ip和端口服务器Amaster192.168.2.223:9200服务器Adata192.168.2.223:9201服务器Bdata,master192.168.2.224:9200服务器Bdata192.1…

shopee,lazada卖家自养号测评补单的方法和技巧

现在很多卖家都是自己管理几百个账号,交给服务商不是特别靠谱 一:送测不及时,产品时常送不出去 二:账号质量不稳定,账号一天下了多少你也不清楚,如果下了很多单万一封号被关联了怎么办 三:as…

vue3前端开发,如何引入element-plus前端框架及配置参数

vue3前端开发,如何引入element-plus前端框架及配置参数!这是一个简单的教程,帮助大家快速在自己的项目中引入element-plus框架。 主要是介绍的引入流程和参数的配置情况。 如图,这个就是elment-plus前端框架里面的一个主按钮展示。表示我们配…

C++STL之map、set的使用和模拟实现

绪论​: “我这个人走得很慢,但是我从不后退。——亚伯拉罕林肯”,本章是接上一章搜索二叉树中红黑树的后续文章,若没有看过强烈建议观看,否则后面模拟实现部分很看懂其代码原理。本章主要讲了map、set是如何使用的&am…

Spring - 基本用法参考

Spring 官方文档 Spring容器启动流程(源码解读) BeanFactoryPostProcessor vs BeanPostProcessor vs BeanDefinitionRegistryPostProcessor: From java doc: BeanFactoryPostProcessor may interact with and modify bean defin…

(九)springboot实战——springboot3下的webflux项目参数验证及其全局参数验证异常处理

前言 在上一节内容中,我们介绍了如何在webflux项目中自定义实现一个全局的异常处理器ErrorWebExceptionHandler,正常情况下其可以处理我们系统的运行时异常,但是无法处理参数验证的异常WebExchangeBindException,所以这里提供另外…