【好书精读】网络是怎样连接的 之 连接服务器

news2024/9/30 5:37:09

(该图由AI制作 学习AI绘图 联系我) 

目录

1 连接是什么意思

1.1 连接实际上是通信双方交换控制信息

2 负责保存控制信息的头部

2.1 客户端与服务器之间交换的控制信息

连接操作的实际过程


1 连接是什么意思

创建套接字之后 应用程序 浏览器 就会调用 connect 随后协议栈会将本地的套接字与服务器的套接字进行连接

连接操作的目的之一把服务器的 IP 地址和端口号等信息告知协议栈
套接字刚刚创建完成 的时候 里面并没有存放任何数据 也不知道通信的对象是谁
在这个状态下 即便应用程序要求发送数据 协议栈也不知道数据应该发送给谁
浏览器可以根据网址来查询服务器的 IP 地址 而且根据规则也知道应该使用 80 号端口 但只有浏览器知道这些必要的信息 是不够的
因为在调用 socket 创建套接字时 这些信息并没有传递给协议 因此 我们需要把服务器的 IP 地址和端口号等信息告知协议栈

连接操作的目的之二:客户端向服务器传达开始通信的请求

服务器上也会创建套接字,但是 不知道应该和谁进行通信,
而且 和客户端不同的是 在服务器上 连应用程序也不知道通信对象是谁
于是 我们需要让客户端向服务器告知必要的信息

1.1 连接实际上是通信双方交换控制信息

上面提到的客户端,将 IP地址,和端口号,告知服务器,这样的过程——就属于,交换控制信息的一个具体的例
控制信息用来控制数据收发操作所需的一些信息 IP 地址 和端口号就是典型的例子
连接操作中,所交换的控制信息,是根据通信规则,来确定的
此外 当执行数据收发操作时 我们还需要一块,用来临时存放要收发的数据的内存空间 这块内存空间称为缓冲区 它也是在连接操作 的过程中分配的

2 负责保存控制信息的头部

控制信息分为两类
第一类 是,客户端,和服务器,相互联络时,交换的控制信息
连接时需要 包括数据收发和断开连接操作在内 整个通信过程中都需要
这些内容在 TCP 协议的规格中进行了定义 具体来说 中的这些字段就是 TCP 规格中,定义的控制信息

这些字段是固定的,在连接、收发、断开等各个阶段中,每次客户端和服务器之间进行通信时,都需要提供这些控制信息

2.1 客户端与服务器之间交换的控制信息

如图 a 所示 这些信息,会被添加在,客户端与 服务器之间,传递的,网络包的开头
在连接阶段 由于数据收发还没有开始 ,所以如图 b 所示 网络包中没有实际的数据 只有控制信息
为了避免各种不同的头部发生混淆 ,我们一般会记作 TCP 头部、以太网头部 B、IP 头部
头部是用来记录和交换控制信息的

另外一类 那就是保存在套接字中 用来控制协议栈操 作的信息
通信操作中使用的控制信息分为两类。
(1) 头部中记录的信息
(2) 套接字(协议栈中的内存空间)中记录的信息

连接操作的实际过程

过程是从应用程序调用 Socket 库的 connect 开始的 )。
connect(< 描述符 >, < 服务器 IP 地址和端口号 >, …)

提供了服务器的 IP 地址和端口号 \rightarrow 会传递给协议栈中的 TCP 模块

TCP 模块会与该 IP 地址对应的对象 也就是与服务器的 TCP 模块交换控制信息
  1. 客户端先创建一个包含表示开始数据收发操作的控制信息的头部 (客户端(发送方)的套接字就准确找到了服务器(接收方)的套接字,也就是搞清楚了我应该连接哪个套接字) 连接操作的第一步是在 TCP 模块处创建表示连接控制信息的头部。
  2. 将头部中的控制位的 SYN 比特设置为 1 大家可以认为它表示连接

 

TCP 头部创建好之后 接下来 TCP 模块会将信息传递给 IP 模块并委托它进行发送
IP 模块执行网络包发送操作后
网络包就会通过网络到达服务器
服务器上的 IP 模块会将接收到的数据传递给 TCP 模块

服务器的 TCP 模块根据 TCP 头部中的信息找到端口号对应的套接字

从处于等待连接状态的套接字中找到与 TCP 头部中记录的端口号相同的套接字就可以了
当找到对应的套接字之后 套接字中会写入相应的信息 并将状态改为正在连接
此时:
服务器的 TCP 模块会
返回响应
这个过程和客户端一样 需要在 TCP 头部中设置发送方和接收方端口号以及 SYN 比特
还需要将 ACK 控制位设为1,这表示已经接收到相应的网络包
网络中经常会发生错误 网络包也会发生丢失 ,因此双方在通信时必须相互确认网络包是否已经送达, 而设置 ACK 比特就是用来进行这一确认的
服务器 TCP 模块会将 TCP头部传递给 IP 模块 并委托 IP 模块向客户端返回响应
网络包就会返回到客户端
  1. 通过 IP 模块到达 TCP 模块并通过 TCP 头部的信息确认连接服务器的操作是否成功
  1. 向套接字中写入服务器的 IP 地址端口号等信息
  2. 将状态改为连接完毕
客户端的操作就已经完成
客户端也需要将 ACK 比特设置为 1 并发回服务器 告诉服务器刚才的响应包已经收到
套接字就已经进入随时可以收发数据的状态了,大家可以认为
这时有一根管子把两个套接字连接了起来
建立连接之后,协议栈的连接操作就结束了,
也就是说 connect 已经 执行完毕,控制流程被交回到应用程序

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

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

相关文章

Selenium教程__使用execute_script执行JavaScript(11)

selenium的包含的方法已能完全满足UI自动化&#xff0c;但是有些时候又不得不用到执行JS的情况&#xff0c;比如在一个富文本框中输入1W个字&#xff0c;使用send_keys方法将经历漫长的输入过程&#xff0c;如果换成使用JS的innerHTML方法就能够很快的完成输入。 selenium执行…

Shell 函数实现Go语言多版本管理轻量级方案

现有的工具方案 https://github.com/moovweb/gvmhttps://github.com/voidint/g 我的方案 优点&#xff1a; 原生&#xff1a;基于 go 语言本身支持多版本的能力实现&#xff0c;可以下载任何官方发布的版本简单&#xff1a;shell 函数实现&#xff0c;直接集成到 bashrc 或…

软件测试技能,JMeter压力测试教程,HTTP Cookie管理器(四)

目录 前言 一、场景案例 二、HTTP Cookie管理器 三、302 重定向 前言 Web网站的请求大部分都有cookies&#xff0c;jmeter的HTTP Cookie管理器可以很好的管理cookies 我用的 jmeter5.1 版本&#xff0c;直接加一个HTTP Cookie管理器放到请求的最前面&#xff0c;就可以自…

用docker搭建selenium grid分布式环境实践

目录 前言&#xff1a; selenium jar包直接启动节点 用docker命令直接启动 docker-compose 启动 Hub和node在一台机器上 Hub和node不在一台机器上 遗留问题 总结 前言&#xff1a; Selenium是一个流行的自动化测试工具&#xff0c;支持多种编程语言和多种浏览器。Sele…

【微服务架构演进】一文读懂单片到微服务架构的模式和最佳实践

在本文中&#xff0c;我们将学习如何使用设计模式、原则和最佳实践来设计微服务架构。我们将使用正确的架构设计模式和技术。 在本文结束时&#xff0c;您将了解如何在微服务分布式架构上设计系统以实现高可用性、高可扩展性、低延迟和对网络故障的弹性&#xff0c;从而处理数百…

学习Spring之声明式事务

什么是事务&#xff1f; 一个业务有一组操作&#xff0c;要么都成功&#xff0c;要么都失败 事务的四大特性&#xff1a;ACID A 原子性&#xff1a;一组操作&#xff0c;要么都成功&#xff0c;要么都失败 C 一致性 &#xff1a;事务的前后要保证事务的一致性 I 隔离性 &…

QLabel的使用

QLabel介绍 QLabel 是 Qt 框架中的一个控件类&#xff0c;用于显示文本或图像。它可以在窗口或其他容器中显示静态文本&#xff0c;并且可以根据需要设置格式、对齐方式和尺寸。 主要作用如下&#xff1a; 显示文本内容&#xff1a;QLabel 可以显示文字内容&#xff0c;可以…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第二天

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

Spring Boot 中使用 @EventListener 注解监听事件

Spring Boot 中使用 EventListener 注解监听事件 Spring Boot 是一个流行的 Java Web 框架&#xff0c;它提供了丰富的功能和工具来简化开发人员的工作。其中一个非常有用的功能是事件监听器。在 Spring Boot 中&#xff0c;我们可以使用 EventListener 注解来监听事件&#x…

一天时间完成Python入坑(开发环境搭建、excel解析、exe打包三步走)

0.为什么要入坑Python 早就知道Python好&#xff0c;Python妙&#xff0c;Python用起来呱呱叫。工作上一直没有什么用得上Python的必要性&#xff0c;就一直没有接触&#xff0c;本次终于来了机会&#xff1a;【图新地球桌面端要对外开放Python API】&#xff0c;开放图新地球的…

【mars3d】Cesium实现雷达放射波

Cesium实现雷达放射波 1、雷达放射波 先看效果图 说明&#xff1a;使用的是mars3d框架&#xff0c;原生的Cesium实现方式可以绕道~ 实现方式&#xff1a; <template><div id"mars3dContainer"></div> </template><script setup> i…

Fiddler抓包基础使用

目录 一、设置抓谷歌浏览器https数据包 1、选中以下选项即可 2、若是选中后还是未抓到HTTPS数据包&#xff0c;则可进行以下操作 二、设置抓取Firefox浏览器HTTPS数据包 1、Firefox的代理需设置系统代理&#xff0c;设置→高级→网络设置&#xff0c;设置为系统代理&#…

【深度学习】5-3 与学习相关的技巧 - Batch Normalization

如果为了使各层拥有适当的广度&#xff0c;“强制性”地调整激活值的分布会怎样呢&#xff1f;实际上&#xff0c;Batch Normalization 方法就是基于这个想法而产生的 为什么Batch Norm这么惹人注目呢?因为Batch Norm有以下优点&#xff1a; 可以使学习快速进行(可以增大学习…

广工赢清华,炸裂!

去年2022年广工对阵清华&#xff0c;我在知乎写了文章 清华赢球靠的是广东第一高中生邹阳和2022届CBA状元王岚嵚。 比分焦灼的第四节关键时刻&#xff0c;邹阳在左角底线持球高高举起篮球&#xff0c;那个球的弧度非常高&#xff0c;皮球以稳稳的抛物线弧度掉入篮筐。 之后&…

Python基础(21)——Python函数实战、递归、lambda、高阶函数

Python基础&#xff08;21&#xff09;——Python函数实战、递归、lambda、高阶函数 文章目录 Python基础&#xff08;21&#xff09;——Python函数实战、递归、lambda、高阶函数目标一. 应用&#xff1a;学员管理系统1.1 系统简介1.2 步骤分析1.3 需求实现1.3.1 显示功能界面…

Streamlit基础教程

streamlit是什么 streamlit是一个开源的python库&#xff0c;它能够快速的帮助我们创建定制化的web应用&#xff0c;而且还非常便于和他人分享&#xff0c;特别是在机器学习和数据科学领域。整个过程不需要你了解任何前端的知识&#xff0c;包括html、css、javascript等&#x…

Vue3 计算属性和侦听器实战(computed、watch)——简易点餐页面

文章目录 &#x1f4cb;前言&#x1f3af;项目介绍&#x1f3af;项目创建&#x1f3af;代码分析&#x1f3af;完整代码&#xff08;含 CSS 代码&#xff09;&#x1f4dd;最后 &#x1f4cb;前言 这篇文章记录一下 Vue3 计算属性和侦听器 &#xff08;computed、watch&#xf…

网络安全自学能学会吗?网络安全如何学习

网络安全是近年来的热门工作&#xff0c;吸引了许多小伙伴开始学习网络安全知识。那么我们应该如何学习网络安全呢&#xff1f;这是一个很多人都在考虑的问题。网络安全可以自学吗&#xff1f;自学网络安全能不能学会&#xff1f; 无论什么知识都是自学的&#xff0c;只是说每…

数学物理学家心中的十大最美方程

“你认为最美的数学、物理方程是什么&#xff1f;”当代十位大数学家、物理学家给出了他们自己的回答。这些回答构成了大雅之美&#xff08;The Concinitas Project&#xff09;的十篇文章。我们为读者带来这些大师对自己眼中最美方程的精彩解读。 1.指标定理 撰文 阿蒂亚爵士…

机器翻译与自动文摘评价指标 BLEU 和 ROUGE

机器翻译与自动文摘评价指标 BLEU 和 ROUGE 在机器翻译任务中&#xff0c;BLEU 和 ROUGE 是两个常用的评价指标&#xff0c;BLEU 根据精确率(Precision)衡量翻译的质量&#xff0c;而 ROUGE 根据召回率(Recall)衡量翻译的质量。 1.机器翻译评价指标 使用机器学习的方法生成文…