尧图精选

【网络通信UDP】基础 进程间不同主机的通信

🕒 发布时间:2026/9/3 21:04:07 📁 来源:尧图网络
网络通信不同主机进程间通信。网络协议1. OSI七层模型应用层: 要传输的数据信息如文件传输电子邮件等表示层: 数据加密解密操作压缩解压缩会话层: 建立数据传输通道传输层: 传输的方式 UDP TCP 端口号网络层: 实现数据路由路径规划 路由器 ip数据链路层: 封装成帧点对点通信局域网内通信差错检测 交换机 ARP物理层: 定义物理设备标准比如网线光纤等传输介质、传输比特流 bit 0 12. TCP/IP模型有四层也有五层根据不同情况定义四层模型应用层 应用层、表示层、会话层传输层 传输层网络层 网络层网络接口层 数据链路层、物理层五层模型中1.应用层http 超文本传输协议https超文本传输协议SSL加密FTP: 文件传输协议TFTP简单文件传输协议DNS服务域名解析服务 www。baidu-----》ip地址MQTT协议消息队列遥感传输协议2.传输层IP协议TCP 传输控制协议UDP用户数据报协议3.网络层IPv4 IP协议IPv6 : IP协议4.数据链路层ARP地址解析协议 MAC地址转为IP地址转换到其他局域网内的路由器后转化mac地址寻找对应主机RARP 逆地址解析协议5.物理层3. IP协议IP协议192.168.1.128这就是一个ip地址IPv4 有 32位IPv6 有 128位IP地址 网络位 主机位网络位: 该IP地址位于哪个网段(局域网)内主机位: 这个网段(局域网)第几台主机而我们如何区分网络位和主机位就要借助我们的子网掩码了255.255.255.0 二进制全部是1的情况下说明是网络位子网掩码:如255.255.255.011111111.11111111.11111111.00000000用来区分IP地址的网络位和主机位搭配IP地址使用。子网掩码是1的部分对应IP地址的网络位子网掩码是0的部分对应IP地址的主机位在一段局域网内的时候我们也有网段号跟网关的两种情况。192.168.1.0网段号:IP地址网络位不变,主机位全为0,则为该IP地址的网段号192.168.1.3255.255.0.0192.168.0.0网关地址192.168.1.1也就是每一段局域网内的第一台主机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用来进行实验公有IP由电信公司直接分配并需要付费的IP地址 可以直接访问internet私有IP不能直接访问internet的ip地址节省ip地址4.网络协议栈端口号 16位的数值 0-65535 unsigned short作用唯一的标识一个网络进程每一个应用进程都有一个端口号通讯时用来区分数据包属于哪一个进程。分类1任何TCP/IP实现所提供的服务都用1-1023之间的端口号。http 80FTP 20/21TFPT: 69HTTPS: 443MQTT协议:18832端口号从1024-49151是被注册的端口号被IANA指定为特殊服务使用。3从49152-65535是动态或私有端口号。但是依然有部分端口号被注册所以我们可以使用五万的进程端口号进行操作1.数据包的封装和解封过程2. 网络配置桥接模式1. 虚拟机---》设置---》网络适配器----》桥接模式----》确定2. 编辑---》虚拟网络编辑器---》更改设置---》Vmnet0---》桥接模式---》桥接到Windows正在上网的网卡--》应用---》确定3. 修改网络配置文件sudo vim /etc/network/interfaces需要我们去配置这两段网卡之后我们就可以连接到本地网络进行数据传输了。1.我们同样也可以使用ifconfig去查看我们自己虚拟机的网络。2.之后可以使用ping www.baidu进行检查网络是否连接成功。3.UDP协议UDP协议发生在我们的传输层用于我们在不同主机端的通信的方式之一1. 网络通信模型B/S Browser/Server 浏览器/服务器这种只需要开发服务端就可以进行操作了C/S Client / Server 客户端/服务端socket函数接口接口使用int socketint domainint typeint protocol他的返回值为 成功 文件描述符失败 -1sendto函数接口ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);其中包含的两个结构体 man 7 ip 进行查询上面的两个结构体 两个都是netinet/in.h里面的 IPv4 地址结构体嵌套关系sockaddr_in里面包含一个struct in_addr类型的成员。struct sockaddr_in { sa_family_t sin_family; // 协议族 AF_INET in_port_t sin_port; // 端口号网络字节序 struct in_addr sin_addr; // IP地址结构体重点 unsigned char sin_zero[8]; // 填充对齐不用管memset清零 }; // 专门存IPv4的IP地址32位整数 struct in_addr { uint32_t s_addr; // 网络字节序的ipv4地址无符号32位整数 };struct in_addr只做一件事存放 IPv4 地址192.168.x.x的二进制数字。定义方法struct in_addr ip; ip.s_addr inet_addr(192.168.0.152);储存方式网络字节序大端 高地址存低字节位低地址存高字节位主机字节序小端 高地址存高字节位低地址存低字节位host 主机字节序主机序为什么要使用htons 2字节数据主机字节序转网络字节序//主机存50000使用htons转为网络序发送htonl 4字节数据主机字节序转网络字节序ntohs 2字节数据网络字节序转主机字节序ntohl 4字节数据网络字节序转主机字节序举个例子端口号50000在你电脑内存 (host 主机序小端) 存放0x 38 0x 9C网络传输必须用大端调用htons(50000)之后变成0x9C 0x38发给网卡。容易混淆两点inet_addr()输出直接网络序不要再 htonlINADDR_ANY只是一个数字常量0属于 host 序所以要写htonl(INADDR_ANY)bind(int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);功能绑定当前套接字和IP地址及端口号参数sockfd套接字addr要绑定的地址信息指针addrlen地址信息的长度返回值成功0失败-1recvfromssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);功能接收UDP数据报文参数sockfd套接字buf存储网络接收到的数据len 期望接收到的字节数flags0 默认方式接收src_addr保存发送发地址信息的指针addrlen地址长度的指针返回值成功实际接收到的字节数失败-10 当对方发送0字节数据包char *inet_ntoa(struct in_addr in);功能将结构体类型的IP地址转换成字符串的IP地址4.网络抓包工具sudo apt-get install wireshar//下载启动wireshark sudo wiresha选择抓取的网卡any3. 选择抓取数据包的过滤条件并触发udp.port 5000
上一篇/下一篇内容由系统自动关联 返回资讯列表 →