网络通信套接字 (Linux)

      最后更新:2021-11-13 04:45:01 手机定位技术交流文章

      网络通讯插座

      事先资料是根据其基础有选择地看待的。

      文章目录

      • 网络通讯插座
        • 预备知识:
          • IP 及 端口
          • 网络模型
          • 字节序
          • IP地址转换
          • 虚拟地址空间
          • 文件描述符
          • Sockaddrs / sockaddr_ in 结构结构
        • socket 编程
          • TCP通信流程
          • 标准套接字功能的全面解释
          • 服务器端代码实现
          • 客户端代码实现

      预备知识:

      IP 及 端口

      IP:整数是本质,表示网络中的计算机地址IPv4和IPv6是两个IP协议。

      IPv4 协议:(目前最高为32整数)意味着4字节,也可以以小数数字表示:

      IPv4 地址最为常见 。2^32个,更少的人开始建立 IPv6。

      IPv6协议:16字节128整数整数,

      IP 地址串描述: 2001: 0db8: 3c4d: 00: 15: 00: 00: 1a2f: 1a2b

      ​ *IPv4 地址最为常见 。2^128个

      端口:在主机上定位进程的方法。使用此端口程序进行通信 。

      端口是带有值( 0 2 16-1) 的无符号短整数。

      应当指出,单一港口只能由一个过程使用。

      IP地址被解释为旅馆的地址,而港口被解释为每个房间的电话号码。

      网络模型

      网络分成模型

      在这里插入图片描述

      网络各层的作用:

      1. 物理层负责将信息编码成当前脉冲或其他传输信号。
      2. 数据链层:提供跨物理网络的数据传输,以确定网络数据集的格式。
      3. 网络层:负责连接源和终点(见通过 IPv4 或 IPv6 的适当主机)。
      4. 传输层:提供上到下网络数据流服务(TCP/UDP协议)。
      5. 在会议级别上建立、管理和终止表达式一级与实体之间的沟通会议。
      6. 表达式层:从应用层对数据进行编码和操作,以保证从另一个应用层对数据进行识别。

      字节序

      没有必要在任何计算机系统结构中储存机制,为了定期通信,所有各方均应遵守同样的规则,以避免通信失败。

      字节名称的顺序是存储大于字节类型的数据的存储顺序,这意味着单个字符不存在字节顺序问题。字符串是单个字符的组合,因此字符串没有字节顺序问题。

      目前有两个主要的字节储存机制:大端 、小端

      • 大端 :低位字节存储到内存的高地址位高字节存储到内存低地址位

      当网络通信保存在大端点时

      • 小端:低位字节存储到内存的低地址位高字节存储到内存高地址位

      在一个温和的末端,典型的东道商店

      示例:

      Socket提供好了封装接口,用与在主机 ->网络 -> 主机之间转换字节序的函数 主->网(htons htonl) // 网->z主(ntohsntohl)

      记住在传输数据时要转换字节序列。

      IP地址转换

      尽管IP的核心是数字数据,但通常在使用时用文字表示。

      使用 IP 地址时, 也必须转换为端点 。

      虚拟地址空间

      虚拟地址空间:操作系统知识补充

      当我们在磁盘上运行一个可执行程序时,我们获得一个过程(一个过程是执行一个过程的过程,一个动态的概念)。每个操作过程都由内核指定一个虚拟地址空间,应用程序数据被装入匹配的虚拟内存位置。

      过程中处理的数据从物理内存中装入,数据通过 CPU 内存管理模块从虚拟地址空间中绘制。

      在这里插入图片描述

      虚拟地址的意义

      为什么操作系统不直接读取物理内存的数据?如果直接读过会怎样?

      在这里插入图片描述

      进程A需要100米的内存,对物理内存明确指定在0至100地址之间,进程B需要250米的内存,进程A和进程B都需要连续的内存。

      1. 每一个过程的地址并不是孤立的,构成安全风险:直接访问物理内存的程序可能存在弱点,导致改变其他方案的内存结构。
      2. 内存效率低:物理内存是直接的。 此过程与整个内存相关。 当内存不足且数据数量庞大时, 内存和磁盘复制时间会很长且浪费。
      3. 数据在这一过程中的位置不明确,而且将因时间而异:物理内存的使用是动态的,无法估计内存的利用情况,起始地址不同,数据装载是浪费的。

      文件描述符

      文件描述符

      Linux的所有文件都是文件。 程序与文件是如何匹配的?

      解决方案是当打开已有文件或在此过程中创建新文件时, 内核会使用文件描述符( fd) 返回此开放/ 新文件的描述符 。对于维护程序,这些文件描述符保存在内部内核中,作为文件描述表。

      文件描述符的概念往往仅限于Linux或Unix系统。

      文件描述符表

      当您开始一个进程时,将获得匹配的虚拟地址空间,该虚拟地址空间被分为两个主要组成部分,即Linux进程控制块、PCB(Pcb简单地定义为一个进程的所有基本信息),它包含管理进程所需的全部信息,其中之一是命名的文件,我们称之为文件描述。里面有一个矫形表可以储存文件描述。

      在这里插入图片描述

      文件说明表的性质 1 : 文件说明表默认为每个进程打开的文件的最大数量为 1024, 可以调整 。
      文件表的属性 1: 文件表中的每个进程都有三个默认分配的文档描述符, 与当前终端文件相对应 。
      内容提要 内容提要 内容提要 内容提要 内容提要 内容提要 内容提要 内容提要 内容提要 内容提要 内容提要
      文件表格属性 4: 每一个进程文件表格的文件描述值都是唯一的, 将不会重复 。

      Sockaddrs / sockaddr_ in 结构结构

      struct sockaddr是一个全球地址结构,旨在统一接口功能,允许连接()-连接()等业务使用不同的地址结构。

      袜子结构有以下缺陷:sa_ data 函数将目的地地址和港口信息结合起来。

      1. sa_家庭:交流方法,解决家庭协议(IPv4/IPv6)
      2. 插座存储在 sa_ data: 14 字节 。关于目的地地址和港口的信息

      Sockaddr_ in 结构表示一个互联网地址, 这只是我们来自AF_INET 地址家庭的更常见的地址结构。
      Sockadr_ in结构纠正了Sockaddr的缺陷,将端口和端口保留在不同的变量中。

      Sin_port / s_addr 通常是主机字节( 小端), 应该谨慎使用, 以便初始化为网络字节( htons () 函数) 。

      使用方式

      在分配 sockaddr_ in 变量后, 通常转换和转换为 sockaddr 作为参数 。

      1. 对于指定的和给定的值,请使用 lockaddr_in 。
      2. 对于函数参数,请使用 sockaddr 。

      socket 编程

      为了将TCP/IP协议相关软件纳入UNIX类系统,设计师创建了一个接口,使程序能够简单调用接口进行互动,从而形成Socket 软件包。我不确定,sys/socket. medium h

      TCP通信流程

      TCP是一个面对面连接(双向通信)安全(数据校验)流动转移(数据量不一致、数据传输/接受不一致)传输层协议

      在这里插入图片描述

      服务器端通信流程

      注:服务器上有两个文件描述符:一个用于收听客户端连接请求(只有一个存在),一个用于在发现连接请求时呼吁接受形成新连接,另一个用于与客户端(N)交谈,每个客户端和服务器对应通信文件描述符。简化服务器文件描述(用于收听客户连接)(用于和相关客户通信)

      此文件描述器的内存结构

      在这里插入图片描述

      两个内存的读写缓冲

      读取缓冲: 使用文件描述符读取内存数据 。

      写入缓冲: 使用文件描述符将数据存储在内存中 。

      客户端通信流程

      在单向的例子中,只有一个通信文件描述符。

      标准套接字功能的全面解释

      域:利用了地址家庭协议(IPv4、IPv6)。

      • IPv4 :AF_INET
      • IPv6 :AF_INET6

      运输类型(流动、报告)

      • 使用流动转移协议。
      • SOCK_DGRAM: 基于新闻的传输协议( 报告)

      协议书: 默认为 0

      • 选择 TCP 流量转移 。
      • 选择 UDP 报告传输方法 。
      • Lockfd: 监听文件描述符, 套接字操作的返回值 。
      • 添加:在这一结构中,必须初始化要约束的IP和端口信息。IP地址和端口必须转换为网络字节顺序。
      • 大小( strockt sockaddr) addren : 参数 ddr 所指的内存大小 。
      • 锁定: 使用匹配() 可以获得的文件描述符, 在监听前必须使用捆绑( ) 约束 。
      • 积压:可同时处理的最大连接次数,最高值为128。
      • Sockfd 表示监听文件描述符 。
      • Addr: 交付参数,包括相关客户的地址信息。
      • Addrlen: 输入并给出参数以存储添加点所在的内存量 。

      此功能作为中继器。 虽然没有新的客户端连接请求, 但该功能被屏蔽; 当检测到新的客户端连接请求时, 新连接被禁用, 返回的值也是一种文件描述符, 文件描述用于与客户端互动 。

      • fd: 通信文件描述符; 接受 () 函数返回值
      • Buf: 填充空格, 填充参数和要传输的字符串 。
      • len: 要传输的字符串长度

      服务器端代码实现

      客户端代码实现

      我想告诉你一点关于底部的事
      推荐大丙老师的教程

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

          热门文章

          文章分类