网络编程、IP协议、网络配置、UDP网络协议
·
- 一、网络编程
- 目的:不同主机,进程间通信
- 问题
- 主机与主机之间物理层面必须互联互通
- 进程与进程在软件层面必须互联互通
- IP地址:计算机的软件地址,用来表示计算机设备
- MAC地址:计算机的硬件地址(固定)
- 网络端口号:标记同一主机上的不同网络进程
- 二、网络协议 网络通信标准
- OSI七层模型:开放系统互联模型(open system interconnect) 理论模型
- 不同体系结构设备间,网络通信的通信标准
- 应用层:要传输的数据信息,如文件传输,电子邮件等
- 表示层:数据加密,解密操作,压缩,解压缩
- 会话层:建立数据传输通道(会话)
- 传输层:传输的方式(UDP、TCP端口号)
- 网络层:实现数据路由,路径规划 路由器 ip
- 数据链路层:封装成帧,点对点通信(局域网内通信),差错检测 交换机 ARP
- 物理层:定义物理设备标准、电气特性,比如网线,光纤等传输介质 比特流 bit 0 1
- TCP/IP模型: 应用模型
- 五层:
- 应用层:
- HTTP:超文本传输协议
- HTTPS:超文本传输协议(SSL加密算法)
- FTP:文件传输协议(TCP)
- TFTP:简单文件传输协议(UDP)
- MQTT:消息队列遥测传输(物联网协议)
- DNS:域名解析服务(将www .com转化成IP地址)
- 传输层:
- TCP:传输控制协议
- UDP:用户数据报协议
- 网络层:
- IP协议:
- IPv4:
- IPv6:
- IP协议:
- 数据链路层:
- ARP:地址解析协议
- 物理层:
- 应用层:
- 四层:
- 应用层:
- 传输层:
- 网络层:
- 网络接口层:
- 五层:
- OSI七层模型:开放系统互联模型(open system interconnect) 理论模型
- 三、IP协议
- IPv6 128位
- IPv4 32位
- 保存32位(4字节)

- IP地址 = 网络位+主机位
- 网络位:该IP地址位于哪个网段(局域网)内
- 主机位:这个网段(局域网)第几台主机
- 保存32位(4字节)

- 子网掩码:
- 如:255.255.255.0
- 11111111.11111111.11111111.00000000
- 用来区分IP地址的网络位和主机位,搭配IP地址使用。
- 子网掩码是1的部分对应IP地址的网络位
- 子网掩码是0的部分对应IP地址的主机位
- 网段号:192.168.1.0
- IP地址网络位不变,主机位全为0,则为该IP地址的网段号

- IP地址网络位不变,主机位全为0,则为该IP地址的网段号
- 广播号:192.168.1.255
- IP地址网络位不变,主机位全为1,则为该IP地址的广播号

- IP地址网络位不变,主机位全为1,则为该IP地址的广播号
- 网关地址:192.168.1.1
- IP地址的划分
- A类地址
- IP地址的划分

- B类地址

- C类地址

- D类地址

- E类地址

- 公有IP:由电信公司直接分配,并需要付费的IP地址,可以直接访问 internet
- 私有IP:不能直接访问 internet 的 ip地址
- 区分公有私有IP是为了节省IP地址
- 四、网络端口号
- 端口号:16位整形数据(unsigned short) 0-65535
- 端口号功能:标记同一主机上的不同网络进程
- 分类
- 任何TCP/IP实现所提供的服务都用1-1023之间的端口号

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

- 数据包的封装和解封过程
- 五、网络配置
- ping ip地址/域名
- 查看当前主机和IP/域名所对应的这台主机网络是否联通

- ifconfig
- 在linux查看当前主机的IP地址
- ipconfig:在Windows下查看当前主机的IP地址
网络配置

- 六、网络协议 UDP
- UDP用户数据报协议:传输层
- 网络编程模型
- B/S模型:browser/server(浏览器/服务器)
- 客户端是通用的客户端(浏览器)
- 一般只做服务器开发
- 客户端要加载的数据均来自服务器
- C/S模型:client/server(客户端/服务端)
- 客户端是一个专用的客户端
- 服务器和客户端都需要开发
- 客户端可保存资源,本地加载,无需所有数据都请求服务器
- B/S模型:browser/server(浏览器/服务器)
- UDP编程流程
- 套接字:文件描述符(网络通信时,应用层可操作的端口)
- 发送端
- socket:int socket(int domain, int type, int protocol
- 功能:创建通信的套接字
- 参数:
- domain:网络层使用什么协议族
- AF_INET: IPv4
- AF_INET6:IPv6
- type:规定传输层的协议
- SOCK_DGRAM:UDP协议
- SOCKSTREAM:TCP协议
- SOCKRAW:原始套接字
- protocol:0 按照默认协议方式创建
- domain:网络层使用什么协议族
- 返回值:成功:套接字;失败:-1
- 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:接收方地址的大小
- man 7 ip

- 返回值:成功:实际发送的字节数;失败:-1
- 网络字节序:大段
- 主机字节序:小段
- uint3 2_t htonl(uint32_t hostlong);主机转网络
- uint1 6_t htons(uint16_t hostshort);主机转网络
- uint3 2_t ntohl(uint32_t hostlong);网络转主机
- uint1 6_t ntohs(uint16_t hostshort);网络转主机
- in_addr_t inet _addr(const char *cp);
- 功能:将字符串IP地址转换成二进制IP地址形式
- char *inet _ntoa(struct in_addr in);
- 功能:将二进制ip转换成字符串
- socket:int socket(int domain, int type, int protocol
- 接收端
- bind:int bind(int sockfd, const struct sockaddr *addr.socklen_t addrlen);
- 功能:绑定自己的IP地址和端口号
- 参数:sockfd:套接字;addr:需要绑定的地址;adlrlen:地址大小
- 返回值:成功:0;失败:-1
- 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
- bind:int bind(int sockfd, const struct sockaddr *addr.socklen_t addrlen);
更多推荐
所有评论(0)