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

Linux应用软件编程---网络编程1(目的、网络协议、网络配置、UDP编程流程)

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.dtcms.com/a/344177.html

相关文章:

  • Matplotlib 可视化大师系列(八):综合篇 - 在一张图中组合多种图表类型
  • 2.4G和5G位图说明列表,0xff也只是1-8号信道而已
  • QT QImage 判断图像无效
  • 高通平台WIFI学习-- 基于高通基线如何替换移植英飞凌WIFI芯片代码
  • mysql编程(简单了解)
  • 【Android】include复用布局 在xml中静态添加Fragment
  • 计数组合学7.20(平面分拆与RSK算法)
  • [测试技术] 接口测试中如何高效开展幂等性测试
  • pthon实现bilibili缓存视频音频分离
  • Redis内存碎片深度解析:成因、检测与治理实战指南
  • K8s存储类(StorageClass)设计与Ceph集成实战
  • 为什么应用会突然耗尽所有数据库连接
  • 智慧清洁时代来临:有鹿机器人重新定义城市清洁标准
  • 【数据结构】B 树——高度近似可”独木成林“的榕树——详细解说与其 C 代码实现
  • python selenium+pytest webUI自动化基础框架
  • 去中心化身份--改变格局的关键
  • 图数据库(neo4j)基础: 分类/标签 节点 关系 属性
  • 整数规划学习总结
  • 为什么给数据表加了索引,写入速度反而变慢了
  • 数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_数据查询(3)连接查询
  • 基于Python/django的仓库库存管理系统#基于Python的仓库管理系统#基django的J进销存管理系统
  • 力扣热题之贪心算法
  • halcon算子—gen_rectangle2和gen_rectangle1区别
  • Java泛型深度解析:从基础语法到高级应用
  • Java 19 新特性及具体应用
  • K8S高可用集群
  • 藏在 K8s 幕后的记忆中枢(etcd)
  • API模型与接口弃用指南:历史、替代方案及开发者应对策略
  • 疏老师-python训练营-Day53 对抗生成网络
  • Linux数字列排序命令