进程通信

  • 在同一台主机中:两个进程使用进程间通信IPC(由操作系统定义)通信.

  • 在不同的主机中:进程通过交换报文通信


网络应用程序体系结构

  • 客户机/服务器

  • 对等(P2P)

  • 客户机/服务器与对等(P2P)混合

C/S模式

  • 集中结构,一对多

  • 服务器共享资源,客户机资源不共享

  • 服务器可能负载过重

  • 网络带宽限制

P2P模式

  • 非集中结构,多对多

  • 节点具备客户与服务器双重特性

  • 充分利用终端资源

  • 可扩展性好

因特网运输协议服务

tcp

面向连接: 客户机和服务器之间所需的建立

可靠传输:在发送和接收进程之间

流控制: 发送方不会淹没接收方

拥塞控制: 当网络过载时抑制发送方

并不提供: 定时,最小带宽保证

udp

在发送进程及接收进程之间的不可靠数据传输

不提供:建立连接建立,可靠性,流控,拥塞控制,定时或带宽保证


web和HTTP协议

Web

  • web的应用层协议是HTTP,超文本传输协议

  • Web页面由对象组成,一个基本HTML文件包含多个引用对象:图片,java小程序,视频文件等

  • 每个对象可由URL(Uniform Resource Locator 统一资源定位符)寻址

举例:

http: //114.514.191.810/sennpai/suki
协议 主机名 路径

HTTP

HTTP协议运行在客户与服务器端的应用程序中。

  • 客户机:请求、接收、显示Web对象

  • 服务器:Web服务器响应请求而发送对象

graph LR

C[客户机] --HTTP请求--> S[服务器]

S[服务器] --HTTP响应--> C[客户机]

非持久连接与持久连接:

  • 非持久HTTP

    每个HTTP请求/响应对经过一个单独TCP连接发送

    HTTP/1.0使用非持久

  • 持久HTTP

    多个对象能够经过客户机和服务器之间的单个TCP连接发送

    HTTP/1.1以默认模式使用持久连接

非持久连接

graph TB

A[1.HTTP客户机向HTTP服务器发起tcp连接] --> 

B[2.HTTP服务器接受连接并通知客户机] -->

C[3.HTTP客户机发送HTTP请求报文进TCP连接套接字,向服务机要对象] -->

D[4.HTTP服务器接收请求报文,形成响应报文包含请求对象,并向套接字发送报文] -->

E[5.HTTP服务器关闭TCP连接] -->

F[6.HTTP客户机接收包含html文件的响应报文并解析] -->

G(若发现html文件中又引用了其他对象,则重复上述步骤向服务器要对象)

响应时间估算:

  • 往返时间RTT的定义:从客户机到服务器发送一个小分组并返回所历经的时间.

  • 响应时间

    • 建立tcp请求:RTT*1

    • 发送HTTP请求并得到回应:RTT*1

    • 传输文件时间

    HTTP-响应时间估算.png

    总响应= 2RTT+传输时间

持久连接

  • 在发送响应后,保持TCP连接持续打开

  • 后继HTTP报文通过该连接持续发送

持久连接又可以分为无流水线与有流水线的连接

  • 无流水线的连接

    • 仅当前面的响应已经收到,客户机发出新的请求

    • 对每个引用对象花费一个RTT

    (半自动步枪,每次射击都要扣动扳机(这是什么奇妙的比喻×

  • 有流水线的连接

    • 不必等待响应,请求接连发出

    • 对所有引用对象花费一个RTT(略多)时间

    (全自动步枪,不必松开扳机,可以一直扣住

HTTP报文

分为请求报文响应报文

请求报文

HTTP请求报文.png

  • 通用格式

    • 请求行:方法字段,URL字段,版本字段

    • 首部行:一般多行

    • 空行

    • 实体主体:可为空

一个简单的例子:

POST /user HTTP/1.1         //请求行
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
User-agent: Mozilla/5.0.    //以上是首部行
                            //空行分割header和请求内容 
name=world                  //请求体

方法类型
GET:最常用,请求访问网页,实体主体为空
POST:常用,提交表单同时请求访问网页,如使用搜索引擎,实体主体中为表单输入值
HEAD:少用,测试用,与GET区别在于响应中去掉请求的对象
PUT:很少用,向URL字段中定义的路径,上载在实体主体中文件
DELETE,很少用,删除在URL字段中定义的文件

响应报文

响应报文与请求报文结构类似

  • 通用格式

    • 状态行:版本字段,状态码字段,短语字段

    • 首部行:一般多行

    • 空行

    • 实体主体:可为空

一些响应码与响应短语的例子及含义

  • 200 OK
    请求成功,请求的对象在这个报文后面

  • 301 Moved Permanently
    请求的对象已转移,新的URL在响应报文的Location:首部行中指定

  • 400 Bad Request
    请求报文不为服务器理解

  • 404 Not Found
    请求的文档没有在该服务器上发现

  • 505 HTTP Version Not Supported

Cookie是一种在客户端保持HTTP状态信息的技术。

客户端访问网站时,Web服务器会查看、创建、修改Cookie资料,帮助Web站点保存访问者信息:浏览历史,购物车等。

cookie技术组成

  • cookie识别码(http请求报文,http响应报文)

  • 客户端保留cookie文件

  • 服务器提供后端数据库

cookie工作过程

cookie.png

Web缓存(代理服务器)

  • Web缓存器:保存最近请求过的web对象

  • 浏览器向缓存发送所有HTTP请求

    • 对象在缓存中:缓存返回对象

    • 否则缓存向起始服务器请求对象,然后向客户机返回对象

举例:

没有缓存服务器时

graph LR

LAN(LAN 100Mbps)

LANroute[机构路由器]

A[浏览器A] --> LANroute
B[浏览器B] --> LANroute
C[浏览器C] --> LANroute

WANroute[公网路由器]

LANroute -.访问链路 15Mbps.-> WANroute

WANroute --> a[起始服务器a]
WANroute --> b[起始服务器b]
WANroute --> c[起始服务器c]

假定

  • 平均对象长度 = 1M

  • 来自机构的浏览器的平均请求 = 15个/sec

  • 从机构路由器到任何起始服务器并返回的时延 = 2 sec

LAN端每秒发送15M请求,由于LAN信道宽度为100Mbps,访问链路信道宽度为15Mbps,故

  • 局域网利用率 = 15%

  • 访问链路利用率 = 100%

  • 总时延 = LAN时延 + 访问时延 + 因特网时延 = LAN时延 + 访问链路时延 + 2sec

有缓存服务器时

graph LR

LAN(LAN 100Mbps)

LANroute[机构路由器]

A[浏览器A] --- LANroute
B[浏览器B] --> LANroute
C[浏览器C] --> LANroute
D((缓存服务器)) --> LANroute

WANroute[公网路由器]

LANroute -.访问链路 15Mbps.-> WANroute

WANroute --> a[起始服务器a]
WANroute --> b[起始服务器b]
WANroute --> c[起始服务器c]

假设命中率为0.4

  • 40%请求几乎立即得到满足,没有到达起始服务器的时延
    60%请求由起始服务器满足

  • 访问链路的利用率减少到60%

网络平均时延大大减小

条件GET

HTTP条件Get使用的方法:

客户端向服务器发送一个包询问是否在上一次访问网站的时间后是否更改了页面

  • 如果服务器没有更新,不需要重新传输网页,返回304 Not Modified,客户端使用本地缓存

  • 如果服务器对照客户端给出的时间已经更新了客户端请求的网页,则发送更新了的网页给用户。


文件传输协议:FTP

FTP使用双tcp连接

  • 第一个是控制连接,它一直持续到客户进程与服务器进程之间的会话完成为止。

  • 另一个是数据连接,按需可以随时创建和撤消。每当一个文件传输时,就创建一个数据连接。

控制连接被称为主连接。而数据连接被称为子连接。

graph LR

local[本地主机] --TCP控制连接 默认端口21--> remote[远程主机]

remote[远程主机] --TCP数据连接 默认端口20--> local[本地主机]

通过操作命令实现远程交互式访问。


电子邮件

电子邮件系统组成:

  • 用户代理

  • 邮件服务器

  • 简单邮件传输协议: SMTP(Simple Mail Transfer Protocol)

graph TD

MSA[邮件服务器A]
MSB[邮件服务器B]
MSC[邮件服务器C]

MSA --SMTP--> MSB
MSB --SMTP---> MSC
MSC --SMTP--> MSA

A[用户代理] -.-> MSA

B[用户代理] -.-> MSB
C[用户代理] -.-> MSB

MSC <-.- D[用户代理]
MSC <-.- E[用户代理]
MSC <-.- F[用户代理]

Alice向Bob写信

  1. Alice使用UA写作报文并向 bob@someschool.edu发送
  2. Alice的UA向其邮件服务器发送报文;报文放置在报文队列
  3. SMTP的客户机侧打开与Bob的邮件服务器的TCP连接
  4. SMTP通过TCP连接发送Alice的报文
  5. Bob的邮件服务器将该报文放入Bob的邮箱
  6. Bob调用其用户代理来读报文
graph LR

Alice === A[用户代理] --> B[邮件服务器] -.-> C[邮件服务器] --> D[用户代理] === Bob

电子邮件协议

  • SMTP(简单邮件传输协议):最常用的电子邮件传输协议

  • POP3(邮局协议):最常用的电子邮件接收协议

  • IMAP4(网络邮局访问协议):POP3的替代协议,提供邮件处理新功能

另:HTTP协议也用于电子邮件,网页访问邮箱

STMP

  • SMTP是一个相对简单的基于文本的协议

    • 报文必须以7比特ASCII格式

    • 二进值文件可通过MIME编码后再传

  • SMTP服务器端使用端口号25

  • 采用命令/响应交互

    • 命令:HELO,MAIL FROM, RCPT TO, DATA, QUIT

    • 响应:状态码及短语

  • 传输的三个阶段

    握手,传输,关闭

邮件报文格式

  • 首部

    头部由多个头部行构成,列出最常见的三个

    • To:发给谁

    • From:谁发送的

    • Subject:邮件的主题

  • 空行

  • 信体

MIME

多用途因特网邮件扩展不仅可以发送非英语国家字符,还可以发送其它类型的内容,例如声音、图像、图片、视频等,大大扩展了电子邮件的用途。

MIME通过添加额外的信头头部声明来实现内容的扩展。以下为一个例子:

MIME头部.png

graph LR

用户1 --非ASCII码--- A[MIME] --七位ASCII码--- B[SMTP] --七位ASCII码--- C[SMTP] --七位ASCII码--- D[MIME] --非ASCII码--- 用户2

邮件访问协议

邮件访问协议用来从邮件服务器上读取别人发来的邮件

graph LR

用户代理1 --SMTP--- A[邮件服务器] --SMTP--- D[邮件服务器] --邮件访问协议--- 用户代理2
  • POP3: 邮局协议 ( Post Office Protocol )

    授权 (代理 <–>服务器) 并下载

  • IMAP4: 因特网邮件访问协议

    • 更多功能

    • 操作存储在服务器上的报文

基于Web的电子邮件

  • 用户代理是浏览器

  • 使用 HTTP而不是SMTP发送到邮件服务器

  • 使用SMTP发送邮件到目的邮件服务器


域名系统DNS

DNS: Domain Name System域名系统

包括DNS服务器和DNS协议

DNS完成主机名到IP地址的解析

  • 迭代查询

    • 客户端向本地DNS服务器发起查询:请求gaia.cs.umass.edu的IP
    • 本地DNS向根DNS查询:.edu顶级域DNS服务器地址
    • 根DNS回应.edu顶级域DNS服务器地址
    • 本地DNS向.edu顶级域DNS查询.umass.edu的权威DNS服务器地址

    DNS迭代查询.png

  • 递归查询

    • 客户端向本地DNS服务器发起查询:请求gaia.cs.umass.edu的IP
    • 本地DNS向根DNS查询:请求gaia.cs.umass.edu的IP
    • 根DNS向.edu顶级域DNS服务器查询:请求gaia.cs.umass.edu的IP
    • .edu顶级域DNS向.umass.edu的权威DNS查询:

    DNS递归查询.png