Linux下的网络编程

一、目的

    不同主机,进程间通信。

二、解决的问题

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

    物理层面的互联互通流程图如下:

    其中:

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

        交换机:实现局域网内通信
路由器:负责数据的路径规划
广域网:实现远距离传输

三、网络协议

    网络协议是网络通信的标准。

1、OSI 七层模型

    OSI 七层模型:开放系统互联模型(open system interconnect)是不同体系结构设备间,网络通信的通信标准。
应用层:要传输的数据信息,如文件传输,电子邮件等
表示层:数据加密、解密操作,压缩,解压缩
会话层:建立数据传输通道,   --->一个会话
传输层:传输的方式  UDP  TCP   端口号
网络层:实现数据路由,路径规划    路由器  ip
数据链路层:封装成帧,点对点通信(局域网内通信),差错检测   交换机  ARP
物理层:定义物理设备标准、电气特性,比如网线,光纤等传输介质   比特流  bit  0 1

2、TCP/IP 模型

    TCP/IP 模型分为五层和四层两种。每所表示的与 OSI 七层模型内容一致,只是将七层的 “ 应用层、表示层、会话层 ” 合并之后表示五层和四层的应用层,将五层的 “ 数据链路层、物理层 ” 合并表示四层中的网络接口层。

    五层结构及举例说明:

应用层:

HTTP:超文本传输协议
HTTPS:超文本传输协议(SSL加密算法)
FTP:文件传输协议(TCP)

TFTP:简单文件传输协议(UDP)
MQTT:消息队列遥测传输(物联网协议)
DNS:域名解析服务(www.baidu.com---》IP地址)

 传输层:TCP :传输控制协议
UDP:用户数据报协议
   网络层:IP协议:
IPv4:
IPv6:
数据链路层:ARP : 地址解析协议
 物理层:

四、IP 协议

1、概念

  IP 协议位于网络层,有 IPv4 (32位) 和 IPv6 (128位) 两种,以IPv4 为主展开学习。 
192.168.1.140    (用户表示形式)   点分十进制   
11000000 10101000 00000000 01000011    (计算机存储形式) 32bits
在 192.168.0.121/24 中,24表示网络位的位数

2、IPv4 的地址

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

3、子网掩码

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

  例如:子网掩码如:255.255.255.0
11111111.11111111.11111111.00000000

 4、网段号

   规则:IP地址网络位不变,主机位全为0,则为该IP地址的网段号
例如:IP地址:192.168.1.3
子网掩码:255.255.0.0
网段号:192.168.0.0
网段内的IP能直接通信

5、广播号

    规则:IP地址网络位不变,主机位全为1,则为该IP地址的广播号
例如:IP地址:192.168.1.3
子网掩码:255.255.255.0
广播号:192.168.1.255

      向广播号发送信息,所有局域网内IP都能收到此信息
feiQ VNC
192.168.1.255
网关地址:
192.168.1.1

6、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
用来进行实验

7、公有IP 和 私有IP

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

五、网络端口号

1、概念

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

2、分类

    1)任何TCP/IP实现所提供的服务都用1-1023之间的端口号。
http : 80
FTP: 20/21
TFPT: 69
HTTPS: 443
2)端口号从1024-49151是被注册的端口号,被IANA指定为特殊服务使用。
MQTT:1883/8883
3)从49152-65535是动态或私有端口号。

3、数据包的封装和解封过程

六、网络配置

1.  ping  ip地址/域名

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

2. ifconfig 

    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

七、网络协议 UDP

    UDP 位于传输层,用户数据报协议(User Datagram Protocol)。

 1、网络编程模型

    1)B/S模型

        browser/server(浏览器/服务器)
(1)客户端是通用的客户端(浏览器)
(2)一般只做服务器开发
(3)客户端要加载的数据均来自服务器

    2)C/S模型

        client/server(客户端/服务端)
(1)客户端是一个专用的客户端
(2)服务器和客户端都需开发
(3)客户端可保存资源,本地加载,无需所有数据都请求服务器

2、UDP编程流程

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

3、相关函数接口

    1)socket() 函数

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

    2)sendto() 函数

 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

        其中,IPv4 的地址信息存放在 struct sockaddr_in 中:

可使用 “ 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 */
};

    3)IP 地址形式转换函数

        (1)inet_addr() 函数
in_addr_t inet_addr(const char *cp);
功能:
将字符串IP地址转换成二进制IP地址形式
        (2)inet_ntoa() 函数
char *inet_ntoa(struct in_addr in);
功能:
将二进制ip转换成字符串

    4)bind() 函数

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

    5)recvfrom() 函数

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

【END】

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

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

相关文章

常见开源协议详解:哪些行为被允许?哪些被限制?

常见开源协议详解:哪些行为被允许?哪些被限制? 开源世界的魅力在于共享与合作,但不同的开源协议对分发、修改、再发布以及宣传/推广有不同的要求和限制。很多开发者在 fork 项目、改 README、放到自己仓库并在自媒体传播 时&…

服务器硬盘进行分区和挂载

查看服务器上的硬盘:lsblk -d -o NAME,SIZE,MODEL可以看到我的硬盘是除了vda系统盘以外,还有个vdb。我们查看一下分区:lsblk可以看到:vdb 1T disk (底下没有分区,也没有挂载)我们想要用起来这…

【C初阶】数据在内存中的存储

目录 1. 整数在内存中的存储 2. 大小端字节序 2.1 什么是大小端? 2.2 为什么有大小端? 2.3 练习 2.3.1 练习1 2.3.2 练习2 2.3.3 练习3 2.3.4 练习4 2.3.5 练习5 2.3.6 练习6 3. 浮点数在内存中的存储 3.1 浮点数存储的过程 3.2 浮点数的取…

AI 自动化编程 trae 体验2 帮我分析一个项目

总结: 接手一个项目可以让trae 帮忙分析 上次讲到trae在处理组件引入的时候,经常会碰到版本问题,分析引入了互联网上非本版本或者有bug的代码。主要依赖互联网的资源库。 但是分析一个项目应该是没问题。 这次表现非常好,接手一个…

VMware虚拟机中CentOS 7 报错 ping: www.xxx.com: Name or service not known

1:主要原因是网络配置的问题 2:其实就是下面三张图片中的,物理机虚拟网卡 vmware8 和虚拟机网络编辑器,如果设置静态IP 就是这三个地方的问题最简单的解决办法第一步:还原虚拟机网络点击确认后 ** 第二步给自己的虚拟机设置网络连接方式 选择NAT模式连接…

Java面试-自动装箱与拆箱机制解析

👋 欢迎阅读《Java面试200问》系列博客! 🚀大家好,我是Jinkxs,一名热爱Java、深耕技术一线的开发者。在准备和参与了数十场Java面试后,我深知面试不仅是对知识的考察,更是对理解深度与表达能力的…

《VMware 安装 CentOS 7.9 虚拟机详细教程(含图解步骤)》

目录1.安装前准备1.1 准备VMware软件1.1.1 方式一1.1.2 方式二1.2 准备centos7.9镜像1.2.1 方式一1.2.2 方式二2.安装centos7.91.安装前准备 1.1 准备VMware软件 VMware需要的激活码百度直接搜索vmware workstation17激活码就可以搜索到 1.1.1 方式一 这种方式需要注册官网的…

新能源知识库(84)什么是IEC白皮书

IEC白皮书是由国际电工委员会(IEC)发布的战略性技术文件,旨在针对新兴技术和社会发展趋势,提出标准化需求和发展路径,为全球产业提供前瞻性指导。在新能源领域,IEC白皮书是推动技术创新、产业协同和国际规则…

从零开始学习JavaWeb-15

​​一、数据库安全与防注入实战​​1. ​​SQL 注入原理与危害​​​​攻击本质​​:利用输入漏洞篡改 SQL 语义,例如:SELECT * FROM users WHERE username admin OR 11 -- AND password xxxOR 11导致条件永真,绕过密码验证。​…

深入理解深度学习中的“Batch”

文章目录 **一、什么是Batch?为什么需要它?** **二、Batch Size(批次大小)的影响** **三、Batch, Epoch 和 Iteration 的关系** **四、案例分析** 在深度学习领域,“Batch”(批次)是一个核心且至关重要的概念。它指的是在模型训练过程中,一次性输入给神经网络进行处理的…

27.语言模型

语言模型,是NLP方向一直主力研究的,通过训练机器,来让机器学习人类语言的内在规律,理解自然语言,并将其转换为计算机语言。 目前的主流语言模型,如GPT、Deepseek等,并不是简单的搜索背诵。他们的…

小智ai+mcp+n8n的智能组合

小智aimcpn8n的智能组合1 小智ai的版本2 n8n的配置3 mcp的demo4 工作流json​ 之前有写过小智ai的介绍,它提供了流畅且丰富的用户语音交互能力。n8n提供了灵活且稳定的后台工作流的能力,如果这两个工具进行组合,可以打造一个好玩又好用的智能…

【DataGrip】连接达梦数据库后,能查询数据但是看不到表的几种情况分析,达梦数据库驱动包下载DmJdbcDriver18.jar

大概分为以下两类情况,配置问题和驱动包的问题 DmJdbcDriver18.jar点击下载 1.配置了表不可见 左上角点击过滤的图标,把table勾上就可以 2.Introspect using JDBC metadata 未勾选 1)老版本的DataGrip 在options选项下 3)新版…

全面解析 `strncasecmp` 字符串比较函数

1) 函数的概念与用途 strncasecmp 是 C 语言中一个非常实用的字符串处理函数,它执行不区分大小写的字符串比较,但只比较前 n 个字符。这个函数的名字来源于"string n case-compare"(字符串前n个字符不区分大小写比较)。…

高级SQL优化 | 告别 Hive 中 GROUP BY 的大 KEY 数据倾斜!PawSQL 自适应优化算法详解

数据倾斜让你的Hive查询慢如蜗牛?单个热点分组拖垮整个集群?PawSQL独家算法GroupSkewedOptimization来拯救!🎯 痛点直击:当数据倾斜遇上分组操作想象这样一个场景:你的电商平台有1000万VIP用户订单和100万普…

HUMS 2023齿轮箱数据分析

HUMS问答:https://humsconference.com.au/HUMS2023datachallenge/questions-answers.html 数据集申请:https://www.dst.defence.gov.au/our-technologies/helicopter-main-rotor-gearbox-planet-gear-fatigue-crack-propagation-test 历年试卷&#xff1…

智慧工地:科技赋能与管理革新下的建筑业新图景

随着数字技术的深度渗透,智慧工地正以“技术落地 行业变革 管理创新”的三重突破,重构施工场景的核心逻辑,推动建筑业从传统粗放式发展向精细化、智能化转型。一、技术落地:用科技筑牢安全防线,提升施工效率技术是智…

[docker/大数据]Spark快速入门

[docker/大数据]Spark快速入门1. 概述 1.1 诞生背景Spark官方文档:https://spark.apache.ac.cn/docs/latest/Spark 由加州大学伯克利分校 AMP 实验室于 2009 年开发,2013 年成为 Apache 顶级项目,旨在解决 MapReduce 的三大核心问题&#xff…

CSS 定位的核心属性:position

🧩 一、CSS 定位的核心属性:positionposition 属性用于定义一个元素在页面中的定位方式,它决定了:元素在页面中的定位规则是否脱离文档流元素的位置是相对于谁(父元素、浏览器窗口、自身等)✅ 可选值如下&a…

数据结构之深入探索快速排序

基准值的选定 我们之前已经用四种不同的方式实现了快速排序,如果还没有学习过的伙伴们可以看一下这篇文章哦:数据结构之排序大全(3)-CSDN博客 那我们既然已经学习了这么多种方法,为什么还要继续探索快速排序呢&#…