网络编程基础知识
一,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字符串
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)