学习路径概览
计算机网络基础
- 网络的基本概念和模型(如OSI模型和TCP/IP模型)
- 网络拓扑结构和通信方式
- IP地址、子网划分和路由
- 常见协议:TCP、UDP、HTTP、DNS等
网络编程
- 套接字编程(Socket Programming)
- HTTP和RESTful API
- 网络应用开发
网络安全
- 网络攻击方式与防护
- 加密技术和网络认证
- 防火墙、VPN、入侵检测系统
第一部分:计算机网络基础
1.1 网络的基本概念
1. 什么是网络?
网络是由多个计算设备(如计算机、服务器、路由器、交换机等)通过通信链路相互连接,能够共享资源和信息的系统。网络通过硬件(如网卡、交换机)和软件(如协议、应用)协同工作,进行数据的传输与处理。
2. 网络的类型
根据网络的范围和规模,网络可以分为以下几类:
- 局域网(LAN, Local Area Network):例如家庭网络、公司内部网络,通常覆盖范围小,速度较快。
- 广域网(WAN, Wide Area Network):覆盖较大范围,如多个城市、国家之间的网络。互联网就是一个广域网。
- 个人区域网(PAN, Personal Area Network):例如蓝牙连接,适用于个人设备间的通信。
- 城域网(MAN, Metropolitan Area Network):通常指一个城市范围内的网络,如某些城市的公共Wi-Fi系统。
1.2 网络的分层模型
网络中的通信是通过不同协议之间的协同工作完成的。为了便于理解和设计,网络被分为不同的层次,每一层都有特定的功能和协议。这其中最著名的模型是OSI模型和TCP/IP模型。
1. OSI模型(Open Systems Interconnection)
OSI模型将网络通信划分为七个层次,每一层都有特定的功能:
- 物理层(Physical Layer):负责物理介质的传输,如电缆、光纤,数据以比特流的形式传输。
- 数据链路层(Data Link Layer):建立节点之间的直接连接,负责数据帧的传输和错误检测。协议有以太网(Ethernet)。
- 网络层(Network Layer):负责路由选择,确定数据包的传输路径。主要协议是IP(Internet Protocol)。
- 传输层(Transport Layer):确保端到端的可靠传输。主要协议有TCP(传输控制协议)和UDP(用户数据报协议)。
- 会话层(Session Layer):管理通信会话的建立、维护和终止。
- 表示层(Presentation Layer):负责数据格式的转换和加密解密等操作。
- 应用层(Application Layer):为应用程序提供网络服务,如HTTP、DNS、FTP等。
2. TCP/IP模型
TCP/IP模型是实际应用中最常用的网络协议模型,只有四个层次:
- 网络接口层(Link Layer):相当于OSI模型的物理层和数据链路层。
- 互联网层(Internet Layer):负责路由和地址分配,主要协议为IP。
- 传输层(Transport Layer):负责端到端通信,主要协议为TCP和UDP。
- 应用层(Application Layer):为应用程序提供通信服务,如HTTP、DNS、SMTP等。
1.3 网络中的IP地址
IP地址是计算机网络中每台设备的唯一标识,类似于一个房子的地址。IP地址用于确定数据包的来源和目的地。
1. IP地址分类
IP地址有两种类型:
- IPv4:常用的IP地址格式,形如
192.168.1.1
,由32位二进制数表示,分为4组,每组8位(即4个字节),最大支持约43亿个地址。 - IPv6:由于IPv4地址资源耗尽,IPv6被设计为新一代IP协议,使用128位地址,形如
2001:0db8:85a3:0000:0000:8a2e:0370:7334
。
2. 子网掩码和CIDR
- 子网掩码:用于区分IP地址中的网络部分和主机部分。常见子网掩码如
255.255.255.0
。 - CIDR(Classless Inter-Domain Routing):无类别域间路由,用斜杠加数字表示子网划分,如
192.168.1.0/24
表示24位为网络部分。
1.4 常见协议
1. TCP(Transmission Control Protocol)
TCP是面向连接的协议,提供可靠的、按序传输的数据。TCP会在数据传输前建立连接,传输完成后释放连接。它确保数据不会丢失、重传或乱序。常见应用包括HTTP、FTP等。
2. UDP(User Datagram Protocol)
UDP是无连接的协议,数据包独立传输,速度快但不保证数据可靠性。适用于需要快速传输但对丢包不敏感的应用,如视频流、在线游戏等。
3. HTTP/HTTPS
**HTTP(HyperText Transfer Protocol)**是Web应用的核心协议,用于在客户端和服务器之间传输HTML页面、图像等资源。HTTPS是在HTTP的基础上加入SSL/TLS加密层,用于确保数据传输的安全性。
4. DNS(Domain Name System)
DNS用于将人类可读的域名(如www.google.com
)解析为IP地址(如142.250.72.206
),以便计算机能够定位服务器。
第二部分:网络编程
网络编程是指通过编写代码来实现网络通信。常见的网络编程方式是通过**套接字(Socket)**进行通信。
2.1 套接字编程基础
套接字(Socket)是网络通信的端点,可以看作网络中不同主机之间的“通信接口”。一个套接字包含IP地址和端口号,用于标识网络中的特定进程。
1. 套接字编程步骤
- 创建套接字
- 绑定套接字到指定IP地址和端口
- 监听连接请求(服务器端)
- 建立连接并交换数据
- 关闭套接字
2. TCP套接字编程示例
TCP服务器:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
char *hello = "Hello from server";
// 创建套接字
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd == 0) {
perror("Socket failed");
exit(EXIT_FAILURE);
}
// 绑定套接字
setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt));
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("Bind failed");
exit(EXIT_FAILURE);
}
// 监听连接
if (listen(server_fd, 3) < 0) {
perror("Listen failed");
exit(EXIT_FAILURE);
}
// 接受客户端连接
new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);
if (new_socket < 0) {
perror("Accept failed");
exit(EXIT_FAILURE);
}
// 读取客户端发送的数据
read(new_socket, buffer, 1024);
printf("Message from client: %s\n", buffer);
// 发送数据给客户端
send(new_socket, hello, strlen(hello), 0);
printf("Hello message sent\n");
// 关闭套接字
close(new_socket);
close(server_fd);
return 0;
}
**TCP客户端
:**
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
char *hello = "Hello from client";
char buffer[1024] = {0};
// 创建套接字
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("Socket creation error\n");
return -1;
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
// 连接到服务器
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
printf("Connection failed\n");
return -1;
}
// 发送数据到服务器
send(sock, hello, strlen(hello), 0);
printf("Hello message sent\n");
// 读取服务器返回的数据
read(sock, buffer, 1024);
printf("Message from server: %s\n", buffer);
// 关闭套接字
close(sock);
return 0;
}
第三部分:网络安全
3.1 常见的网络攻击
- DDoS攻击(分布式拒绝服务攻击):通过大量虚假流量淹没服务器,使其无法响应合法请求。
- 中间人攻击(MITM):攻击者拦截并篡改通信双方之间的消息。
- SQL注入攻击:攻击者通过在输入字段中插入恶意SQL代码来访问和操作数据库。
3.2 网络防护技术
- 加密技术:通过加密通信,确保数据传输的安全性。常用协议如SSL/TLS。
- 防火墙:通过过滤不合法的流量,阻止恶意数据包进入网络。
- VPN(虚拟专用网):通过加密隧道保护远程连接,防止数据泄露。
学习路线总结
- 计算机网络基础:通过学习OSI/TCP-IP模型、IP地址、常见协议,理解网络的工作原理。
- 网络编程:掌握套接字编程,能够开发网络应用。
- 网络安全:了解常见的网络攻击手段,学习防护技术。
通过这条学习路线,你将掌握网络的基础和进阶知识。