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:超文本传输协议 TFTP:简单文件传输协议(UDP) |
传输层: | 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); |
功能:向网络套接字发送数据 返回值: |
其中,IPv4 的地址信息存放在 struct sockaddr_in 中:
可使用 “ man 7 ip ” 指令查看程序员手册 |
struct sockaddr_in { /* Internet address. */ |
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); |
功能:从套接字上接收数据 |
【END】