网络编程知识总结

      最后更新:2022-07-21 20:24:01 手机定位技术交流文章

      进程间通信方式有七种:无名管道、有名管道、信号、消息队列、共享内存、信号灯集、socket 套接字通信。
      前六种只能实现同主机的进程间通信,而socket 套接字既可以实现同主机的进程间通信,也能实现不同主机的进程间通信。

      APRANET阶段
      1968年6月, DARPA提出了资源共享计算机网络
      (Resource Sharing Computer Networks),目的在于
      连接所有DARPA计算机,这个网络叫做ARPAnet,
      Apanet是内部的最早形式

      早期的ARPAnet使用网络控制协议(Network Control
      协议,NCP),不能连接不同类型的计算机,也不能
      同样类型的操作系统,没有错误修正

      TCP/IP两步协议
      1974年12月,双方正式发表了第一份详细的TCP协议,
      但是当一个数据包丢失时,这个协议不能有效地纠正

      TCP/IP协议分为两个不同的协议:
      传输控制协议TCP用于检测网络传输中的错误
      专门用于连接不同网络的互联网协议IP

      OSI开放系统互连模型
      它是由国际标准化组织(ISO)提出的。

      *物数网传会表应

      TCP/IP协议集群的系统结构
      实际生产过程中,由于OSI开放系统互连模型太过繁琐,所以没人使用,
      但是他的思想思路是正确的,后面提出的其他体系结构,都是基于OSI开放系统互连模型而来的。

      TCP/IP协议家族是互联网的行业标准。

      应用程序层HTTP:超文本传输协议,
      FTP:文件传输协议,
      TFTP:简单的文件传输协议(使用TCP),
      SMTP: 简单的邮件传输协议.
      网络卡驱动物理接口开关
      传输层TCP:传输控制协议,面向连接,可靠,
      UDP: 用户数据报告协议, 不连接, 不可靠, 快速传输.
      网络层IP:互联协议,
      ICMP:互联网控制信息协议,IP与路由器之间发送消息的 ping命令所使用的协议
      IGMP:互联网集团管理,集团广播协议
      路由器
      网络接口和物理层(链接层) FTP
      ARP:通过IP获取对方的MAC地址的地址分析协议
      RARP:通过MAC地址获取IP地址的反向地址分析协议

      数据包装和解包装:(bitstream)
      应用程序层:用户数据(通常为128字节)
      传输层:TCP头(源端口和目的地端口)20字节
      网络层:IP头(源IP地址和目的地IP地址)20字节
      连结层:以太网头(目的MAC地址和源MAC地址)14字节(最大1,500字节的Linux数据不是以太网头)

      LINUX核心的五个功能:
      流程管理:计时器转动和上下文转换
      内存管理:内存的分配和回收
      文件管理:将0的一大堆转换为人类能够识别的字符
      设备管理:所有文件
      网络管理:网络协议堆栈(网络协议堆栈可以理解为内核提供的函数)

      TCP和UDP是相同的:
      同样的事情:这是一个传输层协议
      差异:TCP是一种可靠的基于连接的传输协议,提供高可靠性的通信、数据错误无误、无损、无序和无重复的通信
      适用于高传输质量要求以及大量数据传输,如用户登录帐户管理、密码等。
      UDP用户数据报告协议是一个不可靠、不连结的协议,它允许在数据发送之前进行高效率的数据传输,因为不需要连接
      适合发送小尺寸数据(如DNS服务器对IP地址查询时),适合于广播、组播式通信。即时通讯软件,音视频通讯。
      TCP环服务器: 两个阻塞功能.
      UDP兼容服务器: 阻塞函数.

      网络编程基础知识:
      字符串序列:存储多字符串整数的序列。
      小终端序列:数据低级地址Intel、AMD
      高级序列:数据高级地址低级ARM/Motorola

      判断你自己的主人序列 吗?
      #include <stdio.h>

      int main(){
      int m = 0x12345678;
      char *p = (char *)&m;
      if(*p == 0x78){
      printf("小端n");
      }else if(*p == 0x12){
      printf("big endn");
      }

      return 0;
      }

      不同类型的CPU主机不一定具有相同的序列,因此发送器和接收器的数据可能不相同,因此网络序列的概念被发明
      指定在网络中传输的数据必须是大端序列。

      在 什么 情况 下 应 考虑 序列 转换 问题?
      1.数据大于一个字节,并作为整体发送(字符串不需要)
      我不知道这两个通信的主机序列。

      如何将一个小端序列转换成一个大的端序列?
      #include <stdio.h>
      int main(){
      unsigned int m = 0x12345678;
      unsigned int n = 0;
      char *p = (char *)&m;
      char *q = p+3;
      unsigned char temp = 0;
      temp = *p;
      *p = *q;
      *q = temp;
      p++;
      q--;
      temp = *p;
      *p = *q;
      *q = temp;
      printf("%#x  -->  %#xn", m, n);
      return 0;
      }

      字符串序列转换函数: h(host) n(network) l(long) s(short)
      unint32_t htonl //主机转网络 4字节
      uint16_t htons  //主机转网络  2字节
      uint32_t ntohl // 4字节网络接收器
      uint16_t ntohs  //网络转主机  2字节

      //以htonl为例
      #include <arpa/inet.h>
      #include <stdio.h>
      int main(){
      unsigned int m = 0x12345678;
      unsigned int n = htonl(m);
      printf("%#x --> %#xn", m, n);
      return 0;
      }
      打印结果:0x12345678 --> 0x78563412

      插座函数也是一个特殊的文件描述符,通常称为插座
      SOCK_STREAM:TCP使用
      Sock_DGRAM:UDP使用
      原始索克DOC_RAW:直接访问IP/ICMP等低级协议

      IP地址:是网络中的主机的数目。
      IP地址与MAC地址之间的区别:每个网络卡都有在工厂出厂时的唯一标识符,称为MAC地址。
      一种在本地网络中通信时使用MAC地址通信的设备,在交换时在链层中工作。
      如果您在网络中使用IP地址进行通信,路由器是在网络层中工作的设备。
      IP地址i分为IPV4(4字节32位)和IPV6(16字节128位)

      为什么IPV4和IPV6得分?
      因为IPV4地址不够,但也不需要使用IPV6,因为现在有许多技术可以弥补IPV4的不足,
      与NAT技术一样,一个IP地址可以通过路由器发送到一个本地网络IP地址,该地址使用本地网络的IP地址,其内部性能与
      如果数据退出 LAN, 通过 NAT 技术将包中的源 IP 地址从 LAN IP 转换为公共网络 IP 。

      通过百度查询的IP地址由运营商收取费用.

      IP地址的表示:它被称为点-by-point十位数,是一个字符串,在计算机中,它是一个未签署的4位元格式。

      IPV4地址由网络号码和主机号码组成。

      IPV4地址分类:
      网络号        主机号    规定最高位     范围                      使用单位
      A    1字节         3字节      0                   0.0.0.0 - 127.255.255.255     政府/大公司/学校
      B    2字节         2字节      10                 128.0.0.0-191.255.255.255    中等规模的公司
      C    3字节         1字节      110               192.0.0.0-223.255.255.255    个人
      192.168.1.255   广播地址
      D                             1110      [224-239]                    组播
      E                             11110     [240-255]                    保留测试用的

      子网掩护:由一系列连续的零和连续的零组成,用于获取与IP地址的网络号码,并与它们进行操作,从不能限制的网络段内容纳最多数量的主机。

      如,ip地址是192.168.70.8 子网掩码设置成 255.255.255.0
      取与运算可以得到的结果:192.168.70.0  ----这是网络号,网络号相同时,才能进行通信
      本节共有256个IP地址:
      其中 192.168.70.0 是网络号,是不能占用的
      192.168.70.255 是广播的地址,也不能占用
      交换设备也需要占有IP地址,通常是同一区域网络内最小的数目。
      192.168.70.1
      因此可以容纳的主机数目:266-1-1-1(网络交换机也可以作为IP主机计算)=254

      192.168.70.x  网段将子网掩码设置成 255.255.255.128,同一子网能容纳的最大主机数?
      这样,同一段可以分成两个子网
      第一个子网IP地址范围:192.168.70.0~192.168.70.127
      第二个子网IP地址范围:192.168.70.128~192.168.70.255
      每个子网都必须减少到一个网络号码广播地址网络交换地址
      因此,子网掩饰不一定是255255255。 交换设备的IP地址不一定是最小的数目。

      IP地址转换的功能:
      inet_addr()
      将指定 bystrptr 的字符串转换为32位网络序列二进制值。
      in_addr_t inet_addr(const char *strptr);

      inet_ntoa()
      将32位网络序列二进制地址转换为点对点十进制字符串。
      char *inet_ntoa(stuct in_addr inaddr);

      #include <stdio.h>
      #include <sys/socket.h>
      #include <netinet/in.h>
      #include <arpa/inet.h>
      int main(int argc, const char *argv[])
      {
      unsigned char ip_str[] = "192.168.70.10";
      unsigned int ip_int = 0;

      ip_int = inet_addr(ip_str);

      unsigned char *p = (unsigned char *)&ip_int;
      printf("%d.%d.%d.%dn", *p, *(p+1), *(p+2), *(p+3));
      //执行结果  192.168.70.10   ----网络字节序的无符号4字节整型

      return 0;
      }

      端口号: 为了区分 host 接收的处理包到哪个进程,使用端口号区分。
      端口编号范围: 0-65535, 使用未签名短号存储.

      使用通用服务端口号:
      FTP:21
      SSH:22
      TFTP:69
      HTTP:80/8080

      TCP的三个握手和四个波浪:
      三次握手:
      发生在建立连接的过程中的,有客户端主动发起,在客户端的connect函数(listen函数)和服务器的accept函数之间发生的
      SYN:seq->SYN:seq,ACK->ACK
      为什么三次握手?不要两、四次握手?
      三个握手主要用于确认双方的沟通初始数据的能力,并进行同步。 两个缺少一个确认,还有四个。
      序列数是一个由通信双方保持的随机值,它自动增长,在超过4个字符时从0重新积累。
      四次挥手:
      中断过程完成,由发起主动中断的当事人(一般是客户)发起
      FIN->ACK->FIN->ACK

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

          热门文章

          文章分类