-
网络编程
- 是指通过计算机网络进行数据传输和通信的编程过程,也就是两个不在同一台主机上的进程间通信
-
常用的编程模型有两种:客户端-服务器模型和对等模型
-
客户端-服务器模型:客户端发送请求,服务器接收请求并提供服务。这种模型适用于大多数的网络应用,例如 Web 应用、邮件服务、数据库服务等。常见的编程协议是 TCP/IP 协议栈,可以使用套接字(socket)编程来实现。
-
对等模型:也称为点对点模型或对等通信模型,其中所有参与方都可以充当客户端和服务器的角色,并且可以直接相互通信。这种模型适用于实时通信、文件共享、即时聊天等应用。常见的编程协议有 UDP、WebSocket 等。
-
-
常见的概念和技术:
- IP 地址:用于标识网络中的设备。IPv4 和 IPv6 是常见的 IP 地址格式。
- 端口:用于区分同一设备上不同应用程序的通信端点。
- 套接字(socket):用于在应用程序之间建立连接和进行数据传输的接口。
- TCP(传输控制协议):提供可靠的、面向连接的数据传输服务。
- UDP(用户数据报协议):提供无连接的、不可靠的数据传输服务。
- HTTP(超文本传输协议):用于在客户端和服务器之间传输超文本的协议。
- WebSocket:一种基于 TCP 的全双工通信协议,常用于实现实时通信应用。
- RESTful API:一种基于 HTTP 协议的架构风格,用于设计和开发 Web 服务接口。
- Socket 编程:使用套接字进行网络通信的编程方式。
-
如何通过网络进行通信
- 分层结构(为了简化跨主机通信的步骤)
- OSI七层网络模型
- 应用层(http ,ftp ,tftp)、表示层、会话层、传输层(TCP,UDP)、网络层(IP)、数据链路层(ARP, RARP)、物理层
- TCP/IP四层网络模型
- 应用层(表示, 会话)、传输层、网络层、网络接口层(数据链路, 物理)
- 分层结构(为了简化跨主机通信的步骤)
-
IP
- ipv4地址是一个32位的地址(4字节),理论上最多可分配2^32-1个地址,实际上早已耗尽
- ipv6地址是一个128位的地址(8字节)
-
IPv4地址的表达
- 点分十进制的表达,也就是每一个字节用.来分割,转换为十进制表达,例如"192.168.2.111"
- 直接整型数值
- 点分十进制的地址转换为整型
- inet_aton(3)
- 将整形地址转换为点分十进制表达
- inet_ntoa(3)
- IPv6地址
- 地址空间的扩展: 由八组四位十六进制数字组成,每组之间使用冒号分隔,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。
-
简化的报头:IPv6的报头相比IPv4更加简化,提高了处理效率。它还支持可选扩展报头,使得在传输过程中可以添加额外的功能。
-
自动地址配置:IPv6支持通过一种称为SLAAC(Stateless Address Autoconfiguration)的技术,使设备能够自动获取全球唯一的IPv6地址,简化了网络配置过程。
-
改进的安全性:IPv6内置了IPsec(Internet Protocol Security)协议,提供了端到端的数据包加密和认证。这增加了网络通信的安全性,并简化了在IPv4中需要额外配置的安全功能。
-
QoS支持:IPv6在报头中添加了一些字段,可以支持更好的服务质量(Quality of Service),包括流量分类和优先级处理。
-
IPv4地址划分(网络号+主机号)网络号是用于划分网段,主机号用于分配主机
A(1字节的网络号+3字节的主机号)
B(2bytes网络号+2bytes主机号)C(3bytes网络号+1byte主机号)
D(组播地址)E(科学研究)
网络号(ABCD) 0开头,那么范围0~127 10开头,那么范围就是128~191 110开头,那么范围就是192~223 110开头,那么范围就是224~239
网络类型 适合大型网络 适合中大型网络 适合小型网络
内网地址(ABC)10.0.0.0~10.255.255.255 172.16.0.0~172.31.255.255 192.168.0.0~192.168.255.255
-
IPv4特殊地址
- "127.0.0.1"环回测试地址,测试本机TCP/IP协议栈是否是通的
- "255.255.255.255"全网广播地址
- "0.0.0.0"本地任意地址
-
port端口
- 区分服务
- 两个字节的整型数:0~65535
- 0~1024专用端口,周知端口
- 1024~65535用户端口
-
跨主机传输数据类型需要注意什么?
-
数据类型中一定不能包含指针
-
大小端未必一致(字节序)
- 大端存储:低字节存再高地址,高字节存在低地址
- 小端存储:低字节存低地址,高字节存高地址
- 字节序转换
- 本地字节序转换为网络字节序
- htons(3) / htonl(3)
- 网络字节序转换为本地字节序
- ntohs(3) / ntohl(3)
- 本地字节序转换为网络字节序
- 验证大小端存储(两种方法)
-
数据类型要明确
- int8_t / uint16_t/u32
-
结构体对齐因编译器版本而异
- 单字节对齐
- struct {}__attrbute__((packed));
-
UNIX高级编程【深入浅出】 网络基础
于 2023-09-13 20:26:29 首次发布