【好书精读】网络是怎样连接的 之 数据收发完成之后 从服务器断开并删除套接字

这篇具有很好参考价值的文章主要介绍了【好书精读】网络是怎样连接的 之 数据收发完成之后 从服务器断开并删除套接字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【好书精读】网络是怎样连接的 之 数据收发完成之后 从服务器断开并删除套接字

 ( 该图由AI制作 )

目录

数据收发完成后协议栈要执行的操作

数据发送完毕后断开连接

删除套接字

数据收发操作小结

第一步是创建套接字

然后

客户端会向服务器发起连接操作

数据收发阶段

执行断开操作


数据收发完成后协议栈要执行的操作

数据发送完毕后断开连接

前面讲了:创建套接字到连接收发数据断开连接今天讲:删除套接字

服务器一方的应用程序会调用 Socket 库的 close 程序 然后 服务器的协议栈会生成包含断开信息 TCP 头部 具体来说就是将控制位中的 FIN 比特设为 1 接下来 协议 栈会委托 IP 模块向客户端发送数据 图 

【好书精读】网络是怎样连接的 之 数据收发完成之后 从服务器断开并删除套接字

 

接下来轮到客户端了 当收到服务器发来的 FIN 1 TCP 头部时
客户端的协议栈会将自己的套接字标记为进入断开操作状态 然后 了告知服务器已收到 FIN 1 的包 客户端会向服务器返回一个 ACK )。 这些操作完成后 协议栈就可以等待应用程序来取数据了

客户端调用read和close

这时客户端的协议栈也会和服务器一样 生成一个 FIN 比特为 1 TCP 然后
委托 IP 模块发送给服务器 )。 一段时间之后 服务器就会返回 ACK )。 到这里 客户端和服务器的通信就全部结束了

删除套接字

和服务器的通信结束之后 用来通信的套接字也就不会再使用了
套接字并不会立即被删除
会等待一段时间之后再被删除(为了防止误操作)
至于具体等待多长时间 这和包重传的操作方式有关
协议中对于这个等待时间没有明确的规定 一般来说会等待几分钟之后再删除套接字

数据收发操作小结

 

第一步是创建套接字

服务器一方的应用程序在启动时就会创建好套接字并进入等待连接的状态
客户端则一般是 在用户触发特定动作 需要访问服务器的时候创建套接字
在这个阶段 还没有开始传输网络包

然后

【好书精读】网络是怎样连接的 之 数据收发完成之后 从服务器断开并删除套接字

客户端会向服务器发起连接操作

客户端,生成一个 SYN 为 1 的 TCP 包,发送给服务器(图①) (TCP 包头部还包含了客户端向服务器发送数据时使用的初始序号,以及服务器向客户端发送数据时需要用到的窗口大小)
到达服务器之后
服务器会返回一个 SYN 1 的 TCP 包(图②) (和图①一样,这个包的头部中也包含了序号和窗口大小,此外还包含表示确认已收到包①的ACK 号)
当这个包到达客户端时
客户端会向服务器返回一个包含表示确认的 ACK 号的 TCP 包(图③)
连接操作就完成了,双方进入数据收发阶段

数据收发阶段

客户端会向服务器发送请求消息
TCP 会将请求消息切分成一定大 小的块 并在每一块前面加上 TCP 头部 然后发送给服务器 ④) (TCP 头部中包含序号,它表示当前发送的是第几个字节的数据)
当服务器收到数据时
会向客户端返回 ACK 号(图⑤)
在最初的阶段 服务器只是不断接收数据 随着数据收发的进行 ,数据不断传递给应用程序,接收缓冲区就会被逐步释放

这时服务器需要将新的窗口大小告知客户当服务器收到客户端的请求消息后会向客户端返回响应消息这个过程和刚才的过程正好相反⑥⑦)。文章来源地址https://www.toymoban.com/news/detail-495825.html

执行断开操作

服务器会先发起断开过程(在 HTTP1.1 中,有可能是客户端发起断开过程。)
服务器先发送一个 FIN 1 TCP
然后客户端返回一 个表示确认收到的 ACK
接下来 双方还会交换一组方向相 反的 FIN 1 TCP 和包含 ACK 号的 TCP (图11)。
最后 在等待一段时间后 套接字会被删除

到了这里,关于【好书精读】网络是怎样连接的 之 数据收发完成之后 从服务器断开并删除套接字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信蓝牙小程序,连接蓝牙模块收发数据。遇到的问题:我连接成功之后发现服务值下面两个特征值一个只能读一个只能写,然后点击读的那个一直收到同一个字,点击发送无论发什么内容只能收到同一个中文字,求指导

    大家好,我是小程序初学者,目前尝试做一个蓝牙小程序连接蓝牙模块进行收发数据,遇到了问题求大佬指点 这是代码运行结果:点击能读的特征值就会接收到耀这个字,点击输入框无论发送什么都会接收到肀这个字 遇到的问题:我连接成功之后发现服务值下面两个特征值

    2024年01月16日
    浏览(64)
  • 卷积神经网络提取图像特征的操作是怎样完成的

    。 卷积神经网络有以下几种应用可供研究:1、基于卷积网络的形状识别物体的形状是人的视觉系统分析和识别物体的基础,几何形状是物体的本质特征的表现,并具有平移、缩放和旋转不变等特点,所以在模式识别领域,对于形状的分析和识别具有十分重要的意义,而二维

    2024年02月07日
    浏览(44)
  • 基于QT做上位机开发,实现FPGA通过cyusb3014芯片完成数据的收发

    #任务要求: 要求用qt编写上位机程序,实现FPGA通过cyusb3014芯片完成数据的收发。下面是采用通过cypress并安装usb官方驱动的环境搭建,后续继续更新程序的编写。 一、安装nodejs ①下载地址:https://nodejs.org/en/ ①.1: 安装时,除了选择安装路径根据需要选择外,其他都可以默认

    2024年02月06日
    浏览(58)
  • 《网络是怎样连接的》(二.2)

    (6条消息) 《网络是怎样连接的》(二.1)_qq_38480311的博客-CSDN博客 本文主要取材于  《网络是怎样连接的》 第二章 2.5 2.6章节。 目录 简述: 本文的主要内容是 以太网的收发操作 和 UDP协议的收发操作。 IP与以太网的包收发操作 包是什么构成的?  包是如何转发 的? 路由器

    2024年02月14日
    浏览(43)
  • Android studio 通过mysql连接数据库完成注册登录,登陆后通过tcp协议与电脑的网络调试助手互发信息

    先不多直接看软件截图 这个是首页等陆界面 xml代码如下 MainActivity文件    注册界面的xlm文件  这个界面比较简单就不介绍了   MainActivity文件 这是一个注册失败的界面,如果数据库内有相同的账号密码则显示注册失败 话不多说直接上代码 MainActivity里面的代码 这里是user类用

    2024年02月02日
    浏览(49)
  • 使用代理之后,电脑浏览器连接不上网络的解决方法

    目录 一、解决方法 1、internet 选项 2.局域网设置关掉所有能勾选的选项(尤其是为LAN使用代理服务器) 二、原因 开启vpn的时候这个代理服务器就会打开,当电脑关机时没来得及关闭vpn时这个代理服务器的选项就会没来得及关上。当你再次关机时,vpn没有开启,但是却开启了

    2024年02月11日
    浏览(58)
  • 利用RS485通信、串口收发数据的硬件连接及部分代码

    设计思路:单片机A检测单片机B的功能,单片机B待检测的地方全部引出,然后再将一些功能信息发送到屏幕。单片机A和单片机B之间、单片机A和屏幕(一种可视化编辑的屏幕,规定好通信协议,利用485通信将字符串发送过去就能显示相应的内容,屏幕:TK607ID) 。 注:本文只对

    2024年02月08日
    浏览(49)
  • SpringBoot 是怎样连接数据库的

    Spring Boot 是一款流行的 Java 开发框架,它可以轻松地连接各种类型的数据库,包括关系型数据库和非关系型数据库。本文将介绍 Spring Boot 是如何连接数据库的,包括其原理和代码示例。 Spring Boot 通过使用 Spring Data JPA 来连接数据库。Spring Data JPA 是 Spring Data 的一部分,是一个

    2024年02月09日
    浏览(38)
  • 怎样看数据库连接等待的进程

    要查看数据库连接等待的进程,您需要登录到数据库管理系统,并执行相应的查询或命令来查看当前的数据库连接和连接状态。具体的方法取决于您使用的数据库类型。以下是几种常见数据库的示例: MySQL: 使用以下命令查看当前连接的状态和等待的进程: SHOW PROCESSLIST; 这将

    2024年02月07日
    浏览(39)
  • SpringBoot 是怎样连接 MySql 数据库的

    Spring Boot 是一款流行的 Java 开发框架,它可以轻松地连接各种类型的数据库,包括关系型数据库和非关系型数据库。本文将介绍 Spring Boot 是如何连接数据库的,包括其原理和代码示例。 Spring Boot 通过使用 Spring Data JPA 来连接数据库。Spring Data JPA 是 Spring Data 的一部分,是一个

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包