OSI模型与TCP/IP协议栈对比
OSI七层模型
- 应用层:提供网络服务接口(HTTP、FTP、DNS等)。
- 表示层:数据格式转换、加密/解密。
- 会话层:建立、管理、终止会话。
- 传输层:端到端通信(TCP/UDP)。
- 网络层:路由选择与IP寻址。
- 数据链路层:物理地址寻址(MAC)、帧封装。
- 物理层:比特流传输(电缆、光纤等)。
TCP/IP四层模型
- 应用层:合并OSI的应用层、表示层、会话层(HTTP、DNS等)。
- 传输层:TCP(可靠)、UDP(高效)。
- 网络层:IP协议、ICMP(Ping)、路由协议(OSPF)。
- 接口层:合并OSI的数据链路层与物理层(ARP、网卡驱动)。
关键协议与功能
- DNS:域名解析(网址→IP)。
- DHCP:动态分配IP地址。
- ARP/RARP:IP与MAC地址转换。
- ICMP :网络诊断(如
ping)。
IP地址与网络配置
- IPv4结构 :
网络位 + 主机位(如192.168.1.10/24)。 - 配置方法 :
- 永久配置:修改
/etc/network/interfaces后重启网络服务。 - 临时配置:
ifconfig ens33 192.168.0.13/24 up(重启失效)。
- 永久配置:修改
- 测试命令 :
ping www.baidu.com、netstat -anp(查看网络连接)。
UDP协议特性
- 特点:无连接、低延迟、可能丢包(无阻塞控制)。
- 数据报边界:需匹配发送/接收次数,避免读阻塞。
Socket编程基础
核心函数
socket():创建套接字(参数:AF_INET、SOCK_DGRAM)。bind():绑定IP/端口(服务端必需)。sendto()/recvfrom():UDP数据收发(需指定目标地址)。
地址结构
c
struct sockaddr_in {
short sin_family; // AF_INET
unsigned short sin_port; // 端口(网络字节序)
struct in_addr sin_addr; // IP地址
};
字节序
- 网络字节序:大端(统一标准)。
- 主机字节序:小端(x86/ARM默认)。
示例代码片段
UDP服务端伪代码
c
int sock = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sock, (struct sockaddr*)&addr, sizeof(addr));
recvfrom(sock, buffer, sizeof(buffer), 0, NULL, NULL);
UDP客户端伪代码
c
sendto(sock, data, strlen(data), 0,
(struct sockaddr*)&server_addr, sizeof(server_addr));
注意事项
- 端口范围:1-65535(0-1024为系统保留)。
- 错误处理 :检查所有系统调用的返回值(如
socket返回-1时需处理)。 - 数据丢失:UDP需应用层实现重传或确认机制。