Scoket通信原理

      最后更新:2022-04-05 20:42:20 手机定位技术交流文章

      原文链接
      你从未听说过TCP/IP、UDP或套接字编程吗?随着在线技术的进步,它们越来越普遍。因此,我想提出以下问题:

      1. TCP/IP和UDP是什么?
      2. 那么,索科特在哪里?
      3. 索科特到底是什么?
      4. 你会使用它们吗?

      TCP/IP和UDP是什么?

      TCP/IP(转让控制/互联网议定书),通常称为转让控制议定书/互联网议定书,是为广域网制定的一套协议。
      UDP(用户数据协议、用户数据报告协议)是TCP对应协议,是TCP/IP社区的一部分。
      这些协定之间的联系如下图所示。
      图1
      TCP/IP社区由运输层、网络层和连接层组成,现在你们了解TCP/IP和UDP之间的联系。
      那么,索科特在哪里?
      我们在图1中看不到索科特的影子, 所以它在哪里呢? 还是它在谈论它?
      在这里插入图片描述
      索科特,事实证明,已经到了。
      索科特到底是什么?
      在应用层面,插座是连接TCP/IP社区的中间软件的抽象层。它是一组接口。在设计模式中,事实上,索克特是一个正面模型。复杂的TCP/IP组隐藏在Socket界面下。对用户来说,所需要的只是一套简单的接口。让我们请Socket帮我们整理数据以符合指定的协议。
      你会使用它们吗?
      前夫帮了我们很多忙互联网使人们更容易相互交流。毕竟,还有许多工作要做。套接字编程是我听过的事我认为,这显示了对方案编制的高度理解。只要我们知道Socket的编程如何运作 我们就没事了神秘的幕幕已经分开了
      一个生活中的场景。你要去联系一个朋友,先拨号,一个朋友听到电话铃声后打来电话然后你和你的朋友组成了同盟。就可以讲话了。等交流结束,通过挂断电话结束这次对话它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它的工作方式,它TCP/IP可能是偶然造成的。这也不一定。
      在这里插入图片描述
      先从服务器端说起。服务器客户端初始化 Socket 。然后它就被绑在港口(bind)上。听端口是一个闪亮的光亮。接受区块是一个呼叫 。等待客户端连接。在现阶段,如果客户创建了套接字,之后,连接到服务器上。如果连接成功,然后在客户端和服务器之间建立连接。客户要求提供数据。服务器终端接收和处理请求。然后向客户发送答复数据。客户端读取数据,最后关闭连接,一次交互结束。

      ============================================

      我们认识到信息交流的重要性。如何在网络各进程之间进行沟通,以及如何相互交流。如果我们每天打开浏览器浏览网上网页浏览器处理与网络服务器进行通信的机制是什么?当你用QQ聊天时,\可以连接到服务器或\包含你最亲密的朋友?这一切都是插座吗?什么是插座?什么样的插座?和Socket的根本目的。本条将叙述所有这一切。本文件的要点如下:
      网络程序如何相互沟通?

      第二,什么是索科特?

      3. 接合功能的基本原理

      3. 0, socket () 函数

      三.2. 方法约束()

      3.3、倾听()和合同()

      (接受)(第3.4版)

      3.5. 例如,读()和写()函数。

      三.6. 方法接近()

      3次TCP4Socket的握手解释了连接的原因。

      Sockket握握手释放链接中四个TCP的全面说明

      6、一个例子
      网络程序如何相互沟通?
      当地有几种程序间通信方法,但可以分为四类:

      信息传送(管道、FIFFO、Quue)

      折射、条件变量、读写锁、档案和写入记录锁、信号音量都是同步的实例。

      共享内存( 无名和无脸)

      呼叫远程进程(Solaris门和Sun RPC)

      然而,这些都不是本研究报告的主题!我们正在讨论的是如何在网络进程之间进行沟通。第一个需要回答的问题是,如何仅仅标志一个进程。否则通信无从谈起!能够被承认的过程是可以通过PID过程在当地确定的唯一过程。但是,这在网络中并不起作用。实际上,TCP/IP社区帮助我们解决这一问题。在网络一级,“ip 地址”只能识别网络的主机。另一方面,传输层的“协议+端口”在主机中可单独识别应用程序(程序)。这就是如何使用三一( Pip 地址) 组 。协议,我们就能确定网络的过程在网络上,可利用流程通信与其他流程进行接触。

      TCP/IP应用程序经常使用应用编程接口,如UNIX BSD的Socket和UNIX System V的TLI(已逐步取消)。使网络活动相互交流。就目前而言,几乎所有应用程序都使用袜子。现在我们生活在互联网时代。就过程通信而言,互联网是无处不在的。这就是为什么我说, "一切都就位了。"
      第二,什么是索科特?
      我们已经知道 网络过程会通过插座沟通那么,什么是插座?它来自Unix。"所有文件"是一个基本的 Unix/Linux 概念。都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。根据我的理解 索科特是模型的实现之一Socket 是一个独特的文档 。多个套接字函数是它们上的动作( 读/ write IOs, 打开, 关闭) 。下文将进一步讨论这些职能。

      “口袋”一词的起源
      该网络首次用于IETTF RFC33, 于1970年2月12日发布。Stephen Carr, Steve Crocker, 和Vint Cerf是作家。根据美国电脑历史博物馆的数据Croker解释道, “命名空间的元素可以被称为 Socket 接口 ” 。套接字界面是连接终止的点。另一方面,连接可能完全被两个同步界面描述。我不知道我该怎么办。电脑历史博物馆指出, “这比BSD设定的字界面规格提前了大约12年。” “我不知道我该怎么办。”

      3. 接合功能的基本原理
      Socket 提供了这些操作的功能界面。下文提供了一些基本的套接字界面功能,例如,在 TCP 中。

      3. 0, socket () 函数
      int socket(int domain, int type, int protocol);
      套接字功能相当于打开标准文件 。典型文件的打开进程返回文件描述 。要生成套接字描述符, 请使用套接字 () 。这是唯一的信号 插座。此套接字描述与文章中的描述相同 。今后的所有行动都依靠它。把它作为参数,用于阅读和写作。

      您可以提供多个参数值, 以打开不同的文件, 同样也可以指定不同的参数, 以在创建套接字时构建不同的套接字描述符, 套接字函数的三个参数是分辨的, 您可以提供多个参数值, 以打开不同的文件, 同样也可以指定不同的参数, 以在创建套接字时构建不同的套接字描述符, 套接字函数的三个参数是 :

      这是协议域 。它有时被称为 " 家庭 " 。常用的协议族有,AF_INET、AF_INET6、AF_INET6、AF_LOCOL(或AF_UNIX)和AF_UNIXUnix 域套接字、 AF_ROUTE 等。Socket 地址类型由组织选择 。为了进行沟通,必须使用相关地址。如果AF_INET使用IPv4地址(32 位)和端口号组合(16 位),AF_UNIX使用绝对路径名称作为其地址。
      类型:定义套接字类型。最常见的插座类型是:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等(什么样的插座?)。
      问:你到底在说什么?就是指定协议。常用的协议有,支持IPPROTO-TCP、IPPROTO-UDP、IPPROTO-SCTP、IPPROTO-TIPC以及更多的协议。它们是TCP传输协议、UDP传输协议、STCP传输协议和TIPC传输协议。)。
      并非所有上述类型和协议都可以随意混合,例如, SOCK_STREAM 无法与 IPPROTO_UDP 结合。 当协议为 0 时, 自动选择与类型类型相应的默认协议 。

      当我们用套接字功能构建套接字时返回的套接字属于协议组( 地址家族等) 。在AF-XX区域,然而,没有确切的地址。如果你想给它一个位置必须援引约束()函数相反,当您运行连接 () 或听 () 时, 系统会随机分配端口 。

      三.2. 方法约束()
      如前所述,约束()方法从地址家庭向Socket指定一个具体地址。例如,相当于AF_INET的AF_INET,AF_INET6是SocketIPv4或ipv6地址和端口号的组合。

      int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
      函数的三个参数如下:

      Sockfd : 这是套接字描述, 它由套接字 () 函数组成, 并且被单独指定为套接字 。 绑定 () 函数用于给此描述一个名称 。
      添加器: Const 结构化的 sockaddr * 引用协议地址与袜子捆绑。 此地址的改变结构取决于地址形成时的地址组, 例如 IPv4 等同 :
      struct sockaddr_in {
      sa_family_t sin_family;
      in_port_t sin_port;
      struct in_addr sin_addr;
      };

      struct in_addr {
      uint32_t s_addr;
      };
      ipv6对应的是:
      struct sockaddr_in6 {
      sa_family_t sin6_family;
      in_port_t sin6_port;
      uint32_t sin6_flowinfo;
      struct in6_addr sin6_addr;
      uint32_t sin6_scope_id;
      };

      struct in6_addr {
      unsigned char s6_addr[16];
      };
      Unix 域相当于 :
      #define UNIX_PATH_MAX 108

      struct sockaddr_un {
      sa_family_t sun_family;
      char sun_path[UNIX_PATH_MAX];
      };
      对应地址长度。
      服务器通常在启动时配置一个众所周知的地址(例如IP地址+端口号)。用于提供服务,客户无需提供它才能连接到服务器。有一个系统自动指定一个端口号及其自己的IP地址组合。因此,服务器端通常在监听前先执行绑定( ) 。客户不会打电话的相反,一个由连接()时的系统随机生成。

      网络的字节顺序和主机的字节顺序
      主机字节序列是我们经常称之为大端和小端模式:不同的CPU有不同的字系列类型,与内存中整数保存的顺序相对应,即主机序列。

      (a) 对于低比特排放量,小英属是低位址;对于高比特排放量,大英属是低位址。

      (b) 大英是高低字节排放量的最低地址。

      网络字节:以下列顺序传送32位元,共4位元: 0-7比特, 0-7比特, 0-7比特, 0-7比特, 0-7比特, 0-7比特, 0-7比特, 0-7比特, 0-7比特, 0-7比特, 0-7比特, 0-7比特, 0-7比特, 0-7比特,第二个是8 -15比特。然后是16 -23比特终于有24 -31比特了这种传输模式被称为一个巨大的字节顺序。由于TCP/IP初始部分的所有二进制整数必须按此顺序进行,因此,它被称为网络字节序列。字节序,按字母顺序排列的字节顺序,这是存储于内存中大于一字节的数据的顺序 。没有单字节的数据顺序 。

      结果,当你给插座指定一个地址时,首先将主机字节顺序转换为网络字节顺序 。不要假设主机字节序列与网络字节序列相同。因为这个问题已导致一宗血案!由于公司项目代码中的这个问题,这不是我第一次 访问一个我住过的国家因此,不要对主机的字节顺序做任何假设。注意将其转换成网络字节序列,然后传送到Socket。
      3.3、倾听()和合同()
      如果作为服务器, Listen () 用于在调用套接字 () 后监听此套接字, 捆绑 (), 如果客户端在此点调用连接 () 以提交连接请求, 服务器将接受请求 。

      int listen(int sockfd, int backlog);
      int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
      监听函数的第一个参数是您想要监听的套接字的描述 。第二个选项指定相关套接字可以排队的最大连接次数 。默认生成的套接字 () 函数是活动类型 。监听功能将套接字状态从活动状态改为非活动状态 。客户连接请求正在处理中。

      连接函数的第一个参数是客户端的套接字描述,第二个参数是服务器套接字地址,第三个参数是套接字地址的长度。连接函数被客户端用来建立与 TCP 服务器的连接。

      (接受)(第3.4版)
      TCP 服务器调用套接字 () 、 捆绑 () 和 听 () 的调用结束后,他们会按指定的索克特地址调音执行 socket () 和连接 () 之后, TCP 客户端试图向 TCP 服务器提出连接请求 。当 TCP 服务器收到此请求时,接收请求时,您将使用接受()方法。因此,建立了这种联系。然后可以开始I/O程序。类似于打开标准文件的 I/O 操作。

      int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
      接受函数的第一个参数是服务器的套接字描述 。第二个参数是 rut sockaddr * 的引用。无法关闭临时文件夹:%s。协议地址的长度是第三个论点。如果魔方成功,因此,返回值是内核创建的全新描述。该代表与返回客户的TCP有联系。

      应当指出,第一个接受参数是服务器的套接字描述。服务器开始使用套接字 () 方法 。听套接字描述是它的名称; 接受函数返回连接套接字描述 。通常,服务器只产生监听插座描述。它存在于服务器的整个生命周期对于服务器进程所接受的每个客户端连接,内核生成一个连接的插座配置文件。当服务器对客户的服务完成时,与之对应的相关套接字描述已经关闭 。

      3.5. 读()和写()的方法
      当一切正常时,服务器已经与客户端连接。网络一/O可以用于阅读和写作,即网络二中各个进程之间的通信。网络一/O分为以下几类:

      read()/write()
      recv()/send()
      readv()/writev()
      recvmsg()/sendmsg()
      recvfrom()/sendto()
      我提议采用revmsg()/sendmsg()方法,这是最常用的 I/O 函数,可用上述其他函数替代。

      读取函数从 fd 读取。如果读取成功,函数返回。读取返回读取的字节数 。如果返回的结果为 0, 则表示文件已经读完, 直至结束 。值小于 0 表示错误。如果错误向INTR解释读数中断,与EONNERTST案的关联存在一个问题。

      成功时, 写入函数会将 nbutes 字节内容写入文件描述符, 并返回已写入的字节数 。失败时返回-1,设置变量错误( S)在网络程序中,当我们写到标题文件时,我们有两个选择。(1) 写回值大于零。它需要写入部分或全部数据。2) 的数值小于零。此时出现了错误。我们必须按照错误的方式处理它。如果EINTR有过失,则在写作过程中发生中断错误。如果EPIPE显示存在连接问题(另一方已关闭连接)。

      我将不以任何其他方式讨论这些 I/O 函数; 取而代之的是看 man docs or beidu, Google, 下面的样本将用于发送/ recv 。

      三.6. 方法接近()
      当服务器连接到客户端时,将进行一系列读写操作,相应的套接字描述在读写完成后关闭,就像打开的文件必须用封条关闭一样。

      #include
      int close(int fd);
      当 TCP 套接字的默认行为丢失时, 套接字会被标记为关闭, 并立即返回呼叫程序。 此描述不再被调用, 即不再被允许作为初始读写参数 。

      关闭操作只更改相关套接字描述的引用计数-1, 并且只导致 TCP 客户端在引用计数为零时向服务器发布终止请求 。
      3次TCP4Socket的握手解释了连接的原因。
      我们知道,tcp连接将是“三握手”——也就是说,将交换三个分组。

      客户端向服务器发送 SYNJ 消息 。
      服务器响应客户的 SYNK, 用 ACK J+1 校验 SYNJ 。
      在服务器上,客户端希望发送另一个确认 ACK K+1 。
      只有三次握手,但是在整个套接字功能中发生的三次握手怎么办?
      在这里插入图片描述
      图1. TCP握握手三次通过小袜子传送

      从图中可以看出,当客户按下连接按钮时,触发了连接请求,服务器收到SYN J软件包。服务器听到连接请求并禁止连接 。这个故事是我们对2011年埃及抗议的特别报导的一部分。接受将SYNK传送给客户的请求,使用接受功能。ACK J+1,接受已关闭; 客户端从服务器接收 SYNK 。在 ack J+1 后进行 J+1 。这是连接返回的点 。SYNK 必须确认; 当服务器获得 ACK K+1, SYNK 必须确认 。accept返回,至此三次握手完毕,连接建立。

      摘要:客户连接回复第二次以三种握手方式返回,服务器客户接受回复第三次以三种握手方式返回。

      Sockket握握手释放链接中四个TCP的全面说明
      上文将讨论Socket的三个TCP握手程序以及其中的套接字功能。这里我们提供四个Socket握手,以释放连接,如下图所示:
      在这里插入图片描述
      图2. 在Socket4次传送的TCP握手

      图示过程如下:

      当 TCP 传输 FIN M 时, 应用程序首先使用关闭关闭连接 。

      在另一端收到FIN之后,进行了被动关闭,并核实了FIN, 其接收也作为档案的结尾传送到申请过程,因为FIN的接收表明,申请过程将不再收到有关联系的更多数据。

      具体时间过后,获得文件内装器调用的申请程序终止了该程序,导致其TCP签发了FIN N;

      接收此 FIN 的发件人 TCP, 以便确认 。

      因此,每个方向都有一个财务处和一个财务处。

      第六,这里的例子 发生了什么事。

      首先,给我们发一张关于这是怎么回事的截图。
      在这里插入图片描述

      客户端代码:

      伊尼特索克(InitSock.h)

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

          热门文章

          文章分类