网络编程
2.网络的体系结构(七层模型,四层模型)
//因为网络通信比较麻烦,所以网络采用分层思想
OSI开放系统互联网模型(七层模型)
高层:
应用层
表示层
会话层
低层:
传输层
网络层
数据链路层
物理层(驱动,网卡)
仅仅是一种理想状态,现实中并没有实现
TCP/IP协议族体系结构:(四层模型)//是Internet事实上的工业标准
用户态:
应用层 (http,ssh,tftp)
inux内核态:
传输层 (tcp,udp) 决定将数据交给哪一个任务去执行
网络层 (ip) 建立网络连接(一对一)
网络接口和物理层(以太网,驱动) 屏蔽硬件差异
网络采用分层思想:(封包和拆包)
.1每一层实现不同的功能,对上一层的数据做透明传输
.2每一层向上层提供服务,并且使用下层提供的服务
socket通信
他的本质就是一个函数调用,它可以给我们返回一个特殊的网络描述符,他混合了网络层和传输层,方便开发人员方便高效的进行网络传输
网络通信中需要注意的问题
.1字节序大小端问题
小端序:正序存放
大端序:倒序存放
数据传输: 本地序1->网络序->本地序2
//一般来说我们使用的机器都是小端序,网络序都是大端序
#include <arpa/inet.h>
host
network
long
short
将一个无符号短整形数从网络字节顺序转换为主机字节顺序
uint16_t ntohs(uint16_t netshort);
将一个无符号短整形数从网络字节顺序转换为主机字节顺序
uint32_t ntohl(uint32_t netlong);
将一个无符号短整形数从网络字节顺序转换为主机字节顺序。
uint_16t ntohs(uint16_netshort)
将一个无符号短整形数从网络字节顺序转换为主机字节顺序。
uint_32t ntohs(uint32_t netlong)
//单字节数据不需要考虑大小端序
ip地址转换函数
in_addr_t inet_addr(const char *cp);//将ip字符串转换为整型ip值
net_aton() inet_ntoa();//不是很建议使用
int inet_pton(AF_INET,ip字符串,转换之后的ip值的地址);
const char *inet_ntop(AF_INET,ip整型值的地址,ip字符串,ip字符串大小);
/*例子:
unsigned int ip;
char buf[50];
inet_pton(AF_INET,"0.0.0.0",&ip1);
inet_ntop(AF_INET,&ip1,buf,50);