网络编程 csapp

客户端 服务器 是进程

网络 IO设备 数据源与数据接收方

数据 适配器 IO 内存总线 内存

协议:一致性

命名

传送数据(打包)

语义抽象,封装接口:套接字

IP:IP地址 区别主机

UDP TCP :端口号区别进程

DNS域名系统

域名:IP地址

localhost:127.0.0.1

通信:在连接上发送接收 字节流

对进程而言,连接是 点对点,全双工的

套接字:连接的端点

地址:端口

客户端:端口由内核自动分配,临时端口

服务器:知名端口

套接字对:确定一个连接(双向)

套接字接口:一组函数

+Unix IO

=网络应用

linux内核角度

套接字是通信端点,有相应描述符的打开文件

connect,bind,accept函数要求参数:指针:指向套接字地址结构

socket函数创建套接字描述符

返回的clientfd描述符是部分打开的,不能读写

传参:地址,协议类型?

connect函数建立连接

成功后描述符可以读写

bind,listen,accept

服务器函数,用于连接客户端

客户端:发起请求的主动实体

服务器端:等待请求的被动实体

内核默认socket创建主动实体(客户端)

listen指明为被动(服务器)

将套接字从主动套接字转化为监听套接字(一次)

accept等待客户端请求

返回已连接套接字(多次)

getaddrinfo

getnameinfo

open_clientfd

open_listenfd

web服务器:HTTP协议

web内容:MINE类型的字节序列

提供内容的方式:

取磁盘文件:静态

运行可执行文件:动态

URL:通用资源定位符

文件名?参数&参数

客户端:前缀访问服务器

服务器:后缀定位文件

HTTP请求:

请求行

请求报头,结束标记(空行)

请求行:

method URI  vers

URI:URL后缀

请求报头:额外信息

header-name:header-data

HTTP响应

响应行 

version status-code status-message

响应报头

响应主体

CGI:环境变量

客户端参数

CHI程序:标准输出重定向到套接字

当文件映射到内存,不再需要其描述符了

原文地址:https://www.cnblogs.com/qmcj/p/9163434.html