一、课程概述
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