进程通信
进行通信实际上是进程,本书关注运行在不同端系统上的进程通信,他们通过跨越计算机网络交换报文而相互通信。
客户和服务器进程
在每队通信进程中,我们会将这两个进程之一标记为客户,另一个标记为服务器。
- 发起通信的进程被标记为客户,会话开始时候等待联系的进程是服务器。
进程与计算机网络之间的接口
进程通过一个称为套接字(socket)的软件接口向网络发送报文和从网络接收报文。
- 当一个进程想向位于另外一台主机上的另外一个进程发送报文的时候,它会把报文推出该门(socket),该发送进程假定该门到另外一侧之间有运输的基础设施。一旦该报文抵达目的主机,他会通过接收进程的套接字传递,然后接收进程对该报文进行处理。
套接字实际上是网络和应用程序之间的可编程接口,
进程寻址
接收进程需要一个地址。为了标志该接收进程,需要定义两种信息:1.主机的地址。2.定义在目的主机中的接收进程的标识符。
主机由IP地址标识,是一个32bit的量。同时发送进程还要指定接收进程(接收socket),port number就用于这个目的。
运输服务
运输层协议负责使该报文进入接收进程的套接字。
一个运输层协议能够为调用它的应用程序提供:
- 可靠的数据运输
- 吞吐量
- 定时和安全性
Internet 提供的运输服务
TCP服务
- 面向连接的服务
TCP 让客户和服务器互相交换运输层控制信息,这个所谓握手过程提示客户和服务器,使他们为大量分组的到来做好准备。握手之后,一个TCP链接就在两个进程的套接字之间建立。
- 可靠的数据传送服务
应用程序一端将字节流传进套接字的时候,能够依靠TCP将相同的字节流交付给接收方的套接字。而没有字节的丢失和冗余。
HTTP
超文本传输协议由两个程序实现,一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换HTTP报文进行会话,HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式。
Web
每个URL地址由两个部分组成。存放对象的服务器主机名和对象的路径名。
https://github.com/Hananel-Hazan/bindsnet
github.com 就是主机名 后面的是路径名
web 浏览器实现了HTTP的客户端,所以在web环境中交替使用浏览器和客户两个术语。
web服务器实现了HTTP的服务器端,它用于存储web对象。
HTTP定义了web客户向web服务器请求web页面的方式,以及服务器向客户传送web页面的方式。HTTP使用TCP作为其支撑运输协议,HTTP客户首先发起一个与服务器的TCP连接,一旦链接建立,浏览器和服务器进程就可以通过套接字接口访问TCP。
同时TCP也是一个无状态协议:服务器向客户发送被请求的文件,但是不存储任何关于该客户的状态信息。
非持续链接
每个请求和响应对是经过一个单独的TCP连接发送的。
持续链接
所有的请求及其响应都经过相同的TCP连接发送
TCP的三次握手
我们给出往返时间的定义。即一个短分组从客户到服务器然后再返回客户所花费的时间。
当浏览器在它和web服务器发起一个TCP链接。
第一次握手:客户向服务器发送一个TCP报文段。
第二次握手:然后服务器用一个小TCP报文段做出确认和响应。
第三次握手:客户的确认阶段,向该TCP链接发送一个HTTP请求报文,一旦报文到达服务器,服务器就在该TCP链接上发送HTML文件。该HTTP请求/响应用去了另外一个RTT。
因此总响应时间是两个RTT加上服务器传输HTML文件的时间。
用户与服务器的交互:cookie
cookie用于标识一个用户。用户首次访问一个站点的时候,可能需要提供一个用户标识,在后继会话中,浏览器向服务器提供一个cookie首部,从而向该服务器标识了用户。
Web缓存(proxy cache)
也叫代理服务器,能够代表初始web服务器来满足HTTP请求的网络实体。web缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。
用户的所有HTTP请求首先会指向web缓存器,例如要访问http://www.someschool.edu/campus.gif,会发生如下情况:
浏览器建立一个到web服务器的TCP链接,并向Web缓存器的对象发送一个HTTP请求
web缓存器进行检查,查看本地是否存储了该对象副本,如果有,web缓存器就向客户浏览器用HTTP响应报文返回该对象。
如果web缓存器没有对象,就打开一个与该对象的初始服务器的TCP链接,web缓存器则在这个缓存器到服务器的TCP链接上发送一个对该对象的HTTP请求。在收到该请求后,初始服务器向该web缓存器发送具有该对象的HTTP响应。
当web缓存器接收到该对象的时候,会在本地存储空间存储一个副本,并且向客户的浏览器用HTTP响应报文发送该副本。
当它接收浏览器的请求并发挥响应的时候,他是服务器,当他向初始服务器发出请求并接收响应的时候,他是一个客户。
条件GET方法
用来保证缓存器所存储的对象是最新的。
如果请求报文使用get方法而且请求报文中包含一个“If modifies since”首部行,那么HTTP请求报文就是一个条件GET请求报文。
DNS:因特网的目录服务
主机的标识方法:可以用主机名(hostname)或者(IP address)
而(DOMAIN NAME SYSTEM)就是用来进行主机名到IP地址转换的目录服务。
DNS 是什么
- DNS 是一个有分层的DNS服务器实现的分布式数据库.
- 也可以理解为一个使得主机能查询分布式数据库的应用层协议。
- DNS 服务器通常是运行在BIND软件的UNIX机器。DNS协议运行在UDP之上,使用53号端口。
工作流程
同一台用户主机上运行着DNS应用的客户端
浏览器从URL中抽取主机名,并把这台主机名传给DNS应用的客户端。
DNS客户向DNS服务器发送一个包含主机名的请求
DNS客户最终收到一份回答报文,含有对应于该主机名的IP地址
浏览器接收到来自DNS的该IP地址,能够向位于该IP地
DNS 功能
1.进行主机名到IP地址的转换。
2.主机别名(host aliasing)
为复杂主机名的主机提供简单的别名
3.邮件服务器别名。应用程序因此可以调用DNS,对提供邮件服务器别名进行解析,以获得该主机的规范主机名以及IP地址。
4.负载分配。
例如繁忙的站点会分布在多台机器上,每台服务器均运行在不同的端系统上,每个都有不同的IP地址,因此客户发出DNS请求的时候,服务器用IP地址的整个集合来进行响应。
分布式,层次的数据库
例子: 一个客户要决定www.amazon.com 的IP地址,先和根服务器之一联系,它将返回顶级域名com的TLD服务器的IP地址。该客户与这些TLD服务器之一联系,服务器将返回权威服务器的IP地址。
根DNS服务器
全球有13个,用于返回TLD服务器的IP地址顶级域(DNS)服务器(TLD)
负责顶级域名如 com、org、net、edu 和 gov,以及所有国家的顶级域名如 uk、fr 等。TLD 服务器返回权威服务器的 IP 地址
- 权威DNS服务器
管理属于同一机构同一域名但是的不同IP地址的不同主机。
- 本地DNS服务器
起着代理的作用。每个Internet service provider (ISP)都有一台本地的DNS服务器,本地DNS服务器起着代理的作用,本地主机把DNS请求发向本地DNS服务器,本地DNS服务器把该请求转发到DNS服务器层次结构当中。
DNS的解析流程
浏览器访问域名的前置步骤:
1.先检查缓存中是否有该域名对应的解析过的IP地址,命中则解析过程结束,否则进行步骤2
2.检查操作系统缓存中是否有域名对应的DNS解析结果,命中则解析过程结束。
DNS在服务器之间的解析步骤
下图例子假设主机 cs.ustc.edu 想知道主机 cs.csu.edu 的 IP 地址,假设 USTC 大学的本地 DNS 服务器为 dns.ustc.edu,同时假设 CSU 大学的权威 DNS 服务器为 dns.csu.edu。
1.主机向本地DNS服务器dns.ustc.edu发送请求报文,报文中含有被转换的主机名cs.csu.edu
2.本地DNS服务器把查询报文转发给根DNS服务器,根服务器注意到edu
前缀,于是把负责edu的TLD的IP地址列表返回给本地DNS服务器
3.本地DNS服务器再次向TLD服务器之一发送DNS请求报文,TLD服务器注意到csu.edu的前缀,于是把权威服务器dns.csu.edu的IP地址返回给DNS服务器
4.本地DNS服务器向权威服务器dns.csu.edu 发送请求报文,权威服务器用cs.csu.edu的IP地址进行响应。
5.最后本地DNS服务器把查询得到的IP地址返回给主机cs.ustc.edu
DNS缓存
本地DNS服务器在完成一次查询之后会把得到的主机名到IP地址的映射缓存到本地,加快DNS的解析速度。解析大多是在本地服务器完成的
DNS记录
1 | (Name,Value,Type,TTL) |
1.Type=A,则Name是主机名,Value是主机对应的Ip地址
2.Type=NS,Name是域名,比如csu.edu,Value是知道如何获得域中主机IP地址的权威DNS服务器的主机名。
3.TYpe=CNAME,VALUE是别名为Name的主机对应的规范主机名
如果服务器不是用于某主机名的权威服务器,那么该服务器将包含一条类型 NS 记录,该记录对应于包含主机名的域;它还将包括一条类型 A 记录,该记录提供了在 NS 记录的 Value 字段中的 DNS 服务器的 IP 地址。举例来说,假设一台 edu TLD 服务器不是主机 gaia.cs.umass.edu 的权威 DNS 服务器,则该服务器将包含一条包括主机 cs.umass.edu 的域记录,如(umass.edu,dns.umass.edu,NS);该 edu TLD 服务器还将包含一条类型 A 记录,如(dns.umass.edu,128.119.40.111,A),该记录将名字 dns.umass.edu 映射为一个 IP 地址。
注册一个全新的域名最少要向对应的 TLD 注入 A 型与 NS 型两种记录。
DNS 报文
DNS 报文格式前 12 个字节是首部区域,其中有几个字段。第一个字段(标识符)是一个 16 比特的数,用于标识该查询。这个标识符会被复制到对查询的回答报文中,以便让客户用它来匹配发送的请求和接收到的回答。标志字段中含有若干标志。1 比特的“查询/回答”标志位指出报文是查询报文(0)还是回答报文(1)。当某 DNS 服务器是所请求名字的权威 DNS 服务器时,1 比特的“权威的”标志位被置在回答报文中。如果客户(主机或者DNS 服务器)在该 DNS 服务器没有某记录时希望它执行递归查询,将设置 1 比特的“希望递归”标志位。如果该 DNS 服务器支持递归查询,在它的回答报文中会对 1 比特的“递归可用”标志位置位。在该首部中,还有 4 个有关数量的字段,这些字段指出了在首部后的 4 类数据区域出现的数量。
问题区域包含着正在进行的查询信息。该区域包括:①名字字段,指出正在被查询的主机名字;②类型字段,它指出有关该名字的正被询问的问题类型,例如主机地址是与一个名字相关联(类型 A)还是与某个名字的邮件服务器相关联(类型 MX)。
在来自 DNS 服务器的回答中,回答区域包含了对最初请求的名字的资源记录。前面讲过每个资源记录中有 Type(如 A、NS、CNAME 和 MX)字段、Value 字段和 TTL 字段。在回答报文的回答区域中可以包含多条 RR,因此一个主机名能够有多个 IP 地址(例如,就像本节前面讨论的冗余 Web 服务器)。
权威区域包含了其他权威服务器的记录。
附加区域包含了其他有帮助的记录。例如,对于一个 MX 请求的回答报文的回答区域包含了一条资源记录,该记录提供了邮件服务器的规范主机名。该附加区域包含一个类型 A 记录,该记录提供了用于该邮件服务器的规范主机名的 IP 地址。
HTTP协议
定义了Web客户机如何向Web服务器请求Web页面以及Web服务器如何将Web页面传递给Web客户机
http报文格式两种:
1.客户端:浏览器请求Web对象(request)报文
2.服务器:Web服务器对请求进行响应,发送包含该对象的报文
http使用TCP作为底层服务,客户端发起一个与服务器的TCP链接,同时http是无状态的
非持久性链接&持久性链接
非持久性链接:每个请求与响应对是一个经单独的TCP连接发送
其中每个TCP链接只传输一个对象,只传输一个请求报文和一个响应报文。
每个TCP链接在服务器返回对象后会关闭,即该链接不为其他对象而持续下来。
持久性链接:所有请求、响应对经相同的TCP连接发送
请求一个html文件所需的时间
往返时间RRT:
分组在客户机与服务器往返的时间
响应时间:
total time = 2*RRT + 文件传输时间
非持续链接的缺点:
为每个请求对象建立和维护一个全新的连接。
取对象的时候需要两个RTTs,每个TCP链接都要客户机和服务器分配TCP的缓冲区和保持TCP变量。
持久性链接
服务器在发送response之后,客户机与服务器之间的后续请求可以使用相同的链接。
有非流水线(客户机只能在前一个响应接收到之后才能发出新的请求)
和流水线(客户机遇到引用就会产生一个请求)方式
提交表单数据
用户所请求的Web页面的内容依赖于用户在表单字段中输入的内容。
Post方法
输入的内容将包含在http请求报文的实体主体中。
URL方法
使用GET方法
表单字段中的输入的内容放在URL字段中
put方法 把请求报文的实体主体的对象上传到指定Web服务器的指定的路径。
Cookie
1.HTTP response报文,set-cookie首部行
2.端系统中保留cookie一个文件,由浏览器管理
3.HTTP request报文: cookie首部行
4.Web站点的后端数据库
proxy server
ftp 文件传输协议
实现本地和远程文件系统上的移动文件
文件传输的时候,FTP客户和服务器之间要建立两个TCP链接。
控制链接
1.链接是持久性的。
2.控制信息的带外控制
3.FTP客户端发起控制连接
数据连接
1.数据连接用于传输文件
2.非持久性链接
3.由FTP服务器发起数据链接(PORT模式)
4.客户机发起(PASV模式)
PORT模式
PORT模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端某一个大于1024的端口。
PASV模式
数据传输通道的建立是由FTP客户端发起的,他使用一个大于1024的端口链接服务器的1024以上的某一个端口。
ftp维持状态(state)
在整个会话期间,保留用户的状态信息
电子邮件
四个重要组件:
1.用户代理
撰写完邮件,用户代理将向其邮件服务器发送邮件,并且该邮件被放在邮件服务器的发送队列中
2.邮件服务器
报文队列:包含目前不能投递的邮件报文
邮箱:每个接收方在邮件服务器都有一个邮箱,邮箱管理和维护发给用户的报文
3.简单邮件传输协议
TCP
每个邮件服务器既有SMTP客户端运行,又有SMTP服务器端运行。发送邮件的时候,就表现为SMTP客户端,接收邮件的时候,表现为SMTP服务器
直接传输 不使用中间服务器来发送邮件
4.邮件访问协议
SMTP协议传输过程
1.首先客户机在25端口建立一个到SMTP服务器的TCP链接
2.传输的三个阶段:
1.握手
2.报文传输
3.结束
smtp与http的异同点
相同点
1.smtp和持久的http使用持续链接来传输文件
从web服务器向web浏览器
从一个邮件服务器向另外一个邮件服务器
2.都使用ASCII命令/响应交互
smtp与http不同点
1.pull协议和push协议
http:pull(拉协议)
使用浏览器从web服务器拉取信息,TCP是想要获取文件一方首先发起的。
email:push(协议)
发送邮件的服务器把文件推向接收邮件服务器,TCP是发送文件一方首先发起的。
2.smtp要求报文全部使用7-bit ASCII 码
如果报文包含非7-bitASCII码或者如图像的二进制数据,则通常使用base-64来进行编码
3.处理一个既包含文本也包含图形的其他多媒体类型
http:每个对象封装在各自的响应报文中。
smtp: 多个对象在一个多分部的报文中传送