一,OSI模型

OSI七层协议模型其实是一种理想化的网络协议模型,实际应用的多是TCP/IP四层或五层协议族。

OSI七层协议模型分别是:物数网传会表应(快速记忆)

第一层:物理层

这一层是网线、光纤、集线器这些硬件方面的东西,本质上就是传0和1的“电线”,不做任何逻辑判断。

第二层:数据链路层

这一层分为两个子层:

1.MAC子层:也叫介质访问控制层,主要用来添加MAC头部(源/目的地址)和尾部(CRC校验)

2.LLC子层:也叫逻辑链路控制层,主要用来提供逻辑链路标识,实现流量控制和错误恢复(如滑动窗口协议)

像MAC地址、交换机都在这一层

第三层:网络层

主要功能:

1.逻辑寻址:使用IP地址,跨网段定位主机

2.路由选择:根据路由表选择跨网络的最佳传输路径

3.数据包转发,IP分片

4.划分广播域

IP协议和路由器都在这一层

第四层:传输层

这一层可以实现端到端的连接,是承上启下的一层,可以实现端到端的通信,有两大核心服务:TCP和UDP,后面讲TCP/IP四层协议族再详细介绍

第五层:会话层

主要用来建立网络通信节点,SSL/TSL在这一层

第六层:表示层

表示层主要用来进行数据转换和数据加密,像ASCII码就在这一层

第六层:应用层

这一层直接面向用户和应用软件,为各类应用程序提供网络访问接口,比如HTTP就在这一层

总的结构如图所示:

二,TCP/IP协议族

这个是比较标准的网络协议模型,对比OSI的七层其实就是讲表示层和会话层合并至应用层,数据链路层和物理层合并叫网络接口层,所以总共是四层

第一层:网络接口层

功能也是合并的功能:物理介质传输比特流、相邻节点帧传输、错误检测

第二层:网络层

功能一样也是路由选择、IP寻址等,其中涉及很多网络协议,分别讲解一下:

1.IP(网间协议)

最常见的一个协议,主要功能就是用来寻址、路由、分片与重组,可以通过IP地址唯一标识设备

2.ICMP(网际控制消息协议)

两个功能:判断网络是否能和对方建立,也就是ping命令;传输错误报告,当IP数据包传输失败向源端发送错误信息

3.IGMP(网际组管理协议)

主要用于多播/组播

4.ARP(地址解析协议)

它能根据IP地址获取物理地址,从IP->MAC

5.RARP(反向地址转换协议)

局域网的物理机器从网关服务器的ARP表或缓存上请求其IP地址,从MAC->IP

345这三个协议再OSI中是属于数据链路层的,但是在TCP/IP协议中归并到网络层了

第三层:传输层

两大核心服务:

1.TCP(传输控制协议)

主要特点:基于字节流的一种通信方式;面向连接的一种通信方式,保证数据安全可靠

2.UDP(用户数据报协议)

主要特点:基于数据报的一种通信;无连接;不保证数据安全可靠

第四层:应用层

为用户提供具体的网络服务,直接面向用户操作的,不同的服务对应不同的协议,如图:

三,套接字与字节序

再接着讲一下套接字和字节序,后面会大量用到

1.套接字

它能为应用程序提供统一的网络通信能力(如同电话插孔标准化连接方式)

套接字编程流程:创建socket->绑定IP和端口->监听/连接->发送/接收数据->关闭socket

套接字类型:

2.字节序

字节序就是多字节数据在计算机内存中存储的先后顺序。

有两种类型:

大端序(网络字节序):高位字节在前,符合人类书写习惯,如0x1234存储为12  34

小端序(主机字节序):低位字节在前,如0x1234,存储为34  12

大小端转换函数:

1.主机->网络(发送/绑定时使用)

htons函数原型:

uint16_t htons(uint16_t hostshort)

一般用来转换端口号(16位)

htonl函数原型:

uint32_t htonl(uint32_t hostlong)

一般用来转换IPv4地址(32位)

2.网络->主机(接收数据后解析使用)

ntohs函数原型:

uint16_t ntohs(uint16_t netshort)

一般用来解析收到的远端端口号

ntohl函数原型:

uint32_t ntohl(uint32_t netlong)

一般用来解析收到的远端IP地址

IP地址转换函数:

因为日常我们用的像192.168.1.1这种都是点分十进制字符串,而网络中实际传输32位整型,所以需要进行转换

1.inet_addr

函数原型:

in_addr_t inet_addr(const char *cp)

功能:点分十进制IP字符串->网络字节序的32位整型

2.inet_ntoa

函数原型:

char *inet_ntoa(struct in_addr in)

功能:网络字节序的32位整型->点分十进制IP字符串

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐