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

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

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

(该图由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 地址和端口号  会传递给协议栈中的 TCP 模块

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

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

 

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

服务器的 TCP 模块根据 TCP 头部中的信息找到端口号对应的套接字文章来源地址https://www.toymoban.com/news/detail-498786.html

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

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

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

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

相关文章

  • USB服务器是怎样解决加密狗连接和管理问题的?效果如何?

    在数字化时代,加密狗作为保护软件知识产权和企业数据安全的重要工具,已经被广泛应用于各个行业。然而,加密狗的使用存在诸多问题,如无法在虚拟机环境中远程连接、分散管理、易丢失等,给企业的运营带来了不小的困扰。 在这样的背景下,USB服务器应运而生,为加

    2024年02月22日
    浏览(26)
  • 【深度学习】教你怎样远程连接云服务器跑自己本地电脑上的代码

    自己要跑的代码包 本地电脑上打开、调试代码的工具----------本文使用PyCharm 远程连接用的深度学习云服务器环境------------本文使用AuToDL这款AI服务器(推荐使用,实惠好用) 自己用到的代码包如下: 用PyCharm打开代码包,如下: 点击‘文件’---- ‘设置’----------- ‘工具’

    2024年02月05日
    浏览(42)
  • zotero连接至服务器失败,请重新检查网络连接

    本博客用于记录本人在使用zotero时碰到的问题,无法确保当中的解决方案适用于所有人。 在使用zotero阅读和管理文献时,经常会用到翻译功能和同步功能。在使用zotero翻译插件翻译英文文献时显示无法连接至服务器,请重新检查网络连接。在进行同步时,也出现同样的问题。

    2024年02月11日
    浏览(35)
  • 网络编程: 服务器百万连接实现

    实验内容: 用三个客户端与服务器建立百万连接 服务器代码: Reactor 将实验遇到的问题记录如下 一个TCP连接叫做TCP控制块(tcp control block)。区分网络连接的五元组元素有 添加功能 增加服务器监听端口 如果服务器只用一个端口,那么至少需要10e6/(2^16-1024) ≈ 16台虚拟机。(能分

    2024年01月20日
    浏览(36)
  • 服务器有网络连接但无法上网是怎么回事

    服务器有网络连接但无法上网是怎么回事 一、网络设置的问题 这种原因比较多出现在需要手动指定IP、网关、DNS服务器联网方式下,及使用代理服务器上网的。仔细检查计算机的网络设置。 二、DNS服务器的问题 当IE无法浏览网页时,可先尝试用IP地址来访问,如果可以访问,

    2024年02月11日
    浏览(36)
  • 幻兽帕鲁服务器为什么网络连接失败?

    幻兽帕鲁服务器网络连接失败可能有几个原因,例如防火墙没有配置,幻兽帕鲁专用端口8211未放通。如果是阿里云一键部署的幻兽帕鲁,可以打开安全组设置。如果是腾讯云一键部署的幻兽帕鲁,可以打开防火墙配置。   点击【添加规则】 协议选择【UDP】,端口输入【821

    2024年02月20日
    浏览(36)
  • 安装Ubuntu服务器、配置网络、并安装ssh进行连接

    详见: U盘安装Ubuntu系统详细教程 详见:https://blog.csdn.net/davidhzq/article/details/102991577         最重要的就是下面这样图要配置好, 至于子网掩码、网关、DNS等,需要打电话去获取。也就是谁给你的ip,你就打电话向他问这些相关信息。 参考链接: https://zhuanlan.zhihu.com/p/14697

    2024年02月12日
    浏览(32)
  • 解决基于Docker部署PowerJob跨服务器的网络连接问题

    前提:docker、docker-compose 主服务器的 docker-compose.yml 的配置 从服务器的 docker-compose.yml 的配置 解决思路:使用 host 网络模式,而且给powerjob指定网络,避免它自动获取,否则将会失败 – 缺点就是每个服务器都要去配置 前提:docker、docker-compose、docker-swarm 解决思路:使用 doc

    2024年02月11日
    浏览(29)
  • rustdesk自建服务器总是掉线 未就绪, 请检查网络连接

    在自建服务器时, 如果服务器的IP是内网,通过openwrt路由器端口转发(21115-21119 UDP/TCP), 此时客户端刚启动能连上, 过会儿就掉线了, 再过会儿又连上了, 这样往复。而且有时明明看到客户端是掉线的,却也能连,但被连客户端必须是在线的。 目前我发现OPENWRT路由器端口转发

    2024年02月13日
    浏览(144)
  • 9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作

    内容参考于:易道云信息技术研究院VIP课 上一个内容:游戏底层功能对接类GameProc的实现 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan 码云版本号:44c54d30370d3621c1e9ec3d7fa1e2a028e773e9 代码下载地址,在 titan 目录下,文件名为:titan-接管游戏连接服务器的操作.zip 链接

    2024年03月08日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包