Administrator
Administrator
发布于 2024-09-06 / 7 阅读
0
0

C语言网络方向基础

学习路径概览

  1. 计算机网络基础

    • 网络的基本概念和模型(如OSI模型和TCP/IP模型)
    • 网络拓扑结构和通信方式
    • IP地址、子网划分和路由
    • 常见协议:TCP、UDP、HTTP、DNS等
  2. 网络编程

    • 套接字编程(Socket Programming)
    • HTTP和RESTful API
    • 网络应用开发
  3. 网络安全

    • 网络攻击方式与防护
    • 加密技术和网络认证
    • 防火墙、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模型将网络通信划分为七个层次,每一层都有特定的功能:

  1. 物理层(Physical Layer):负责物理介质的传输,如电缆、光纤,数据以比特流的形式传输。
  2. 数据链路层(Data Link Layer):建立节点之间的直接连接,负责数据帧的传输和错误检测。协议有以太网(Ethernet)。
  3. 网络层(Network Layer):负责路由选择,确定数据包的传输路径。主要协议是IP(Internet Protocol)。
  4. 传输层(Transport Layer):确保端到端的可靠传输。主要协议有TCP(传输控制协议)和UDP(用户数据报协议)。
  5. 会话层(Session Layer):管理通信会话的建立、维护和终止。
  6. 表示层(Presentation Layer):负责数据格式的转换和加密解密等操作。
  7. 应用层(Application Layer):为应用程序提供网络服务,如HTTP、DNS、FTP等。
2. TCP/IP模型

TCP/IP模型是实际应用中最常用的网络协议模型,只有四个层次:

  1. 网络接口层(Link Layer):相当于OSI模型的物理层和数据链路层。
  2. 互联网层(Internet Layer):负责路由和地址分配,主要协议为IP。
  3. 传输层(Transport Layer):负责端到端通信,主要协议为TCP和UDP。
  4. 应用层(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. 套接字编程步骤
  1. 创建套接字
  2. 绑定套接字到指定IP地址和端口
  3. 监听连接请求(服务器端)
  4. 建立连接并交换数据
  5. 关闭套接字
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 常见的网络攻击

  1. DDoS攻击(分布式拒绝服务攻击):通过大量虚假流量淹没服务器,使其无法响应合法请求。
  2. 中间人攻击(MITM):攻击者拦截并篡改通信双方之间的消息。
  3. SQL注入攻击:攻击者通过在输入字段中插入恶意SQL代码来访问和操作数据库。

3.2 网络防护技术

  1. 加密技术:通过加密通信,确保数据传输的安全性。常用协议如SSL/TLS。
  2. 防火墙:通过过滤不合法的流量,阻止恶意数据包进入网络。
  3. VPN(虚拟专用网):通过加密隧道保护远程连接,防止数据泄露。

学习路线总结

  1. 计算机网络基础:通过学习OSI/TCP-IP模型、IP地址、常见协议,理解网络的工作原理。
  2. 网络编程:掌握套接字编程,能够开发网络应用。
  3. 网络安全:了解常见的网络攻击手段,学习防护技术。

通过这条学习路线,你将掌握网络的基础和进阶知识。


评论