自学嵌入式第三十三天:网络编程-UDP

一、OSI模型(open system interconnect)

开放系统互联模型,分为7层

应用层:为网络用户提供各种服务,例如电子邮件、文件传输等;

表示层:为不同主机间的通信提供统一的数据表示形式。加密解密,压缩;

会话层:负责信息传输的组织和协调,管理进程会话过程;

传输层:管理网络通信两端的数据传输,提供可靠或不可靠的传输服务。tcp、udp;

网路层:负责数据传输的路由选择和网际互联。ip;

链路层:负责物理相邻(通过网络介质相连)的主机间的数据传输,主要作用包括物理地址寻址、数据帧封装、差错控制等。该层可分为逻辑链路控制子层(LLC)和介质访问子层(MAC);

物理层:纯硬件,负责把主机中的数据转换成电信号,再通过网络介质(双绞线、光纤、无线信道等)来传输。该层描述了通信设备的机械电气功能等特性。有线传输短距离用网线,长距离用光纤。无线局域网民用2.4G-5G,无线广域网叫蜂窝网络;

二、TCP/IP模型

网际互联模型,分为4层;

应用层:应用程序;

传输层:端口号,tcp,udp;

网络层:IP地址;

接口层:网卡驱动;

三、dns域名解析服务

是一个服务器,记载网站对应的ip

DHCP动态主机配置协议,分配ip地址;

Windows:ipconfig;Linux:ifconfig;查看当前ip;

应用层:HTTP(超文本传输协议) TFTP FTP (文件传输协议)SNMP DNS(域名解析服务) DHCP(动态主机配置协议)

传输层:TCP(传输控制协议)UDP(用户数据报协议)

网络层:IP ICMP(互联网控制管理协议ping) RIP(最佳路径) OSPF(最短路径) IGMP(网络组播协议)

接口层:ARP(地址解析协议,通过ip找MAC) RARP(逆向地址解析协议)

四、网络基础

ip地址是网络位加主机位;

ip地址的分类:点分十进制

A类地址:超大规模型网络

1.0.0.0-126.255.255.255

私有:10.0.0.0-10.255.255.255/127.0.0.1

B类地址:中大规模型网络

128.0.0.0-191.255.255.255

私有:172.16.0.0-172.31.255.255

C类地址:中小规模型网络

192.0.0.0-223.255.255.255

私有:192.168.0.0-192.168.255.255

静态路由:

192.168.0.0代表网络

192.168.0.1网关

192.168.0.255广播

D类地址:广播和组播

224.0.0.0-239.255.255.255

E类地址:实验

240.0.0.0-255.255.255.255

五、配置网络设置

1.ifconfig ensX X.X.X.X/24 up

ifconfig ens33 192.168.0.13/24 up //24:是从左往右数的1的个数,等价于255.255.255.0

临时性的,虚拟机重启会恢复

2.ping

3.netstat -anp

六、网络接口

1.socket :BSD socket 用于网络通信的一组接口函数;

会得到打开网络设备的文件描述符,叫套接字,socket api application interface;

2.ip地址+port端口

ip地址用来找主机;port端口号用来找进程;

port分为TCP port、UDP port范围都是1-65535

约定1000以内的端口为系统使用。

3.网络字节序-大端存储

主机字节序:计算机是小端存储的;

小端存储:数据的低位放到存储的低地址;

ip地址和端口号需要大小端转换一下;

七、UDP(用户数据报)

1.特性:无链接,不可靠,大数据

2.socket

#include <sys/types.h> /* See NOTES */

#include <sys/socket.h>

int socket(int domain, int type, int protocol);

domain:AF_INET,ipv4互联网;

type:SOCK_DGRAM

protocol:0

3.bind

#include <sys/types.h> /* See NOTES */

#include <sys/socket.h>

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

sockfd标识符;addr地址结构体;addrlen结构体大小;

做地址和端口的大小端转换:

htons //host to net short,端口转换

in_addr_t inet_addr(const char *cp); //地址转换

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

4.recvfrom

接收函数,

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);

flags:0默认阻塞;MSG_DONTWAIT非阻塞,无数据则停止并设置error;MSG_PEEK窥探数据但不从缓冲区移除;MSG_WAITALL阻塞直到读满;

成功返回收到的字节;

5.sendto

发送函数

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);

成功返回发出的字节数;

相关推荐
GLAB-Mary3 小时前
华为HCIE认证:三年有效期值不值得?
运维·服务器·华为
wanhengidc4 小时前
徐州服务器:机柜租用具体包含哪些内容?
运维·服务器·安全
zzz100664 小时前
shell编程 函数、数组与正则表达式
linux·运维·服务器
杰克崔4 小时前
文件页的预取逻辑
linux·运维·服务器
wdfk_prog4 小时前
[Linux]学习笔记系列 -- mm/slub.c SLUB内存分配器(The SLUB Allocator) 现代内核对象缓存的核心
java·linux·运维·c语言·笔记·学习·缓存
yzx9910135 小时前
从零开始:用代码解析区块链的核心工作原理
运维·开发语言·人工智能·区块链·ai编程
t_hj5 小时前
CentOS 创建站点
linux·运维·centos
从零开始的ops生活5 小时前
【Day 42】Shell-expect和sed
linux·运维·ssh·shell·expect
xx.ii5 小时前
37.Ansible循环+常用过滤器
linux·运维·服务器·ansible