1.15io网络

子网掩码

1.由于对于一个网络下面的主机号还是很庞大,为了进一步划分网络,我们可以将主机号再次进行划分为两部分,分别是网段号和主机号

2.此时就引入的子网掩码的概念

3. 在引入子网掩码后,IP = 网络号 + 子网号 + 主机号

4.子网掩码:用于ip地址的三级划分,划分时,用户可以选择划分,也可以不划分,如果不划分,就使用默认的子网掩码

定义格式:与IP地址一样长的32位整数,由一串连续的1和一串连续的0组成

默认子网掩码:1的个数与ip地址中网络号的个数保持一致,0的个数与ip地址中主机号的个数保持一致

默认子网掩码

C类网络:

192.168.125.161 ---> 11111111 111111111 11111111 000000000 ----> 255.255.255.0

A类网络:

58.1.2.3 ---> 11111111 000000000 00000000 00000000 ----->255.0.0.0

B类网络:

150.1.2.3 ---> 11111111 11111111 00000000 00000000 ----> 255.255.0.0

D类网络和E类网络没有子网掩码

5.子网掩码的使用:ip地址 & 子网掩码 ==> 子网网段

以192.168.125.161为例,子网掩码为255.255.255.0

   11000000 10101000 01111101 10100001

& 11111111 11111111 11111111 00000000 ——————————————————————————————————————

11000000     10101000 01111101 00000000 --->192.168.125.0 子网网段

6.特殊的网络

当前网络:网络加主机号为0的ip地址,例如:192.168.125.0

广播地址:网络号加主机号为255的ip地址,例如:192.168.125.255

网关地址:网络号加主机号为1的ip地址,例如:192.168.125.1

端口号(重要)

1.  端口号是能够实现网络端对端的通信

2.  是主机中某个进程的标识,由于某个进程关闭后,再打开,pid会不断更改,所以,在启动一个进程时,可以指定端口号,标识该进程

3.  端口号是一个2字节的无符号整数,取值范围[0,65545]

4.  端口号的分类:

众所周知的端口号:

0~1023端口编程时候不要使用,是那些”VIP“应用程序占了

TCP 21端口:FTP文件传输服务

TCP 23端口:TELNET终端仿真服务

TCP 25端口:SMTP简单邮件传输服务

TCP 110端口:POP3邮局协议版本3

TCP 80端口:HTTP超文本传输服务

TCP 443端口:HTTPS加密超文本传输服务

UDP 53端口:DNS域名解析服务

UDP 69端口:TFTP文件传输服务

TCP和UDP的端口号是相互独立的

可以使用的:1024~49151,就是我们平时编写服务器使用的端口号

临时端口号:49152~65535,这部分是客户端运行时候动态选择的

域名解析

由于使用IP地址来指定计算机不方便人们记忆,且输入时候容易出错,用字符标识网络种计算机名称方法。

这种命名方法就像每个人的名字,这就是域名(Domian Name)

套接字

概念

1> 最早的套接字也是跟消息队列、共享内存、管道一样,只能实现同一主机之间的多个进程间的通信

2> 随着tcp/ip协议族的出现,使得消息能够穿过网卡设备,在网络中进行传输

3> 套接字通信使用的是套接字文件,也是一种特殊的文件,bcd-lsp中的s说的就是该文件

4> socket这个函数,用于创建一个套接字文件,套接字文件的通信原理如下所示

socket函数介绍

#include <sys/types.h> /* See NOTES */

#include <sys/socket.h>

int socket(int domain, int type, int protocol);

功能:创建一个用于通信的端点,并返回该通信对应的文件描述符,描述符使用最小未分配原则

参数1:通信域对应的协议族 AF_UNIX, AF_LOCAL Local communication(本地通信) unix(7) man 7 unix可以查看相信信息 AF_INET IPv4 Internet protocols(IPv4通信) ip(7) man 7 ip可以查看相信信息 AF_INET6 IPv6 Internet protocols(IPv6通信) ipv6(7) man 7 ipv6可以查看相信信息

参数2:指定通信语义,理解成传输方式 SOCK_STREAM 提供支持TCP通信 SOCK_DGRAM 提供支持UDP通信 SOCK_RAW 通过原始的套接字通信

参数3:通信协议,如果参数2指定了确定的通信方式,该参数填0即可 如果不确定通信方式,可用的参数有: TCP:IPPROTO_TCP UDP:IPPROTO_UDP

返回值:成功返回套接字文件描述符,失败返回-1并置位错误码

基于TCP的基本通信

通信流程

服务器端相关API

1> 创建套接字:该套接字用于接收客户端的连接请求使用,并不是用于通信的套接字

2> bind绑定端口号和IP地址

struct sockaddr_in

{

        sa_family_t sin_family;

        /* address family: AF_INET */ 通信域

        in_port_t sin_port; /* port in network byte order */ 端口号,网络字节序

        struct in_addr sin_addr; /* internet address */ 网络地址,是一个结构体

};

struct in_addr {

         uint32_t s_addr; /* address in network byte order */ IP地址,网络字节序

};

#include <sys/types.h> /* See NOTES */

#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

功能:给指定的套接字文件描述符绑定IP地址和端口号

参数1:要绑定的套接字文件描述符

参数2:地址信息结构体,包含了通信域、IP地址、端口号

参数3:参数2的大小

返回值: 成功返回0,失败返回-1并置位错误码

3> listen设置监听

#include <sys/types.h> /* See NOTES */

#include <sys/socket.h>

int listen(int sockfd, int backlog);

功能:将套接字文件描述符设置成监听状态,以监听客户端的连接请求

参数1:服务器套接字文件描述符

参数2:挂起队列的长度,当该队列长度满时,其他连接的客户端将会报错,一般设置为128

返回值: 成功返回0,失败返回-1并置位错误码

4> accept阻塞等待客户端连接请求

#include <sys/types.h> /* See NOTES */

#include <sys/socket.h>

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

功能:阻塞接收客户端的连接请求,并给该客户端创建一个新的用于通信的套接字

参数1:用于连接的套接字文件描述符

参数2:用于接收客户端的地址信息的结构体指针,如果不愿意接收,填NULL即可

参数3:接收客户端的地址信息的长度,是一个指针,也需要传递变量的地址

返回值:成功返回一个用于通信的套接字文件描述符失败返回-1并置位错误码

5> 数据收发函数:send、recv

#include <sys/types.h> #include <sys/socket.h> ssize_t send(int sockfd, const void *buf, size_t len, int flags);

功能:向套接字文件描述符中发送数据 参数1:要发送的套接字文件描述符 参数2:要发送数据的起始地址 参数3:要发送数据的大小 参数4:标识是否阻塞

0:表示阻塞 MSG_DONTWAIT:表示非阻塞

返回值:成功返回发送的字节个数,失败返回-1并置位错误码

#include <sys/types.h>

#include <sys/socket.h>

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

功能:从给的的套接字文件描述符中读取数据 参数1;要读取的套接字文件描述符 参数2:读取数据的容器地址 参数3:读取的大小

参数4: 标识是否阻塞 0:表示阻塞 MSG_DONTWAIT:表示非阻塞

返回值: >0:表示接收的字符的个数 =0:表示对方已经退出 =-1:出错,置位错误码

客户端端相关API及实现

1> socket:创建一个用于通信的套接字文件描述符

2> bind:可绑定也可以不绑定

3> connect:连接服务器

#include <sys/types.h> /* See NOTES */

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

功能:将指定的客户端套接字,连接到服务器

参数1;客户端套接字文件描述符

参数2:服务器的地址信息结构体

参数3:参数2的大小

返回值:成功返回0,失败返回-1并置位错误码

4> send\recv: 通信

5> close:关闭套接字

基于UDP的基础通信

通信模型

UDP服务器模型

1> socket:创建用于通信的套接字文件描述符

2> bind:绑定端口号和IP地址

3> sendto/recvfrom:数据收发

4> close:关闭客户端

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/325237.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DataX数据同步(全量)

1. DataX简介 1.1 DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址&#xff1a;https://github.com/alibaba/Dat…

第十讲 单片机驱动彩色液晶屏 控制RA8889软件:图像运算

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

【设计模式之美】重构(三)之解耦方法论:如何通过封装、抽象、模块化、中间层等解耦代码?

文章目录 一. “解耦”概述二. 如何给代码“解耦”&#xff1f;1. 封装与抽象2. 中间层2.1. 引入中间层能**简化模块或类之间的依赖关系**。2.2. 引入中间层可以起到过渡的作用&#xff0c;能够让开发和重构同步进行&#xff0c;不互相干扰。 3. 模块化4. 其他设计思想和原则4.…

[我的Rust库更新]get_local_info 0.2.3

今天收到西安城市开发者社区的文章收录通知&#xff0c;谢谢社区的肯定。 随即发布0.2.3版本&#xff0c;增加峰值算法。 get_local_info是一个获取linux本地信息的Rust三方库&#xff0c;其目标是降低获取本地linux系统信息的难度。支持银河麒麟10、UOS、鸿蒙等国产系统。 项…

力扣hot100 只出现一次的数字 位运算

Problem: 136. 只出现一次的数字 文章目录 思路复杂度Code 思路 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public int singleNumber(int[] nums) {int res 0;for(int x : nums)res ^ x;return res;} }

C#编程-使用反射检索元数据

使用反射检索元数据 术语反射通常用来指镜像。如果您站在镜子面前,镜子会反射出您的所有物理属性,如:您的身高、肤色和身体结构。在C#中也一样,反射被用于反射程序有关的所有信息。C#程序可以利用反射获得类在运行时的信息。 反射在运行时获取类型信息的过程中被使用。提…

C技能树-学习笔记(1-2)C语言概述和数据类型

参考&#xff1a;https://edu.csdn.net/skill/c 1、输出 “Hello, World!” 字符串&#xff0c;请选出错误答案。 2、错误的print函数。 for … in …&#xff1a;是python的语法&#xff0c;C语言的写法是for (;&#x1f609; 3、C标准 没有C19标准。 4、了解C编译管道 …

实战whisper:本地化部署通用语音识别模型

前言 Whisper 是一种通用语音识别模型。它是在大量不同音频数据集上进行训练的&#xff0c;也是一个多任务模型&#xff0c;可以执行多语言语音识别、语音翻译和语言识别。 这里呢&#xff0c;我将给出我的一些代码&#xff0c;来帮助你尽快实现【语音转文字】的服务部署。 以下…

3.3.3 使用集线器的星形拓扑

3.3.3 使用集线器的星形拓扑 集线器的一些特点 3.3.4 以太网的信道利用率 多个站在以太网上同时工作就可能会发生碰撞当发生碰撞时&#xff0c;信道资源实际上是被浪费了。因此&#xff0c;当扣除碰撞所造成的信道损失后&#xff0c;以太网总的信道利用率并不能达到100% 3.…

星图地球——Landsat5_C2_SR_T1数据集

数据简介&#xff1a; Landsat5_C2_SR数据集是经大气校正后的地表反射率数据&#xff0c;属于Collection2的二级数据产品&#xff0c;空间分辨率为30米&#xff0c;基于Landsat生态系统扰动自适应处理系统(LEDAPS)(版本3.4.0)生成。水汽、臭氧、大气高度、气溶胶光学厚度、数字…

github访问不了解决方法

github突然无法访问&#xff0c;解决办法如下&#xff1a; 1、首先通过网址GitHub.com - GitHub: Lets build from here GitHub查看当前github.com对应的IP地址&#xff0c;查到的信息如下图所示 2、修改hosts文件&#xff0c;windows系统下修改 C:\Windows\System32\driver…

关于前端面试中forEach方法的灵魂7问?

目录 前言 一、forEach方法支持处理异步函数吗&#xff1f; 二、forEach方法在循环过程中能中断吗&#xff1f; 三、forEach 在删除自己的元素后能重置索引吗&#xff1f; 四、forEach 的性能相比for循环哪个好&#xff1f; 五、使用 forEach 会不会改变原来的数组&#…

步进电机基本原理详解

步进电机基本原理 步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。 区别于以电压或电流作为控制信号&#xff0c;被控制量是转速的电动机。 每输入一个脉冲信号&#xff0c;转子就转动一个角度或前进一步&#xff0c;其输出的角位移或线位移与输入的脉冲数成正…

electron+vue项目使用serialport报错Cannot read property ‘indexOf‘ of undefined解决办法

描述 使用ElectronVue项目时引入serialport串口后启动时报下面错误 Cannot read property indexOf of undefined解决方法 打开vue.config.js找到pluginOptions -> electronBuilder -> externals添加serialport module.exports {pluginOptions: {electronBuilder: {e…

SAP中采购文档价格条件可以删除吗?

首先要声名&#xff0c;基于采购价格条件的严谨性和历史追朔需求&#xff0c;删除属于危险操作。不建议普通用户去执行操作。如果有兴趣&#xff0c;在测试系统中自行测试一下即可。正式系统中&#xff0c;还请慎重处理。 笔者公司日常不会去删除采购价格&#xff0c;日常处理…

网络共享服务

存储类型&#xff1a;直连式&#xff08;DAS&#xff09;:距离最近&#xff0c;存储设备且直接连接到服务器上 存储区域网络&#xff08;SAN&#xff09;&#xff1a;适用于大型应用或数据库系统&#xff0c;可以使用文件的空间&#xff0c; 以及管理空间…

【发票识别】支持pdf、ofd、图片格式(orc、信息提取)的发票

背景 为了能够满足识别各种发票的功能&#xff0c;特地开发了当前发票识别的功能&#xff0c;当前的功能支持pdf、ofd、图片格式的发票识别&#xff0c;使用到的技术包括文本提取匹配、ocr识别和信息提取等相关的技术&#xff0c;用到机器学习和深度学习的相关技术。 体验 体…

【蓝桥杯日记】第二篇——递归问题的处理

目录 前言 递归 递归解决的问题 递归的三要素 递归的练习&#xff08;由浅入深&#xff09; 1.循环改为递归 2.斐波那契 3.汉诺塔问题 总结 前言 大家好呀&#xff01;我是大雄&#xff01;一个菜鸡&#xff01;接下来的几个月和大家分享一下自己在备战蓝桥中遇到的…

Vue学习计划-Vue3--核心语法(十)Proxy响应式原理

Proxy响应式原理 1.Vue2的响应式 实现原理&#xff1a; 对象类型&#xff1a;通过Object.defineProperty()对属性的读取、修改进行拦截&#xff08;数据劫持&#xff09;数组类型&#xff1a;通过重写更新数组的一系列方法来实现拦截&#xff0c;&#xff08;对数组的变更方法…

【Linux】各目录说明

【常见目录说明】 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等)&#xff0c;常用命令一般都在这里。 /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录&#xff0c;是用户主目录的基点&#xff0c;比如用户user的主目录就是/home/user&#xff0c;可以…