服务器
7*24小时提供服务
可永久性访问的地址/域名
利用大量服务器实现可扩展性
客户机
与服务器通信,使用服务器提供的服务
间歇性接入网络
可能使用动态IP地址
不会与其他客户机直接通信
没有永远在线的服务器
任意端系统/节点之间可以直接通讯
节点间歇性接入网络
节点可能改变IP地址
优点:高度可伸缩
缺点:难管理
C/S和P2P的混合
同一主机的进程间通信机制由操作系统提供,而网络中不同主机的进程通信依靠消息交换(操纵系统提供网络编程的API——socket)。发起通信的进程是客户机进程,等待通信请求的进程是服务器进程。
IP地址+端口号
网络应用需遵循应用层协议以允许互操作,公开协议由RFC(Request For Comments)定义,多数P2P文件共享应用使用私有协议。
数据丢失(data loss)/可靠性(reliability)
某些网络应用能够容忍一定的数据丢失:网络电话
某些网络应用要求100%可靠的数据传输:文件传输,telnet
时间(timing)/延迟(delay)
有些应用只有在延迟足够低时才“有效”
网络电话/网络游戏
带宽(bandwidth)
某些应用只有在带宽达到最低要求时才“有效”:网络视频
某些应用能够适应任何带宽——弹性应用:email
……
TCP服务
面向连接: 客户机/服务器进程间需要建立连接
可靠的传输
流量控制: 发送方不会发送速度过快,超过接收方的处理能力
拥塞控制: 当网络负载过重时能够限制发送方的发送速度
不提供时间/ 延迟保障
不提供最小带宽保障
UDP服务
无连接
不可靠的数据传输
不提供:
• 可靠性保障
• 流量控制
• 拥塞控制
• 延迟保障
• 带宽保障
Web由网页组成,网页间可相互链接。网页(Web Page)包含多个对象(objects)(HTML文件、JPEG图片、视频文件、动态脚本等),网页对象使用URL(Uniform Resoure Locator,统一资源定位器 RFC1738)定位。
万维网遵循HTTP协议(HyperText Transfer Protocol,超文本传输协议)。
C/S架构
客户机是浏览器(Browser),请求、接收和展示Web对象
服务器(Web Server)响应客户请求,发送对象。
HTTP版本
HTTP 1.0 RFC 1945
HTTP 1.1 RFC 2068
使用TCP传输服务
服务器在80端口等待客户的请求
浏览器发起到服务器的TCP连接(创建套接字Socket)
服务器接受来自浏览器的TCP连接
浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP消息
关闭TCP连接
无状态(stateless)
服务器不维护任何有关客户端过去所发请求的信息
注:有状态的协议更复杂,需维护状态( 历史信息),如果客户或服务器失效,会产生状态的不一致,解决这种不一致代价高。
非持久性连接(Nonpersistent HTTP)
每个TCP连接最多允许传输一个对象
HTTP 1.0版本使用非持久性连接
持久性连接(Persistent HTTP)
每个TCP连接允许传输多个对象
HTTP 1.1版本默认使用持久性连接
以GET请求为例(GET方式无Entity Body,POST方式有),如下图。
HTTP/1.0提供了GET,POST和HEAD(请Server不要将所请求的对象放入响应消息中)方法。
HTTP/1.1提供了GET, POST, HEAD,PUT(将消息体中的文件上传到URL字段
所指定的路径)和DELETE(删除URL字段所指定的文件)方法。
HTTP协议是无状态的,但很多应用需要服务器掌握客户端的状态,如网上购物,如何实现?Cookie技术。
Cookie技术
某些网站为了辨别用户身份进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
RFC6265
Cookie的组件
HTTP响应消息的cookie头部行
HTTP请求消息的cookie头部行
保存在客户端主机上的cookie文件,由浏览器管理
Web服务器端的后台数据库
Cookie应用
身份认证(登录记住密码)
购物车
推荐
…….
既然Cookie可以识别客户端,就能跟踪每个用户的在本网站上的行为,隐私啊!
怎么保证代理服务器中的版本是最新的?可以利用请求头中的If-modified-since:
确认是否更改,若没更改,原始服务器响应给缓存服务器的消息不含对象(HTTP/1.0 304 Not Modified),若更改了,就返回最新版本的就OK了。
略
DNS(Domain Name System,域名系统) ,分布式层次式数据库,负责把域名翻译成IP地址。域名解析是Internet核心功能,用应用层协议DNS实现。
本地域名解析服务器(当主机进行DNS查询时,查询被发送到本地域名服务器,本地域名服务器代理主机查询)无法解析域名时,访问根域名服务器(全球有13个根域名服务器),根域名服务器如果不知道映射,访问顶级域名服务器(负责com, org, net,edu等顶级域名和国家顶级域名,例如cn, uk, fr等),顶级域名服务器如果也不知道映射,就访问权威域名服务器(组织的域名解析服务器),获得映射并向本地域名服务器返回映射。
只要域名解析服务器获得域名—IP映射,即缓存这一映射,一段时间过后,缓存条目失效(删除),本地域名服务器一般会缓存顶级域名服务器的映射,因此根域名服务器不经常被访问。
DNS里的资源记录(RR, resourcerecords)格式是RR format: (name, value, type, ttl)
Type=A,Name: 主机域名,Value: IP地址
Type=NS,Name: 域(edu.cn),Value: 该域权威域名解析服务器的主机域名
Type=CNAME,Name: 某一真实域名的别名,Value: 真实域名
Type=MX,Value是与name相对应的邮件服务器
略
Berkeley UNIX 操作系统定义了一种 API,称为套接字接口(socket interface),简称套接字(socket)。
微软公司在其操作系统中采用了套接字接口API,形成了一个稍有不同的 API,并称之为 Windows Socket Interface,WINSOCK。
AT&T 为其 UNIX 系统 V 定义了一种 API,简写为 TLI (Transport Layer Interface)。
对外用IP地址+端口号确定一个socket,对内操作系统/进程利用套接字描述符管理socket。
[1] 中国大学MOOC《计算机网络》 李全龙 聂兰顺