局域网、城域网、广域网:根据网络覆盖范围进行的网络划分
互联网、因特网:相同的东西不用的叫法(具有国际性的更大的广域网)
以太网、令牌环网:组网技术
IP地址:一台主机在网络中的标识
IPV4:uint32_t无符号四字节类型的整数---IP地址数据类型;DHCP---动态地址分配,NAT---网络地址转换
IPV6:uint8_t ip(16个字节),不向前兼容IPV4
端口:网络通信中一台主机上进程的标识符(uint16_t无符号两字节类型的整数数据0~65535),目的是为了让接收方主机收到数据后能够知道应该哪个进程处理数据,一个端口只能被一个进程占用
每一个网络中的数据都会带有的信息:源端IP地址、对端IP地址、源端端口、对端端口
源端端口+源端IP+对端IP+对端端口:描述了当前这个数据是从网络中的哪个主机上的哪个进程发出来的,要发往哪台主机上的哪个进程
协议:约定
网络通信协议实际上就是网络通信中的数据格式约定,因此要实现网路互连,就必须具有统一的网络通信协议标准
ISO:OSI七层网络互连模型:以提供的服务不同将网络通信环境划分为7层(由上往下层次划分:应用层、表示层、会话层、传输层、网络层、链路层、物理层)
TCP/IP五层模型:
应用层:负责应用程序之间的数据沟通---FTP、HTTP
传输层:负责进程之间的数据传输---UDP、TCP
网络层:负责地址管理与路由选择---IP、路由器
链路层:负责相邻设备之间的数据传输---以太网协议eth、交换机
物理层:负责物理光电信号的传输---以太网协议eth、集线器
网络字节序
主机字节序:一台主机上cpu对内存中数据按照字节为单位进行存取的顺序(大端:低地址存高位,小端:低地址存低位),一个变量/数组的起始地址即就是低地址,随着下标变大而变大
判断主机字节序:
(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){小端字节序}
主机字节序主要强调的是存储单元大于一个字节的数据类型
主机字节序对网络通信的影响:两个不同主机字节序主机的数据通信,有可能会产生数据二义(小端0x00000001,大端:0x01000000)
想要避免因为主机字节序不同而导致的数据二义,则需要在网络中统一字节序标准---网络字节序(实际上为大端字节序)
发送方将数据转换为网络字节序的数据进行发送,接收方接收到数据之后根据自己主机字节序决定如何转换
#include<arpa/inet.h>
uint32_t htonl(uint32_t hostlong);主机->网络 32位
uint16_t htons(uint16_t, hostshort);主机->网络 16位
uint32_t ntohl(uint32_t netlong);网络->主机 32位
uint16_t ntohs(uint16_t netshort);网络->主机 16位
sip+sport+dip+dport+protocol---五元组(标识一条通信)
网络中的每条数据中都会包含有完整的五元组信息