了解TCP/IP五层结构(或四层,省略物理层)
TCP/IP结构中,每层有每层不同的职责,每一层都会在下一层所提供的网络来完成自己的需求
- 应用层: 应用层就是我们所使用的程序工作的层级,用来发送我们要传输的
原始数据。 - 传输层: 传输层用传输协议控制信息,保证两天主机间的数据传输
- 网络层: 负责地址管理与路由选择,通过ip地址来识别主机,并通过路
由表的方式规划两台主机间的数据传输线路 - 数据链路层: 负责设备间数据帧的传输与识别
- 物理层: 负责光电信号的传输,也就是1010001的高低电平
数据包在各层的封装与分用
数据在传输前,会通过tcp每一层结构,而每一层都会对上一层的数据进行封装
- 应用层数据称为,应用数据
- 传输层称为,数据段
- 网络层称为,数据报
- 数据链路层称为,数据帧
物理层将上层数据转换为光电信息
而数据分用,是将最终的数据传输给另一个主机B,主机B自下而上,一层一层拆解,得到原始数据的过程
IP地址与端口
IP地址:为了在网络中多个终端中找到我们所要发送数据的目的机器,就需要IP地址来识别唯一一台主机
端口:为了识别当前主机的一个线程
IP地址的格式是以uint32_t,也就是无符号的32位整型形式,并以点分十进制表示:如174.168.2.33,每一端最高到255,因为一个字节8位最多能表示256个十进制数。
端口的格式时以uint16_t,就是无符号16类整型形式,能表示的范围时0~66535,但有些端口会被已知的服务占用,如http端口80,https端口443,mysql端口3306,都是已经被占用而无法被使用的。
既然端口用来指明需要用到的线程,不使用PID的原因是:线程中断重新启动时,PID会被重置,不会是原来的PID,所以需要用端口来指明所要用到的线程
为了方便识别和传输,会将目的地址与源地址一起传送到目的主机
此时会涉及到计算机大小端字节序问题。
小端: 低地址存放低位数据
大端: 低地址存放高位数据
一般网络字节序都是大端字节序,是网络通信的标准,
而小端机器进行网络通信时就需要进行大小端转换
大小端转换的接口
ip地址转换
uint32_t htonl(uint32_t hostl)将主机地址字节序转换位网络地址字节序
反过来uint32_t ntohl(uint32_t netl)就是将网络地址字节序转换位主机地址字节序
端口转换 与ip相同,short型
uint16_t htons(uint16_t hosts)将主机端口字节序转换位网络端口字节序
反过来uint16_t ntohl(uint16_t nets)就是将网络端口字节序转换位主机端口字节序