IP地址: 一台主机在网络中的标识
IPv4: uint32_t 类型的整数(32位无符号类型的整数) -- IP地址数据类型
每一个网络中的数据都会带有两条信息: 源端IP地址; 对端IP地址
端口: 网络通信中一台主机上进程的标识符 (uint16_t 类型的整数 范围0~65535)
每一个网络中的数据不但带有源端IP和对端IP, 还包括两个信息: 源端端口和对端端口
源端IP + 源端端口 + 对端IP + 对端端口 : 描述了当前这个数据是从网络中的哪个主机上的哪个进程发出来的, 要发往哪个主机上的哪个进程
协议:
网络通信协议 -- 就是网络通信中的数据格式的约定
因此要实现网络互连 -- 就必须具有统一的网络通信协议标准;
ISO公司提出:
OSI七层网络互连模型: 以提供的服务不同将网络通信环境划分为七层(过于细致,繁琐,不实用)
层次划分: 应用层 - 表示层 - 会话层 - 传输层 - 网络层 - 链路层 - 物理层
TCP / IP五层模型:(常用模型)
应用层: 负责应用程序之间的数据沟通; FTP HTTP
传输层: 负责进程之间的数据传输; UDP TCP
网络层: 负责地址管理和路由选; IP 路由器
链路层: 负责相邻设备之间的数据传输; 以太网协议-eth 交换机
物理层: 负责物理光电信号的传输; 以太网协议 集线器
主机字节序: 一台主机上cpu对内存中数据按照字节为单位进行存取的顺序
分类: 大端: 低地址存高位 小端: 低地址存低位
一台主机的字节序是大端还是小端由cpu决定
一个变量/数组的起始地址就是低地址, 随着下标变大而变大,首地址为低地址
二进制中: 高位 低位
00000001 00000010 00000011 00000100
计算机中:int a 低地址 高地址
| | | |
如何判断主机字节序为大端还是小端
1.使用联合体,所有变量共有一个空间
union{int a;char b}tmp;
tmp.a=1;
if(tmp.b==1){ 小端 }
2. 取地址
int a=1;
char *b=(char*)&a;
if(*b==1){ 小端 }
主机字节序主要强调的是存储单元大于一个字节的数据类型:
short / int / long / float / double
主机字节序对网络通信的影响:
两个不同主机字节序主机之间的数据通信
所以主机字节序不同, 可能在网络通信中会产生数据二义
想要避免因为主机字节序不同而导致的二义, 则需要在网络中统一字节序标准 -- 网络字节序
网络字节序 -- 大端字节序
如果你的主机是小端, 则在网络通信时需要将数据转换为网络字节序后进行发送