一、课程概述
CS144是《计算机网络》的一门大型课程,涵盖了计算机网络领域的多个方面,包括网络协议、网络安全以及网络编程等等。该课程的目标是通过让学生学习和实践网络技术,让他们更好地理解计算机网络的原理和设计,为未来的网络应用和系统开发提供扎实的基础。
二、课程内容
1、网络协议
网络协议是计算机网络中非常重要的一部分,它定义了网络中各个设备之间的通信规则。在CS144的课程中,主要涵盖TCP/IP协议、HTTP协议、DNS协议、SMTP协议等等。
/**
 * 一个简单的TCP服务器
 */
#include 
#include 
#include 
#include 
#include 
#include 
int main() {
    int server_fd, client_fd;
    struct sockaddr_in server_addr, client_addr;
    char buf[1024] = {0};
    // 创建socket
    server_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (server_fd == -1) {
        perror("socket create error");
        exit(1);
    }
    // 设置reuseaddr
    int optval = 1;
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1) {
        perror("setsockopt error");
        exit(1);
    }
    // 绑定地址
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(8080);
    server_addr.sin_addr.s_addr = INADDR_ANY;
    if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
        perror("bind error");
        exit(1);
    }
    // 监听
    if (listen(server_fd, 10) == -1) {
        perror("listen error");
        exit(1);
    }
    // 接收客户端连接
    socklen_t client_addr_len = sizeof(client_addr);
    client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_addr_len);
    if (client_fd == -1) {
        perror("accept error");
        exit(1);
    }
    // 接收数据
    int len = read(client_fd, buf, sizeof(buf));
    printf("recv: %s", buf);
    // 发送数据
    char response[] = "HTTP/1.1 200 OK\nContent-Type: text/plain\n\nHello world!";
    write(client_fd, response, sizeof(response));
    // 关闭连接
    close(client_fd);
    close(server_fd);
    return 0;
}2、网络安全
网络安全是计算机网络中不可或缺的一部分,它涵盖了许多相关的技术和方案,如加密算法、网络防火墙、反病毒软件等等。在CS144的课程中,主要涵盖一些基本的安全概念和技术,如SSL、TLS、VPN等等。
/**
 * 一个简单的SSL客户端
 */
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
int main() {
    int client_fd;
    struct sockaddr_in server_addr;
    SSL_CTX *ctx;
    SSL *ssl;
    char buf[1024] = {0};
    // 初始化SSL库
    SSL_library_init();
    ERR_load_crypto_strings();
    SSL_load_error_strings();
    // 创建SSL上下文
    ctx = SSL_CTX_new(TLS_client_method());
    if (ctx == NULL) {
        ERR_print_errors_fp(stderr);
        exit(1);
    }
    // 创建socket
    client_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (client_fd == -1) {
        perror("socket create error");
        exit(1);
    }
    // 连接服务器
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(443);
    inet_pton(AF_INET, "www.baidu.com", &server_addr.sin_addr);
    if (connect(client_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
        perror("connect error");
        exit(1);
    }
    // 创建SSL对象
    ssl = SSL_new(ctx);
    if (ssl == NULL) {
        ERR_print_errors_fp(stderr);
        exit(1);
    }
    // 将SSL与socket绑定
    SSL_set_fd(ssl, client_fd);
    // 建立SSL握手
    if (SSL_connect(ssl) != 1) {
        ERR_print_errors_fp(stderr);
        exit(1);
    }
    // 发送数据
    char request[] = "GET /\r\n\r\n";
    SSL_write(ssl, request, sizeof(request));
    // 接收数据
    SSL_read(ssl, buf, sizeof(buf));
    printf("recv: %s", buf);
    // 关闭连接
    SSL_shutdown(ssl);
    close(client_fd);
    SSL_CTX_free(ctx);
    return 0;
}3、网络编程
网络编程是一种非常重要的开发技能,它涉及到网络应用的实现、网络数据的交互、网络性能的优化等等。在CS144的课程中,主要涵盖一些基础的网络编程技术和框架,如Socket编程、HTTP服务器和客户端的实现等等。
/**
 * 一个简单的HTTP服务器
 */
#include 
#include 
#include 
#include 
#include 
#include 
int main() {
    int server_fd, client_fd;
    struct sockaddr_in server_addr, client_addr;
    char buf[1024] = {0};
    // 创建socket
    server_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (server_fd == -1) {
        perror("socket create error");
        exit(1);
    }
    // 设置reuseaddr
    int optval = 1;
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1) {
        perror("setsockopt error");
        exit(1);
    }
    // 绑定地址
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(8080);
    server_addr.sin_addr.s_addr = INADDR_ANY;
    if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
        perror("bind error");
        exit(1);
    }
    // 监听
    if (listen(server_fd, 10) == -1) {
        perror("listen error");
        exit(1);
    }
    while (1) {
        // 接收客户端连接
        socklen_t client_addr_len = sizeof(client_addr);
        client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_addr_len);
        if (client_fd == -1) {
            perror("accept error");
            continue;
        }
        // 接收数据
        int len = read(client_fd, buf, sizeof(buf));
        printf("recv: %s", buf);
        // 发送数据
        char response[] = "HTTP/1.1 200 OK\nContent-Type: text/plain\n\nHello world!";
        write(client_fd, response, sizeof(response));
        // 关闭连接
        close(client_fd);
    }
    close(server_fd);
    return 0;
}三、结语
以上是对CS144课程的简要介绍,希望对正在学习网络编程的同学有所帮助。如果你对计算机网络领域感兴趣,那么请不要错过这门课程。祝大家学习愉快,取得更好的成绩!
原创文章,作者:TOGPA,如若转载,请注明出处:https://www.506064.com/n/333353.html
微信扫一扫 
支付宝扫一扫