IP地址
概念:在IPv4协议版本中,IP地址是uint32_t 无符号4个字节(32位)的整数;在IPv6协议版本中,IP地址是uint8_t addr[16]
作用:在网络中唯一标识每一台主机(才能实现点到点精确通信)
在网络中,每条数据中都要包含两条信息:目的IP地址、源IP地址
目的IP地址:能够让网络中的路由器为每一条数据根据目的地址选择不同的路径到达对端主机
源IP地址:能够让对端主机知道数据是谁发送,以便于回复数据
源IP地址<——>目的IP地址:表示数据从哪个主机来到哪个主机去
PORT端口
概念:uint16_t 无符号两个字节的整数(0~65536)
作用:在一台主机上唯一标识一个进程(进程的pid会随程序的重启而发生改变,而端口不会,所以不能用进程id标识进程)
特性:一个进程可以使用多个端口,一个端口只能被一个进程占用
源端口<---->目的端口:表示数据从哪个进程来到哪个进程去
通过IP地址和端口可以实现不同主机之间的进程间通信(网络通信)
网络通信协议
概念:网络通信中数据格式的约定
协议分层概念: 对通信协议在不同的通信环境中进行封装,不同层次使用不同的协议,提供不同的服务,将通信环境划分出来,使通信的实现更加简单,更容易形成规范
网络通信环境中的协议分层:
- OSI七层参考模型:应用层、表示层、会话层、传输层、网络层、链路层、物理层
- TCP/IP五层模型:应用层、传输层、网络层、链路层、物理层
- 应用层: 负责应用程序间的数据沟通,典型协议:HTTP、SMTP、FTP、DNS
- 传输层: 负责应用程序之间的数据传输。因为传输层的协议中主要包含的信息就是端口。典型协议:TCP/UDP
- 网络层: 负责地址管理和路由选择。为网络中的数据选择合适的路径。典型协议:IP协议。典型设备:路由器
- 数据链路层: 负责相邻设备间的数据帧的识别和传输。网卡设备的MAC地址信息。典型协议:Ethernet协议;典型设备:交换机
- 物理层: 负物理责光/电信号的传输。典型协议:以太网协议;典型设备:集线器
数据的传输流程
- 发送端主机的层层数据封装:tcp/ip模型中五层协议对原始数据进行层层描述
- 接收端主机的层层数据解析:tcp/ip模型中五层协议对网络数据进行层层解析得到原始数据
网络字节序
主机字节序:cpu对内存中数据进行存取的顺序,取决于cpu架构(x86架构cpu:小端、mips架构cpu:大端)
- 大端字节序:低地址存高位
- 小端字节序:低地址存低位
网络字节序:网络通信是不同主机间的通信,但是不同主机上的主机字节序会对通信造成极大影响(数据二义),因此网络通信中必须使用统一字节序:大端字节序
判断大小端:
union tmp
{ int a;
char b;
}
tmp.a=1;
if(tmp.b==1)
{
cout<<"小端"<<endl;
}
else
{
cout<<"大端"<<endl;
}