学做网站和推广要多久,动态表情包在线制作,重庆价格信息网官网,门户网站开发架构Linux下的网络编程1. 目的实现不同主机之间进程的通信。2. 问题主机之间在物理层面必须互联互通。进程之间在软件层面必须互联互通。IP地址#xff1a;计算机的软件地址#xff0c;用于标识计算机设备。MAC地址#xff1a;计算机的硬件地址#xff08;固定#xff09;。网…Linux下的网络编程1. 目的实现不同主机之间进程的通信。2. 问题主机之间在物理层面必须互联互通。进程之间在软件层面必须互联互通。IP地址计算机的软件地址用于标识计算机设备。MAC地址计算机的硬件地址固定。网络的端口号标记同一主机上的不同网络进程。3. 网络协议网络通信标准。OSI七层模型理论模型开放系统互连模型是不同体系结构设备间网络通信的通信标准。应用层要传输的数据如文件传输、电子邮件。表示层数据加密解密操作、压缩解压缩操作。会话层建立数据传输通道。传输层传输的方式如UDP、TCP、端口号。网络层实现数据路由如路由器、IP。数据链路层封装成帧、点对点通信局域网内通信、差错检测如交换机。物理层定义物理设备标准、电气特性如网线、光纤等传输介质比特流bit 0/1。TCP/IP模型应用模型五层应用层HTTP超文本数据类型较多传输协议。HTTPS超文本传输协议SSL加密算法。FTP文件传输协议TCP传输。TFTP简单文件传输协议UDP传输。MQTT消息队列遥测传输协议广泛应用于物联网协议传输。DNS域名解析服务将一个域名转换为IP地址。传输层TCP传输控制协议构建路径。UDP用户数据报协议传输时不构建路径找效率高的可能导致乱序不安全可能会导致丢包。网络层IP协议IPv4。IPv6。数据链路层ARP地址解析协议IP地址和MAC地址之间的转换。物理层。四层应用层。传输层。网络层。网络接口层。4. IP协议网络层协议。IPv432位用ipconfig在Windows终端上查看。IPv6128位。IP地址 网络位 主机位和子网掩码搭配使用子网掩码全为1的是网络位全为0的是主机位。示例192.168.0.121/2424表示网络位的位数。网络位标识该IP地址所在的网段局域网。主机位标识该网段中的具体主机。网段号如192.168.1.0网络位保留主机位为0。广播号如192.168.1.255网络位不变主机位全为1。网关地址如192.168.1.1网络位保留主机位为1。IP地址划分A类地址范围1.0.0.0 - 126.255.255.255。子网掩码255.0.0.0。主机数量2^24大规模网络。私有IP地址10.0.0.0 - 10.255.255.255。回环地址127.0.0.0。B类地址范围128.0.0.0 - 191.255.255.255。子网掩码255.255.0.0。主机数量2^16管理大中规模网络。私有IP地址172.16.0.0 - 172.31.255.255。C类地址范围192.0.0.0 - 223.255.255.255。子网掩码255.255.255.0。主机数量2^8管理中小规模网络。私有IP地址192.168.0.0 - 192.168.255.255。D类地址范围224.0.0.0 - 239.255.255.255组播和广播使用。E类地址范围240.0.0.0 - 255.255.255.254用于实验。共用IP由电信公司直接分配需要付费的IP地址可以直接访问Internet。私有IP不能直接访问Internet的IP地址由路由器转为共用IP。这样可以节省IP地址。5. 网络端口号端口号16位的整型数据unsigned short范围0 - 65535。
端口号功能标记同一主机上的不同网络进程。
分类任何TCP/IP实现所提供的服务都用1 - 1023之间的端口号。HTTP80。FTP20/21。TFTP69。HTTPS443。MQTT1883/8883。端口号从1024 - 49151是被注册的端口号被IANA指定为特殊如MQTT1883/8883。从49152 - 65535是动态或私有端口号。数据包封装与解封过程6. 网络配置ping ip地址/域名查看当前主机和IP/域名所对应的网络是否联通例如ping www.baidu.com。ifconfigLinux上查看IP地址。Windows上使用ipconfig。网络配置步骤虚拟机-设置-网络适配器-桥接模式。编辑-虚拟网络编辑器-更改设置-VMnet0-桥接至-当前上网的网卡-应用。修改网络配置文件
sudo vim /etc/network/interfaces
内容改为
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet dhcp
重启网络服务
sudo /etc/init.d/networking restart
测试
ping www.baidu.com
7. 网络层-UDP在传输层用户数据报协议User Datagram Protocol。网络编程模型B/S模型browser浏览器/server服务器。客户端是一个通用的客户端浏览器。一般只做服务器开发。客户端要加载的数据均来自服务器。C/S模型client客户端/server服务端。客户端是一个专用的客户端。服务器和客户端都需开发。客户端保存资源本地加载无需所有数据都请求服务器。编程客户端socket()创建通信的套接字文件描述符网络通信时应用层可操作的端口。sendto()发送数据。recvfrom()接受数据。close()关闭套接字。服务端socket()创建通信的套接字。bind()绑定服务器的IP和端口。sendto()发送数据。recvfrom()接受数据。close()关闭套接字。相关函数socket()函数
#include sys/types.h /* See NOTES */
#include sys/socket.h
int socket(int domain, int type, int protocol);
功能创建通信的套接字。参数domain网络层使用的协议族如AF_INETIPv4、AF_INET6IPv6。type规定传输层的协议如SOCK_DGRAMUDP协议、SOCK_STREAMTCP协议、SOCK_RAW原始套接字。protocol0按照默认协议方式创建。返回值成功返回套接字失败返回-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要发送的字节数。flags0按照默认方式发送。dest_addr接收方的地址信息IP端口号。addrlen接收方地址的大小。返回值成功返回实际发送的字节数。 3.
uint32_t htonl(uint32_t hostlong); 主机转网络
uint16_t htons(uint16_t hostshort); 主机转网络
uint32_t ntohl(uint32_t netlong); 网络转主机
uint16_t ntohs(uint16_t netshort); 网络转主机4.
in_addr_t inet_addr(const char *cp);
功能:将字符串IP地址转换成二进制IP地址形式char *inet_ntoa(struct in_addr in);
功能将二进制ip转换成字符串5.
网络字节序大端 network
主机字节序小端 50000 host8.代码 UDP相关编程客户端
#include sys/types.h /* See NOTES */
#include sys/socket.h
#include unistd.h
#include stdio.h
#include netinet/in.h
#include arpa/inet.h
#include string.hint main(int argc, char const *argv[])
{int sockfd socket(AF_INET, SOCK_DGRAM, 0);//man 7 ip/创建套接字(网络类型UDP0)if(sockfd 0){perror(socket error);return -1;}struct sockaddr_in seraddr;seraddr.sin_family AF_INET;//种类seraddr.sin_port htons(50000);//端口号seraddr.sin_addr.s_addr inet_addr(192.168.0.179);//ip地址// while(1)// {// ssize_t cnt sendto(sockfd, 1111, 13, 0, (struct sockaddr *)seraddr, sizeof(seraddr));//发送// }char buff[1024] {0};while(1){fgets(buff,sizeof(buff),stdin);ssize_t cnt sendto(sockfd, buff, strlen(buff), 0, (struct sockaddr *)seraddr, sizeof(seraddr));//发送if(cnt 0){perror(sendto error);return -1;}printf(cnt %ld\n, cnt);}close(sockfd);//关闭return 0;
}服务端
#include sys/types.h /* See NOTES */
#include sys/socket.h
#include unistd.h
#include stdio.h
#include netinet/in.h
#include arpa/inet.h
#include string.hint main(int argc, char const *argv[])
{int sockfd socket(AF_INET, SOCK_DGRAM, 0);if(sockfd 0){perror(socket error);return -1;}struct sockaddr_in seraddr;seraddr.sin_family AF_INET;seraddr.sin_port htons(50000);seraddr.sin_addr.s_addr inet_addr(192.168.0.192);int ret bind(sockfd, (struct sockaddr *)seraddr, sizeof(seraddr));if(ret 0){perror(bind error);return -1;}char buff[1024] {0};while(1){ssize_t cnt recvfrom(sockfd, buff, sizeof(buff), 0, NULL, NULL);if(cnt 0){perror(recvfrom error);return -1;}printf(cnt %ld, buff %s\n, cnt, buff);memset(buff, 0, sizeof(buff));}close(sockfd);return 0;
}