1. 目的
不同主机,进程间通信。

2. 解决的问题

     1). 主机与主机之间物理层面必须互联互通。
2.) 进程与进程在软件层面必须互联互通。

IP地址:计算机的软件地址,用来标识计算机设备
MAC地址:计算机的硬件地址(固定)
网络的端口号:标记同一主机上的不同网络进程

 3. 网络协议
网络通信标准。

OSI七层模型:开放系统互联模型(open system interconnect)
理论模型:

不同体系结构设备间,网络通信的通信标准。

       应用层:要传输的数据信息,如文件传输,电子邮件等
表示层:数据加密,解密操作,压缩,解压缩
会话层:建立数据传输通道,   ---》会话
传输层:传输的方式  UDP  TCP   端口号
网络层:实现数据路由,路径规划    路由器  ip
数据链路层:封装成帧,点对点通信(局域网内通信),差错检测   交换机  ARP
物理层:定义物理设备标准、电气特性,比如网线,光纤等传输介质   比特流  bit  0 1

TCP/IP模型:应用模型

五层:
应用层:
HTTP:超文本传输协议
HTTPS:超文本传输协议(SSL加密算法)
FTP:文件传输协议(TCP)
TFTP:简单文件传输协议(UDP)
MQTT:消息队列遥测传输(物联网协议)
DNS:域名解析服务(www.baidu.com---》IP地址)
传输层:
TCP :传输控制协议
UDP:用户数据报协议
网络层:
IP协议: IPv4         IPv6
数据链路层:
ARP : 地址解析协议
物理层:

四层:
应用层     传输层     网络层         网络接口层:


4. IP协议

    网络层:
IP协议
192.168.1.128
IPv4    32位
IPv6    128位

192.168.1.140         (用户表示形式)   点分十进制   
11000000 10101000 00000000 01000011    (计算机存储形式) 32bits

IP地址 = 网络位 + 主机位 

192.168.0.121/24
24:网络位的位数

网络位:该IP地址位于哪个网段(局域网)内
主机位:这个网段(局域网)第几台主机

        子网掩码:
如:255.255.255.0
11111111.11111111.11111111.00000000
用来区分IP地址的网络位和主机位,搭配IP地址使用。
子网掩码是1的部分对应IP地址的网络位
子网掩码是0的部分对应IP地址的主机位

        192.168.1.0
网段号:
IP地址网络位不变,主机位全为0,则为该IP地址的网段号
192.168.1.3
255.255.0.0
192.168.0.0
位于
192.168.1.0 网段内(网段内的IP能直接通信)

192.168.1.3
255.0.0.0

        广播号:
192.168.1.255
IP地址网络位不变,主机位全为1,则为该IP地址的广播号
192.168.1.3
255.255.255.0
广播号:
192.168.1.255(向广播号发送信息,所有局域网内IP都能收到此信息)

feiQ VNC
192.168.1.255
网关地址:
192.168.1.1

IP地址的划分:
(1)A类地址:
范围:1.0.0.0 - 126.255.255.255
子网掩码:255.0.0.0          126*2^24        
用于管理大规模网络

私有IP地址:10.0.0.0 - 10.255.255.255

127.0.0.0   回环地址
(2)B类地址:
范围:128.0.0.0 - 191.255.255.255
子网掩码:255.255.0.0         2^16
管理大中规模网络

私有IP地址:172.16.0.0 - 172.31.255.255

(3)C类地址:
范围:192.0.0.0 - 223.255.255.255
子网掩码:255.255.255.0        2^8
管理中小规模网络

私有IP地址:192.168.0.0 - 192.168.255.255

(4)D类地址:
224.0.0.0 - 239.255.255.255
组播和广播使用

(5)E类地址:
240.0.0.0 - 255.255.255.254
用来进行实验

        公有IP:由电信公司直接分配,并需要付费的IP地址, 可以直接访问internet
私有IP:不能直接访问internet的ip地址

节省ip地址


5. 网络端口号

    端口号:16位的整形数据(unsigned short)0-65535
端口号功能:标记同一主机上的不同网络进程

    分类:
1)任何TCP/IP实现所提供的服务都用1-1023之间的端口号。
http : 80
FTP: 20/21
TFPT: 69
HTTPS: 443

2)端口号从1024-49151是被注册的端口号,被IANA指定为特殊服务使用。
MQTT:1883/8883
3)从49152-65535是动态或私有端口号。

6.网络配置

   1.  ping  ip地址/域名
查看当前主机和IP/域名所对应的这台主机网络是否联通
ping www.baidu.com

   2. ifconfig 
在Linux查看当前主机的IP地址
ipconfig
在Windows上查看当前主机的IP地址

   3. 网络配置
1)虚拟机--》设置--》网络适配器---》桥接模式
2)编辑--》虚拟网络编辑器--》更改设置--》VMnet0---》桥接至--》当前PC正在上网的网卡上--》应用--》确定
3)修改网络配置文件
sudo vim /etc/network/interfaces

             auto lo
iface lo inet loopback

             auto ens33 
iface ens33 inet dhcp

        4)重启网络服务
sudo /etc/init.d/networking restart
5) 测试
ping www.baidu.com


7. 网络协议--UDP

     UDP:传输层
用户数据报协议(User Datagram Protocol)

     1)网络编程模型
B/S模型:browser/server(浏览器/服务器)
1. 客户端是通用的客户端(浏览器)
2. 一般只做服务器开发
3. 客户端要加载的数据均来自服务器
C/S模型:client/server(客户端/服务端)
1. 客户端是一个专用的客户端
2. 服务器和客户端都需开发
3. 客户端可保存资源,本地加载,无需所有数据都请求服务器

     2)UDP编程流程

           套接字:文件描述符 , 网络通信时,应用层可操作的端口。

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

       int socket(int domain, int type, int protocol);
功能:创建通信的套接字
参数:
domain:网络层使用什么协议族
AF_INET:IPv4
AF_INET6:IPv6
type:规定传输层的协议
SOCK_DGRAM : UDP协议
SOCK_STREAM:TCP协议
SOCK_RAW :原始套接字
protocol :0 按照默认协议方式创建
返回值:
成功:套接字
失败:-1

       ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
功能:向网络套接字发送数据
参数:
sockfd:套接字
buf: 要发送的数据的首地址
len:要发送的字节数
flags: 0:按照默认方式发送
dest_addr:接收方的地址信息(IP+端口号)
addrlen:接收方地址的大小
返回值:
成功:实际发送的字节数
失败:-1

       man 7 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 */
};

           /* Internet address. */
struct in_addr {
uint32_t       s_addr;     /* address in network byte order */
};


网络字节序:大端                network
主机字节序:小端  50000   host

0x1234

小端:0x34
0x12
大端:
0x12
0x34

uint32_t htonl(uint32_t hostlong);          主机转网络
uint16_t htons(uint16_t hostshort);         主机转网络
uint32_t ntohl(uint32_t netlong);           网络转主机
uint16_t ntohs(uint16_t netshort);          网络转主机

 in_addr_t inet_addr(const char *cp);
功能:
将字符串IP地址转换成二进制IP地址形式

 char *inet_ntoa(struct in_addr in);
功能:
将二进制ip转换成字符串


int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
功能:绑定自己的IP地址和端口号
参数:
sockfd:套接字
addr:需要绑定的地址
addrlen:地址大小
返回值:
成功:0
失败:-1


ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
功能:从套接字上接收数据
参数:
sockfd:套接字
buf:存放接收数据的内存首地址
len:希望接收的字节数
flags:0 :按照默认方式接收(阻塞)
src_addr:发送方的地址信息
addrlen:发送发地址的指针
功能:
成功:实际接收到的字节数
失败:-1
利用UDP实现通信

客户端程序

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> 
#include <sys/types.h>        
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>int main()
{pid_t pid = fork();if(pid > 0){int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd < 0){perror("socket error:");return -1;}struct sockaddr_in seraddr;seraddr.sin_family = AF_INET;seraddr.sin_port = htons(50001);seraddr.sin_addr.s_addr = inet_addr("192.168.0.175");char buff[1024] = {0};while(1){scanf("%s",buff);ssize_t cnt = sendto(sockfd,buff,strlen(buff),0,(struct sockaddr *)&seraddr,sizeof(seraddr));if(cnt < 0){perror("send error:");return -1;}printf("cnt = %ld\n",cnt);}close(sockfd);}else if(pid == 0){int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd < 0){perror("socket error:");return -1;}struct sockaddr_in cliaddr;cliaddr.sin_family = AF_INET;cliaddr.sin_port = htons(50000);cliaddr.sin_addr.s_addr = inet_addr("192.168.0.175");int ret = bind(sockfd,(struct sockaddr *)&cliaddr,sizeof(cliaddr));if(ret < 0){perror("bind error:");return -1;}char buff[1024] = {0};while(1){memset(buff, 0, sizeof(buff));ssize_t cnt = recvfrom(sockfd,buff,sizeof(buff),0,NULL,NULL);if(cnt <= 0){break;}printf("cnt = %ld,server->client = %s\n",cnt,buff);}close(sockfd);}return 0;
}

服务端程序

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> 
#include <sys/types.h>        
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>int main()
{pid_t pid = fork();if(pid > 0){int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd < 0){perror("socket error:");return -1;}struct sockaddr_in seraddr;seraddr.sin_family = AF_INET;seraddr.sin_port = htons(50001);seraddr.sin_addr.s_addr = inet_addr("192.168.0.175");int ret = bind(sockfd,(struct sockaddr *)&seraddr,sizeof(seraddr));if(ret < 0){perror("bind error:");return -1;}char buff[1024] = {0};while(1){memset(buff, 0, sizeof(buff));ssize_t cnt = recvfrom(sockfd,buff,sizeof(buff),0,NULL,NULL);if(cnt <= 0){break;}printf("cnt = %ld,client->server = %s\n",cnt,buff);}close(sockfd);}else if(pid == 0){int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd < 0){perror("socket error:");return -1;}struct sockaddr_in cliaddr;cliaddr.sin_family = AF_INET;cliaddr.sin_port = htons(50000);cliaddr.sin_addr.s_addr = inet_addr("192.168.0.175");char buff[1024] = {0};while(1){scanf("%s",buff);ssize_t cnt = sendto(sockfd,buff,strlen(buff),0,(struct sockaddr *)&cliaddr,sizeof(cliaddr));if(cnt < 0){perror("send error:");return -1;}printf("cnt = %ld\n",cnt);}close(sockfd);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96490.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96490.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96490.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#_接口设计:角色与契约的分离

2.3 接口设计&#xff1a;角色与契约的分离 在软件架构中&#xff0c;接口&#xff08;Interface&#xff09;远不止是一种语言结构。它是一份契约&#xff08;Contract&#xff09;&#xff0c;明确规定了实现者必须提供的能力&#xff0c;以及使用者可以依赖的服务。优秀的接…

vsCode或Cursor 使用remote-ssh插件链接远程终端

一、Remote-SSH介绍Remote-SSH 是 VS Code 官方提供的一个扩展插件&#xff0c;允许开发者通过 SSH 协议连接到远程服务器&#xff0c;并在本地编辑器中直接操作远程文件&#xff0c;实现远程开发。它将本地编辑器的功能&#xff08;如语法高亮、智能提示、调试等&#xff09;与…

C语言实战:从零开始编写一个通用配置文件解析器

资料合集下载链接: ​https://pan.quark.cn/s/472bbdfcd014​ 在软件开发中,我们经常需要将一些可变的参数(如数据库地址、端口号、游戏角色属性等)与代码本身分离,方便日后修改而无需重新编译整个程序。这种存储配置信息的文件,我们称之为配置文件。 一、 什么是配置…

车机两分屏运行Unity制作的效果

目录 效果概述 实现原理 完整实现代码 实际车机集成注意事项 1. 显示系统集成 多屏显示API调用 代码示例&#xff08;AAOS副驾屏显示&#xff09; 2. 性能优化 GPU Instancing 其他优化技术 3. 输入处理 触控处理 物理按键处理 4. 安全规范 驾驶员侧限制 乘客侧…

vivo“空间计算-机器人”生态落下关键一子

出品 | 何玺排版 | 叶媛不出所料&#xff0c;vivo Vision热度很高。从21号下午发布到今天&#xff08;22号&#xff09;&#xff0c;大众围绕vivo Vision探索版展开了多方面的讨论&#xff0c;十分热烈。从讨论来看&#xff0c;大家现在的共识是&#xff0c;MR行业目前还处于起…

Azure TTS Importer:一键导入,将微软TTS语音接入你的阅读软件!

Azure TTS Importer&#xff1a;一键导入&#xff0c;将微软TTS语音接入你的阅读软件&#xff01; 文章来源&#xff1a;Poixe AI 厌倦了机械、生硬的文本朗读&#xff1f;想让你的阅读软件拥有自然流畅的AI语音&#xff1f;今天&#xff0c;我们将为您介绍一款强大且安全的开…

用过redis哪些数据类型?Redis String 类型的底层实现是什么?

Redis 数据类型有哪些&#xff1f; 详细可以查看&#xff1a;数据类型及其应用场景 基本数据类型&#xff1a; String&#xff1a;最常用的一种数据类型&#xff0c;String类型的值可以是字符串、数字或者二进制&#xff0c;但值最大不能超过512MB。一般用于 缓存和计数器 Ha…

大视协作码垛机:颠覆传统制造,开启智能工厂新纪元

在东三省某食品厂的深夜生产线上&#xff0c;码垛作业正有序进行&#xff0c;却不见人影——这不是魔法&#xff0c;而是大视协作码垛机器人带来的现实变革。在工业4.0浪潮席卷全球的今天&#xff0c;智能制造已成为企业生存与发展的必由之路。智能码垛环节作为产线的关键步骤&…

c# 保姆级分析继承详见问题 父类有一个列表对象,子类继承这个列表对象并对其进行修改后,将子类对象赋值给父类对象,父类对象是否能包含子类新增的内容?

文章目录 深入解析:父类与子类列表继承关系的终极指南 一、问题背景:从实际开发困惑说起 二、基础知识回顾:必备概念理解 2.1 继承的本质 2.2 引用类型 vs 值类型 2.3 多态的实现方式 三、核心问题分析:列表继承场景 3.1 基础代码示例 3.2 关键问题分解 3.3 结论验证 四、深…

tensorflow-gpu 2.7下的tensorboard与profiler插件版本问题

可行版本&#xff1a; python3.9.23cuda12.0tensorflow-gpu2.7.0tensorboard2.20.0 tensorboard-plugin-profile 2.4.0 问题描述&#xff1a; 1. 安装tensorboard后运行tensorboard --logdirlogs在网页中打开&#xff0c;发现profile模块无法显示&#xff0c;报错如下&#x…

数据结构青铜到王者第一话---数据结构基本常识(1)

目录 一、集合框架 1、什么是集合框架 2、集合框架的重要性 2.1开发中的使用 2.2笔试及面试题 3、背后涉及的数据结构以及算法 3.1什么是数据结构 3.2容器背后对应的数据结构 3.3相关java知识 3.4什么是算法 3.5如何学好数据结构以及算法 二、时间和空间复杂度 1、…

【Verilog】延时和时序检查

Verilog中延时和时序检查1. 延时模型1.1 分布延迟1.2 集总延迟1.3 路径延迟2. specify 语法2.1 指定路径延时基本路径延时边沿敏感路径延时状态依赖路径延时2.2 时序检查$setup, $hold, $setuphold$recovery, $removal, $recrem$width, $periodnotifier1. 延时模型 真实的逻辑元…

DigitalOcean Gradient AI平台现已支持OpenAI gpt-oss

OpenAI 的首批开源 GPT 模型&#xff08;200 亿和 1200 亿参数&#xff09;现已登陆 Gradient AI 平台。此次发布让开发者在构建 AI 应用时拥有更高的灵活度和更多选择&#xff0c;无论是快速原型还是大规模生产级智能体&#xff0c;都能轻松上手。新特性开源 GPT 模型&#xf…

藏在 K8s 幕后的记忆中枢(etcd)

目录1&#xff09;etcd 基本架构2&#xff09;etcd 的读写流程总览a&#xff09;一个读流程b&#xff09;一个写流程3&#xff09;k8s存储数据过程源码解读4&#xff09;watch 机制Informer 机制etcd watch机制etcd的watchableStore源码解读5&#xff09; k8s大规模集群时会存在…

腾讯云EdgeOne安全防护:快速上手,全面抵御Web攻击

为什么需要专业的安全防护&#xff1f; 在当今数字化时代&#xff0c;网站面临的安全威胁日益增多。据统计&#xff0c;2023年全球Web应用程序攻击超7千亿次&#xff0c;持续快速增长。 其中最常见的包括&#xff1a; DDoS攻击&#xff1a;通过海量请求使服务器瘫痪Web应用攻…

SpringBoot中的条件注解

文章目录前言什么是条件注解核心原理常用条件注解详解1. ConditionalOnClass和ConditionalOnMissingClass2. ConditionalOnBean和ConditionalOnMissingBean3. ConditionalOnProperty应用场景&#xff1a;多数据源配置在SpringBoot自动配置中的核心作用自动配置的工作原理经典自…

LightGBM时序预测详解:从原理到 PSO 参数优化

前言 在时间序列预测领域&#xff0c;集成学习方法一直占据重要地位。此前我们介绍了基于传统集成思想的时序预测方法&#xff08;查看前文&#xff09;&#xff0c;而梯度提升树&#xff08;GBDT&#xff09;作为集成学习的佼佼者&#xff0c;在时序预测中表现尤为突出。本文…

django生成迁移文件,执行生成到数据库

当报错时 重新拉取git&#xff0c;重新生成迁移文件&#xff0c;重新执行 1、生成迁移文件 python manage.py makemigrations 子应用2、执行建表、建字段、修改字段 python manage.py migrate 子应用3、当手动已经在数据库创建字段时&#xff0c; 用 --fake 标记迁移为 “已应用…

2025软件供应链安全技术路线未来趋势预测

软件供应链安全已从一个技术圈的议题演变为全球企业的治理焦点。近几年&#xff0c;APT渗透、恶意包植入、开发者误操作等不同类型的供应链安全事件频发&#xff0c;使得“安全的代码来源”和“可信的交付链路”成为企业数字化转型的生命线。2025年的软件供应链安全&#xff0c…

用户登录Token缓存Redis实践:提升SpringBoot应用性能

前言在现代Web应用中&#xff0c;用户认证和授权是至关重要的功能。传统的基于数据库的Token存储方式虽然简单易用&#xff0c;但在高并发场景下容易成为性能瓶颈。本文将介绍如何将SpringBoot项目中的用户Token从数据库存储迁移到Redis缓存&#xff0c;显著提升系统性能。一、…