CMU 15-213 Intro to Computer Systems Lecture 21 to Lecture 22
课程主页:http://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/schedule.html
课程资料:https://github.com/EugeneLiu/translationCSAPP
课程视频:https://www.bilibili.com/video/av31289365/
这一部分回顾Lecture 21至Lecture 22,介绍了网络编程。
备注:图片和总结内容均来自于课件。
说明:
大部分内容已经整理过,这部分参考之前的笔记:
这里仅仅进行补充。
Lecture 21
计算机网络
- 网络是按地理邻近性组织的盒子和电线的分层系统
- SAN(系统局域网)跨越集群或机房
- 交换式以太网、Quadrics QSW、……
- LAN(局域网)跨越建筑物或校园
- 以太网是最突出的例子;
- WAN(广域网)跨越国家或世界
- 典型的高速点对点电话线;
- SAN(系统局域网)跨越集群或机房
- 互联网络(internet)是一组相互连接的网络
- 全球IP互联网(Global IP Internet)是最著名的互联网(internet)示例;
众所周知的端口和服务名称
- 热门服务已经永久分配了知名端口和对应的知名服务名称:
- echo服务:7/echo
- ssh服务器:22/ssh
- 电子邮件服务器:25/smtp
- 网络服务器:80/http
- 众所周知的端口和服务名称之间的映射包含在每台Linux机器上的/etc/services文件中。
连接剖析
连接由其端点的套接字地址(套接字对,(cliaddr:cliport, servaddr:servport))唯一标识:
使用端口识别服务
套接字
什么是套接字
- 对内核来说,套接字是通信的端点;
- 对于应用程序,套接字是一个文件描述符,它允许应用程序从/向网络读/写;
- 记住:所有Unix I/O设备,包括网络,都被建模为文件;
客户端和服务器通过读取和写入套接字描述符来相互通信:
常规文件I/O和套接字I/O之间的主要区别在于应用程序如何“打开”套接字描述符;
套接字地址结构
通用套接字地址:
用于连接、绑定和接受的地址参数;
该结构是必要的,因为在设计套接字接口时C没有通用(void *)指针;
为方便转换,我们采用 Stevens 约定:
typedef struct sockaddr SA;
代码:
struct sockaddr { uint16_t sa_family; /* Protocol family */ char sa_data[14]; /* Address data. */ };
内存结构:
Internet专用套接字地址:
对于采用套接字地址参数的函数,必须将(struct sockaddr_in )转换为(struct sockaddr )。
代码:
struct sockaddr_in { uint16_t sin_family; /* Protocol family (always AF_INET) */ uint16_t sin_port; /* Port num in network byte order */ struct in_addr sin_addr; /* IP addr in network byte order */ unsigned char sin_zero[8]; /* Pad to sizeof(struct sockaddr) */ };
内存结构:
套接字接口
客户端-服务器事物的上下文中的套接字接口:
流程:
- 开启服务器;
- 开启客户端;
- 交换数据;
- 断开客户端;
- 删除客户端;
基本互联网元素
- 互联网主干(Backbone):
- 通过高速点对点网络连接的路由器(全国或全球)的集合;
- 互联网交换点(IXP):
- 连接多个主干网(通常称为对等点)的路由器;
- 也称为网络接入点(NAP);
- 区域网络(Regional net):
- 覆盖较小地理区域(例如,城市或州)的较小骨干网;
- 存在点(POP):
- 连接到互联网的机器;
- 互联网服务提供商(ISP):
- 提供对POP的拨号或直接访问;
Internet 连接层次结构
IP地址结构
IP(V4)地址空间分为几类:
网络ID以w.x.y.z/n格式书写
- n = 主机地址中的位数
- 例如,CMU写为128.2.0.0/16
- B类地址
未路由(私有)IP 地址:
- 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
互联网的进化
- 原始想法
- Internet上的每个节点都有唯一的IP地址
- 每个人都可以直接与每个人交谈;
- 没有保密或认证
- 同一LAN上的路由器和主机可见消息;
- 可以在包头中伪造源字段;
- Internet上的每个节点都有唯一的IP地址
- 缺点
- 没有足够的可用IP地址;
- 不希望每个人都可以访问或了解所有其他主机;
- 安全问题;
互联网的进化:命名
- 动态地址分配
- 大多数主机不需要知道地址
- 只有那些充当服务器的主机需要
- DHCP(动态主机配置协议)
- 本地ISP分配临时使用的地址
- 大多数主机不需要知道地址
- 例子:
- CMU笔记本电脑(有线连接)
- IP地址128.2.213.29(bryant-tp4.cs.cmu.edu)
- 静态分配
- 家里的笔记本电脑
- IP地址192.168.1.5
- 仅在家庭网络内有效
- CMU笔记本电脑(有线连接)
互联网的进化:防火墙
防火墙
- 对Internet的其余部分隐藏组织节点;
- 在组织内使用本地IP地址;
- 对外服务,提供代理服务;
- 客户端请求:src=10.2.2.2,dest=216.99.99.99
- 防火墙转发:src=176.3.3.3,dest=216.99.99.99
- 服务器响应:src=216.99.99.99,dest=176.3.3.3
- 防火墙转发响应:src=216.99.99.99, dest=10.2.2.2
Lecture 22
代理
- 代理是客户端和源服务器之间的中介
- 对客户端来说,代理就像一个服务器
- 对于服务器来说,代理就像一个客户端
为什么使用代理?
- 可以在请求和响应通过时执行有用的功能
- 示例:缓存、日志记录、匿名化、过滤、转码
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Doraemonzzz!
评论
ValineLivere