一、課程概述
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/zh-hk/n/333353.html