网络协议 13

      最后更新:2022-03-19 13:02:59 手机定位技术交流文章

      套接字Socket

      以前曾讨论过TCP和UDP协议,并展示了基于TCP和UDP协议的Socket方案。

      在TCP和UDP协议、分化的客户和服务以及编写软件时,情况也是如此。

      Socket 是一个有趣的名字。 当我们开发软件时, 考虑购买一条网络线路, 在客户端上插入一条, 在服务上插入一条, 然后进行交谈。 因此, 在通信前, 双方必须先建立一个 Socket 。

      当套接字形成时, 应该设定什么参数? 套接字是设计用于端到端通信的, 通常不理解有多少局域网或路由器通过中间, 因此参数只能根据终端到端协议上方的网络和传输水平进行调整 。

      在网络层,Socket 函数必须表明 IPv4 或 IPv6 是否要使用 。AF_INET和AF_INET6是可比设置。另外,此外,还应具体说明议定书是TCP还是UDP。牢记我们先前提到的内容。TPP议定书以数据流概念为基础。因此,让它摇摇晃晃。另一方面,联合民主党则以数据报告为基础。设置为 SOCK_DGRAM 。

      TCP 协议用于援引套接字功能。

      当两端构造索克特时, 下述程序, TCP 和 UDP 略有不同, 我们将首先查看 TCP 。

      TCP服务必须首先在一个港口收听。通常首先援引约束功能。为此 Socket 指定 IP 地址和端口号 。为什么需要端口呢?要知道,你写了一个软件程序当一个网包到来的时候,在TCP的顶部 内核穿过这个港口找到您的申请表把包给你。为什么有IP地址?有时候,几个网页卡将安装在一个单一的系统上。将有一些IP地址。您可访问所有互联网卡片。您也可以选择收听网页卡。这样,这是此 Internet 卡唯一可用的套件 。才会给你。

      当服务器有一个 IP 地址和端口号时, 您可以使用 倾听器函数来监听 。 TCP 状态图表中有列表状态, 当使用此函数时, 服务器会进入此状态, 客户端可以此时开始连接 。

      在内核中,每个套接字保留两个队列 。一个是连接队列已经形成 。三次握手都结束了在既定状态下,一个是尚未完全连接的队列,另一个是尚未完全连接的队列。目前还有三次握手尚未进行。目前处于 syn_rcvd 状态 。

      然后服务器运行获取完成的连接以进行处理的可接受方法。如果未完成,您必须等待。

      当服务延迟的时候,连接功能允许客户启动连接 。使用参数后,先给IP地址和端口号连接。然后开始了三次握手。内核分配客户临时港口一旦握手成功,当客户接受时, 将返回另一个套接字 。

      监听套接字和传送数据的真正套接字是两个经常的知识点,一个称为监听套接字,另一个称为连接套接字。

      连接建立成功之后,双方开始通过 read 和 write 函数来读写数据,就像往一个文件流里面写东西一样。这个图就是TCP 协议用于援引套接字功能。。

      TCP 的 Socket 是一个文件流, 非常准确 。 因为 Socket 作为文档存在于 Linux 中 。 此外, 文件描述符也存在 。 文件描述符也由文件描述符完成 。

      在内核中,Socket 是一种文件 。这相当于文件描述 。每个过程都有一个数据结构。是指文件描述数组的引用,以提供进程打开的所有文件的文档描述符列表整数用作文件描述符。是这个数组的下标。

      此数组包含一个引用 。是内核中所有活动文件的列表。既然是一个文件,将有一条光明,有一条光明,有一条光明,有一条光明。只是Socket对应于一个 似乎不是真实档案系统的一部分的阳极保存在硬盘上的,而是在内存中的。在这一集中,在内部核心,指索科特的索科特结构。

      在这个结构里面,主要的是两个队列,一个是发送队列,一个是接收队列。这两个队列保存了 ksk_ buff 缓存 。此缓存描述软件包的总体结构 。看到这个,是否和我们讨论过的事有关?整个数据结构如图。

      UDP 协议用于援引套接字功能。

      对于联合民主党,过程有些不一样。UDP没有连接,因此,没有必要三次握手。因此,您无需拨打收听和连接电话。但是,UDP互动仍然需要IP和端口号。也必须是零碎的。UDP不跟踪连接状态 。因此,没有必要为每对连接建立一个套接字组。只有一个套接字。你有能力与各种客户沟通这是因为没有一个。每次通信的时候,分别调用和调用可以进入IP地址和港口。

      这个图的内容就是UDP 协议用于援引套接字功能。。

      服务器如何能接收额外项目?

      您可以使用这些基本的Socket 常规程序快速建立网络互动应用程序。连接建立后,将进行一段时间的循环。客户接收和接收客户,客户接收和接收客户。

      最重要的是,这只是漫长旅程的第一步。所以,如果使用这种技术,本质上是一对一如果您作为服务器工作,我只能一次为一位消费者提供服务。肯定是不行的。好像老板开业做生意一样只有自己一个人,我是来协助我的客户的我只能一次和一家人一起工作这样赚不来多少钱。

      那么,允许我执行多少项目? 当然,尽可能多的可行。让我们从理论数字, 最大连接数开始, 系统将使用四倍组合来识别 TCP 连接 。

      要监听它,服务器通常连接到本地端口。它坐着等待客户的连接请求。因此,只有IP地址通过TCP服务端与四位数组连接,即客户IP地址和端口。因此,客户的港口是可变的,意味着客户的港口也是可变的。因此,最大 TCP 连接等于客户 IP 地址乘以客户端口号 。对 IPv4,客户双方最多拥有32个IP。客户一次最多可以连接到16个港口。这是可用于服务单身者的TCP连接的最大数量。48人中约有2人。

      当然,在服务端同时分配TCP连接的理论上限远未达到。首先,该文件的描述是有限的。按照上面的原理,Socket 是一种文档 。因此您必须首先使用 unlimit 来定义文件描述符的数量; 另一个限制是内存 。按上面的数据结构,每个 TCP 连接消耗一定数量的内存。操作系统是有限的。

      作为资源有限的拥有者,更多的项目将需要减少每个项目所需资源的数量。

      模式一:项目外包给其他组织(多程序方法)

      就像你是个特工一样那边,我接受请求一旦建立了联系,将会有连接到 Socket 的链接 。也就是当可以创建子进程时。根据与Socket的互动情况,这个新的子过程随后将交给这个新的子过程。创建一个新项目就是一个例子。但是,你并不需要自己完成这个项目。我们还可以设立一个子公司。招点人,然后,该项目重新包装并分配给该子公司。链接将转至子公司。您可以重新开始新项目的工作 。

      这里的问题是如何设立一个附属机构以及如何将项目管理委托给一个附属机构。

      使用Linux,叉子函数用于创建子进程 。通过名字可以看出,这是基于父进程的一个子程序的完全重复 。在Linux内核,它模仿文件描述器列表 。也会复制内存空间,还将重复建立一个机制,以记录目前正在使用的哪些程序路线。显然,复制时请使用叉子指令 。复制完毕之后,父母和子女过程都跟踪最近的叉子。当这两个过程完成时,几乎一模一样,它只是基于叉子的返回结果 来决定它是否是一个父进程。还是子进程。如果返回值是 0,是子进程;如果返回值是另一个整数,那么就是父进程。进程复制过程如图。

      父进程也是一个文件描述符, 由子进程获取, 父进程刚因接受而形成的连接的索克特, 因为文件描述符列表被复制, 文件描述符则指文件列表向整个内核打开 。

      接下来,Socket 和客户端将能够通过此已连接的子进程连接 。当通信完毕之后,就可以退出进程,母进程如何知道子进程何时完成?要退出呢?记得叉子重新出现的时候吗?这是父进程,如果它是整数?子进程的身份是整个数字 。父母程序可以使用这一身份证明来确定儿童程序是否完成了项目。是否需要退出。

      模式二:项目转换成独立项目组(多线方法)。

      您也可以以这种方式发现困难,如果你每次完成一个项目都申请新企业,取消项目实在太麻烦了。 毕竟,一家新公司需要新的公司资产、新的办公设备以及每次购买和转售,而这不符合成本效益。

      于是你应该想到了,可以使用线程。相比于进程来讲,这样要轻量级的多。如果创建过程与成立新公司相似,购买新办公家具,而创建线程,这与在同一个组织内设立一个项目小组相同。一个项目做完了,因此,项目小组可能解散。组成另外的项目组,办公家具可以共用。

      使用Linux,使用 pthread_ create, 您可以创建线索 。也称为Do_fork。不同的是,虽然每个新职位在标签列表中都增加了一个新项目,但是很多资源,例如,文件描述符、过程空间等列表。还是共享的,这只是另一个引用。

      新的线条也可以用来通过先前链接的索科特处理请求,满足共同处理的目的。

      它以线性或过程模型为基础。其实还是有问题的。TCP连接刚到必须指定一个进程或线索 。计算机无法生成大量进程或线索 。有个C10K,它是指一台能够维持10,00个连接的计算机。我们需要一万个流程或线索这样操作系统就负担不起了。我们需要10万台服务器 才能维持1亿人的在线生活成本也太高了。

      事实上,C10K的问题在于 你的项目太多, 如果每个项目都有自己的项目团队, 你必须雇用10万人, 你知道你负担不起。

      模式三:许多项目由一个单一项目组(IO多电路、管理若干袜子的一条线)提供支助。

      当然,一个项目小组可以同时研究许多项目,届时,每个项目小组应有一个项目进度墙,其中列出它将看到的项目,然后每天通过项目墙监测每个项目的进展情况,以便监测特定项目的发展情况。

      Socket 是文档描述符, 因此因此,有些线索正在看着整个索科特。fd_set 是文件配置文件集 。这就是项目进度墙,然后,使用选中的函数来查看文件配置集是否有变化 。一旦有变化,您将逐个查看每个文件的描述 。在 fd_set 中,文件描述中的修改设置为 1 。它表示索科特可以读写。这是读写的一个好方法然后打电话选择。然后考虑以下一系列变化。

      模式四:几个项目由一个单一项目组(IO多常规,从“寻求”到“商业通知”)支助。

      上述职能仍很困难。因为每次Socket的文件剖析器收藏发生改变这一切都归结为 一轮质询。这意味着必须审查所有倡议,以便能够了解它们取得了多大进展。这对项目组能够支助的项目数量有重大影响。这就是为什么我们使用“选择”一词的原因。FP_SETSIZE 限制可同时针对的项目数量。

      如果对事件通知制度进行调整,使项目小组不必通过24小时不间断的询问逐一审查每个项目,而是主动在项目进展发生变化时提醒项目小组,然后项目小组将根据项目进展相应开展工作,则情况会好得多。

      Poll 是一个能够实现这一点的函数,它不是通过旋转而通过内部核心实现的,而是通过登记回调功能实现的,当文件描述符传达变化时会提醒它。

      如图所示,假设这个过程打开了套接字 m、 n、 x 等 。现在必须通过民意调查听取意见,以确定这些事情是否已经发生。虽然apoll_create 产生apoll 对象,也是一个文件,此术语也用于指文件描述符 。也相应于文件打开列表中的对应文件。这棵树有红树和黑树在红黑树里,为了保存这个选票 为了听所有袜子的声音

      当 Polot_ctl 添加一个 Socket 时, 会发生下列情况 :实际上,它是红树和黑树的分支。同时,红黑树的节点指向一个结构。将此结构挂在所观察到的索克特事件列表中 。当一个索克特人来到一个地方的时候,您可以从此列表中获取通知对象 。然后打回电话让他们知道

      这类通知增加了所调取的套接字数据的数量。它的效率不会降低。可同时调用的袜子数量确实很大。系统所建立并由程序打开的文件描述文件的最大数量为上限。因而,Poll是解决C10K问题的工具,众所周知。

      小结

      TCP和UDP Socket 编程中的客户和服务必须调用哪些功能?

      很难设计出能够提供大量连接的高端服务,因为这需要若干流程和线条,而且民意调查方法可以解决C10K问题。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/20426.html

          热门文章

          文章分类