当前位置: 首页 > news >正文

Linux下的网络编程

Linux下的网络编程:

1.目的

不同主机,进程间通信。

2.问题

1.主机与主机之间物理层面必须互联互通

2.进程与进程在软件层面必须互联互通

IP地址:计算机的软件地址,用来标识计算机设备

网络的端口号:标记同一主机上的不同网络进程

3.网络协议

   网络通信标准

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

理论模型

               不同设备间,网络通信的通信标准

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

    TCP/IP模型:应用模型

五层:

  1. 应用层:

HTTP:超文本传输协议

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

FTP:文件传输协议(TCP)

TFTP:简单文件传输协议(UDP)

MQTT:消息队列遥测传输(物联网协议)

DNS:域名解析服务域名解析服务(www.baidu.com---》IP地址)

  1. 传输层:

TCP:传输控制协议

UDP:用户数据报协议

  1. 网络层:

IP协议

IPv4

IPv6

  1. 数据链路层:

ARP:地址解析协议

  1. 物理层:

四层:

  1. 应用层:
  2. 传输层:
  3. 网络层:
  4. 应用接口层:

4.IP协议:

  • 网络层:

IP协议

192.168.1.128

IPv4   32位

IPv6   128位

192.168.0.140(用户表示形式)点分十进制

11000000 10101000 00000000 01000011(计算机存储形式)32bits

IP地址=    网络位  + 主机位

     192.168.0   140

192.168.0.121/24

24:网络位的位数

网络位:该IP地址位于哪个网段(局域网)内

主机位:这个网段(局域网)第几台主机

  • 子网掩码:

如:255.255.255.0

11111111.11111111.11111111.00000000

用来区分IP地址的网络位和主机位,搭配IP地址使用。

子网掩码是1的部分对应IP地址的网络位

子网掩码是0的部分对应IP地址的主机位

  • 网段号

  • 广播号

  • 网关地址

192.168.1.1

  • IP地址的划分

5.网络端口号

  • 端口号:十六位的整型数据(unsigned short)0~65535
  • 端口号功能:标记同一主机上的不同网络进程
  • 分类:

1)任何TCP/IP实现所提供的服务都用1-1023之间的端口号。

http: 80

FTP:20/21

TFPT: 69

HTTPS:443

MQTT:1833/8883

2)端口号从1024-49151是被注册的端口号,被IANA指定为特殊服务使用。

3)从49152-65535是动态或私有端口号。

6网络配置

1.ping ip地址/域名

查看当前主机和IP/域名所对应的这台主机网络是否联通

ping www.baidu.com

2.ifconfig

在linux查看当前网络的ip地址

3.网络配置

1)虚拟机--》设置--》网络适配器---》桥接模式

2)编辑--》虚拟网络编辑器--》更改设置--》VMnetO---》桥接至--》当前PC正在上网的网卡上--》应用--

3)修改网络配置文件

sudo vim /etc/network/interfaces

auto l0

iface lo inet loopback

auto ens33

iface ens33 inet dhcp

4)重启网络服务

sudo/etc/init.d/networking restart

5)测试

ping www.baidu.cm

7.网络协议--UDP

UDP:传输层

用户数据报协议(UserDatagramProtocol

1)网络编程模型

B/S模型:browser/server(浏览器/服务器)

1.客户端是通用的客户端(浏览器)

2.一般只做服务器开发

3.客户端加载的数据均来自服务器

C/S模型:client/server(客户端/服务端)

1.客户端是一个专用的客户端

2.服务器和客户端都要开发

3.客户端可保存资源,本地加载,无需所有数据都请求服务器

2UDP变成流程

套接字:文件描述符

     网络通信时,应用层可操作的端口

  • 客户端      

  • #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:原始套接字

prqtocol: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,按照默认方式发送

destaddr:接收方的地址信息(IP+端口号)

addrlen:接收方地址的

返回值:

成功:实际发送的字节数

失败:-1

man 7 ip

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 recvfron(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:一对一、一对多

http://www.dtcms.com/a/343763.html

相关文章:

  • 实用R语言机器学习指南:从数据预处理到模型实战(附配套学习资源)
  • 如何低门槛自制Zigbee 3.0温湿度计?涂鸦上新开发包,开箱即用、完全开源
  • 【软考架构】第6章 数据库基本概念
  • go语言中的select的用法和使用场景
  • Elasticsearch核心概念
  • SQL185 试卷完成数同比2020年的增长率及排名变化
  • C# 简单工厂模式:构建灵活与可扩展的面向对象程序
  • 【实时Linux实战系列】实时气象数据分析系统
  • 【LeetCode题解】LeetCode 287. 寻找重复数
  • SQL184 近三个月未完成试卷数为0的用户完成情况
  • XP系统安装Android Studio 3.5.3并建立Java或Native C++工程,然后在安卓手机上运行
  • 【渲染流水线】[逐片元阶段]-[混合Blend]以UnityURP为例
  • 螺旋槽曲面方程的数学建模与偏导数求解
  • Unreal Engine UProjectileMovementComponent
  • 如何生成网关路由表
  • clickhouse实战(二)
  • 关于爬虫的基本步骤说明【爬虫七步骤】
  • AI适老服务暖人心:AI适老机顶盒破数字鸿沟、毫米波雷达护独居安全,银发生活新保障
  • 大模型压缩三剑客:量化、剪枝与知识蒸馏全解析
  • Logstash——安全与权限管理
  • Swift 项目结构详解:构建可维护的大型应用
  • 【Feed-forward optimization】 in Visual Geometry Grounded and 3DGS
  • Matrix-Zero:昆仑万维发布的AI世界模型,支持单张图生成3D世界
  • (纯新手教学)计算机视觉(opencv)实战七——边缘检测Sobel 算子(cv2.Sobel())详解
  • ⭐CVPR2025 无约束 3D 视线估计新框架[特殊字符]
  • 【图像算法 - 21】慧眼识虫:基于深度学习与OpenCV的农田害虫智能识别系统
  • Python opencv识别图片中重叠圆的圆心位置
  • 焊接工艺仿真软件SYSWELD、Simufact.Welding和FLOW-3D WELD的区别
  • 【0基础3ds Max】捕捉工具详解
  • 城市生命线地下管网三维建模软件MagicPipe3D更新历史