CMU CSAPP笔记 第十一章
基本网络知识
-
网络系统层次
- LAN(局域网)
- Ethernet(以太网)
- WAN(广域网)
- LAN(局域网)
数据的传输过程
-
TCP/IP协议
- IP
- 基本的命名方法和递送机制
- IPv4和IPv6
- 最初的互联网协议使用32位地址,称位IPv4,而IPv6有128位地址
- IP地址通常以一种点分十进制来表示
- 128.2.194.242就是地址0x8002c2f2
- UDP
- 不可靠数据报协议
- 使得包可以在进程间而不是主机间传递
- TCP
- 提供进程间可靠的双向链接
- IP
-
域名
- 通过一个叫做DNS的分布式数据库来维护
- 将IP地址与域名映射
- 一个IP地址可以映射到多个域名,一个域名也可以映射到多个IP地址
- 每个主机都有本地域名localhost
- 通过Linux下的nslookup命令可以查看域名对应的IP地址
Socekt
- socket(套字节)
- 套字节地址:IP地址:端口
- 例如199.16.156.198:80
- 端口分为临时端口和知名端口
- WEB服务器端口通常为80,电子邮件端口为25
- 端口为16bit整数
- 套字节地址:IP地址:端口
- socket接口
- socket从Linux程序角度来看就是一个file descriptor
- 地址结构
- 服务器和客户端的连接过程
- 服务器和客户端都调用socket函数创建文件描述符
- 服务器调用bind函数准备连接
- 由于默认socket描述符用于客户端,服务器调用listen函数将其转变为监听描述符,这个描述符服务器自开机运行只创建一次
- 最后调用accept函数等待服务器请求到达,返回已连接描述符,这个描述符每当一个服务器和客服端连接就创建一个
- 区分监听和已连接的目的是创建并发服务器,同时处理多个客户端
- 同时客户端(用户)调用connect函数准备连接,打开clientfd描述符
- 如图, 可以用open_clientfd和open_listenfd函数封装这些函数
WEB服务器
- web服务器向客户端提供的内容
- 每条服务器返回的内容都和他管理的某个文件相关联,这些文件都有一个唯一的名字URL
- 客服端使用到端口前的部分,服务器使用端口后的部分
- 默认端口为80
- 端口后不加后缀默认为补全缺失的 ‘/’ 并取出网站的主页
- 静态内容
- 读取服务器上的磁盘文件并返回给客户端
- 例如 http://www.w3.org/Protocols/rfc2616/rfc2616.html
- 动态内容
- 运行一个可执行文件并将输出返回给客户端
- 运行一个可执行文件并将输出返回给客户端
- 每条服务器返回的内容都和他管理的某个文件相关联,这些文件都有一个唯一的名字URL
HTTP事务
- HTTP请求
- 首先要连接服务器和客户端
- 格式:method URI version
- method一般为 GET
- URI为URL端口后面的部分
- version为HTTP版本,一般为HTTP/1.0或HTTP\1.1
- HTTP响应的常见状态码
- 传递动态内容
- ?分割文件名和参数
- 每个参数用 & 隔开
- 举例:
GET /adder?1500&213 HTTP/1.1