一、网络基础:
概念:1> 网络编程的本质就是进程间的通信,只不过进程分布在不同的主机上
2>在跨主机传输过程中,需要确定通信协议后,才可以通信
1. OSI体系结构(重点)
定义7层模型:
2. TCP协议
1)网络接口与物理层
3. IP地址划分
4.点分十进制
5.子网掩码
TCP与UDP的端口号是相互独立的
二、跨主机传输
1. 子节序(重点)
字节序是计算机存储多字节整数序列的方式:
1>小端字节序:低序字节存储在地地址上
2>大端字节序:高序字节存储在地地址上
3>计算机的内存读取:都是从低地址往高地址读取的,然后通过大小端转换得出读取到的结果
4>char单字节,float double浮点类型,字符串以上均没有字节序的说法
验证大小端存储?
#include<stdio.h>
union node
{
unsigned int a;
char b;
}
int main(int argc, const char *argv[])
{
unsigned int a=0x87654321;
char *ptr=(char*)&a;
if(0x21==*ptr)
{
printf("小端\n");
}
else if(0x87==*ptr)
{
printf("大端\n");
}
2. 本地字节序与网络字节序
本地字节序:主机字节序;网络字节序:规定使用大端字节序
在跨主机传输过程中,需要使用同一的字节序,即网络字节序,避免兼容性问题
3. 字节序转换函数
htons htonl 主机字节序--->网络字节序
ntohs ntohl 网络字节序--->主机字节序
4.结构体对齐
编译器会对结构体进行对齐,加速CPU取值周期,由于数据对齐也是与操作系统相关,不同的主机如果使用不同的对齐方式,会导致数据无法解析;所以网络传输结构体的时候需要取消结构体对齐