client-server architecture
- 服务器:提供计算服务的设备
1.1. 永久提供服务
1.2. 永久性访问地址/域名 - 客户机:请求计算服务的主机
2.1. 与服务器通信,使用服务器提供的服务
2.2. 可能使用动态IP地址
2.3. 不与其他客户机直接通信
P2P模型
- 不存在永远在线的服务器
- 每个主机既可以提供服务,也可以请求服务
- 任意端系统/节点之间可以直接通讯
- 节点间歇性接入网络
- 节点可能改变IP地址
- 可扩展性好,网络中有大量主机涌入,P2P能够应对
- 网络健壮性好,一台主机退出或崩溃,网络不会崩溃
DNS系统
根据IP地址访问网站难以记忆,因此出现域名,DNS系统来实现域名和IP地址之间的转换
域名:标号不能超过63个字符,不区分大小写
www.baidu.com
com:顶级域名
baidu:二级域名
www:三级域名
.:根
顶级域名为arpa,表示反向解析,即将IP地址解析成域名
域名服务器
- 根域名服务器:知道所有顶级域名服务器域名对应的的IP地址
- 顶级域名服务器:管理该顶级域名服务器注册的所有二级域名
- 权限域名服务器:负责一个区的域名服务器
- 本地域名服务器
当一个主机发出DNS查询请求时,这个查询请求就发给本地域名服务器。如果在本地DNS缓存中存在域名对应的IP地址,就向主机返回IP地址
否则,本地域名服务器向根域名服务器发起查询请求,有两种查询方式
- 递归查询:根域名服务器向下一级域名服务器查询,下一级域名服务器又向下下级查询,直到查询成功,再一步步返回给上一级域名服务器,直到根域名服务器,根域名服务器返回给本地域名服务器
- 迭代查询:根域名服务器告诉本地域名服务器它应该去查询的顶级域名服务器,然后本地域名服务器查询顶级域名服务器,就这样,其他域名服务器中不存在要查找的域名的具体IP时,就告诉本地域名服务区应该查询的下一级域名服务器IP,本地服务器就去查询下一级域名服务器,直到查询成功
高速缓存
文件传送协议FTP
提供不同种类主机系统之间的文件传输能力
基于客户/服务器,用户通过一个客户机程序连接至在远程计算机上运行的服务器程序
FTP工作原理
- 登陆:通过ftp地址、用户名和密码,也可以匿名登陆
- 使用TCP实现可靠传输
- 控制连接进程始终保持,数据连接进程保持一段时间
电子邮箱系统
组成结构
- 用户代理:用户和电子邮件的接口,电子邮件的客户端软件,功能有撰写、显示、处理(发送、接收邮件给邮件服务器)、通信(将邮件发给邮件服务器)
- 邮件服务器:发送和接收邮件(给其他邮件服务器),向发件人报告邮件传送结果
- 协议:SMTP(发送邮件),POP3(读取邮件)
- 采用TCP连接
简单邮件传送协议SMTP
规定了在两个相互通信的SMTP进程之间应该如何交换信息
负责发送邮件的SMTP进程是SMTP客户,负责接收邮件的进程是SMTP服务器
三个阶段:连接建立、邮件发送、连接释放
缺点:不能传送可执行文件或二进制对象,只能传送7位ascii码不能传送非英语国家文字,会拒绝超过一定长度的邮件
MIME:通用因特网邮件扩充,使电子邮件系统可以支持多种邮件类型的传输
邮局协议POP3
接受端邮件服务器是服务器,用户代理是客户
网际报文存取协议IMAP
客户程序打开IMAP服务器的邮箱时,用户可以看到邮箱的首部,若客户需要打开某个邮件,才上传到用户的计算机
基于万维网的电子邮件
用户代理发送到邮件服务器使用的是HTTP协议
万维网
WWW:大规模的联机式的信息储藏所/资料空间,是无数个网络站点和网页的集合
同意资源定位符url——资源(文字、视频、音频……)
url一般形式:<协议>://<主机>:<端口>/<路径>
url不区分大小写,用户通过点击url获取资源,这些资源通过超文本传输协议HTTP传送给使用者
以客户/服务器方式工作,用户使用的浏览器是万维网客户程序,万维网文档所驻留的主机运行服务器程序
HTML:超文本标记语言
超文本传输协议HTTP
过程
- 浏览器分析URL
- 浏览器向DNS请求解析IP地址
- DNS解析出IP地址
- 浏览器与服务器建立TCP连接
- 浏览器发出HTTP请求
- 服务器解析请求,定位请求资源,返回HTTP响应
- 释放TCP连接
- 浏览器解析显示HTML内容(可以只下载文本部分)
特点
- 无状态。同一客户两次访问同一服务器界面,服务器的响应相同。但是在实际工作中,一些万维网站点希望能够识别用户,此时出现了cookie。cookie是存储在用户主机中的文本文件,记录一段时间内某用户的访问记录,服务器可以根据cookie为客户提供个性化服务
- HTTP采用TCP作为传输层协议,但HTTP本身是无连接的,通信双方在交换HTTP报文之前不需要先建立HTTP连接
- 支持客户/服务端模式
连接方式
- 短连接,服务器响应后主动关闭连接
- 长连接,服务器响应后连接会保持一段时间,在这段时间内客户端可以再发起HTTP请求
结构
- 请求结构
请求行、请求头部、空行、请求正文
请求方法、URL、协议版本、头部字段名和值、请求正文(只在POST用到) - 响应结构
响应行、响应头部、空行、响应正文
协议版本、状态码、状态码描述、头部字段名和值、响应正文
HTTP状态码
- 1XX:请求已接收,继续处理
- 2XX:请求已被成功接收、理解、接受
- 3XX:要完成请求需要进一步的操作
- 4XX:客户端错误,请求有语法错误或请求无法实现
- 5XX:服务器端错误,服务器端未能实现合法的请求
GET和POST请求的区别
- HTTP报文层面
GET将请求信息放在URL中,POST放在请求正文,需要解析报文获得请求信息
GET的请求信息有长度限制,POST没有长度限制 - 数据库层面
GET符合幂等性和安全性,POST不符合
幂等性:对数据库的一次操作和多次操作获得的结果是一致的
安全性:对数据库的操作不会改变数据库的数据
GET是做查询操作
POST会往数据库中提交数据,会改变数据库数据
POST是作用在上一级URL,每次请求都会增加新资源,所以每次获得的结果可能不一样 - 其他层面
GET可以被缓存,POST不行
cookie和session的区别
- cookie
1.1. 由服务器发送给客户端的特殊信息,以文本形式存放在客户端
1.2. 客户端每次向服务器发送请求,都会携带上这些信息,这些信息在报文的响应头
1.3. 服务器接收后,会解析cookie生成与客户端相对应的内容 - session
2.1. 服务端的机制,在服务器上保存的信息
2.2. 解析客户端请求,检查请求中是否包含session标识,如果有,就按照已有的session id检索session使用,否则,为此客户端创一个新session,并生成一个相关的session id - 区别
3.1. cookie存放在客户浏览器,session存放在服务器
3.2. session比cookie安全
3.3. 考虑减轻服务器负担,使用cookie
HTTP和HTTPS
- HTTPS需要申请CA证书,HTTP不要,HTTPS成本高
- HTTPS密文传输,HTTP明文传输,HTTPS传输数据更安全
- 连接方式不同,HTTPS三次握手后还要握手确定加密方式
- 使用端口不同,HTTPS使用443端口,HTTP默认80端口
- HTTPS是由SSL加HTTP协议构建的,SSL是有状态的,因此HTTPS有状态
HTTPS数据传输流程
SSL:安全套接层,采用身份验证和数据加密保证网络通信的安全和数据的完整性
- 浏览器将支持的加密算法信息发送给服务器
- 服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器
- 浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器
- 服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器
- 浏览器解密响应消息,并对消息进行验真,之后进行加密交换数据
加密的方式:
- 对称加密:加密和解密使用同一个密钥,效率高
- 非对称加密:加密和解密分别使用公钥和私钥,公钥算法是公开的,效率低,安全性高,加密长度有限
- 哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆
- 数字签名:证明某个消息或者文件是某人发出/认同的
socket编程
服务器先通过socket()创建socket,然后用bind()绑定端口号,紧接着通过listen()监听端口号的请求,随时准备接收客户端的连接请求
客户端创建socket,然后通过connect()、服务器的IP地址和端口号尝试连接服务器的socket
服务器用accept()等待客户进程返回连接信息
连接成功后,客户端可以向socket写入信息,服务器能读取信息
最后发送完数据,客户端和服务器通过close()关闭连接