获取中...

-

Just a minute...

《计算机网络自顶向下方法》第二章读书笔记

应用层协议原理

网络应用程序体系结构

应用体系结构 由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。在选择应用程序结构体系时,应用程序研发者很可能利用现代网络应用程序中所使用的两种主流体系结构之一,客户-服务器体系结构对等(P2P)体系结构

客户-服务器体系结构(CS):

1.有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求。

2.特点的一对多,一台服务器对应多个客户机

3.客户之间不能直接通信,需要经过服务器

4.服务器是处理所有逻辑的中心,具有固定的ip地址,客户总能通过向该服务器的IP地址发送分组来与其联系

5.基础设施密集。虽然客户机/服务器体系结构的特征是“一对多”,但是服务器却并不总是一台,因为有的时候要处理海量的客户机的请求, 一台服务器很快就会不堪重负,所以这个时候常用服务器集群技术(server clustering)创建强大的虚拟服务器。所以此时这里“一对多”的一要理解为一组服务器组成的“一”个整体的意思

6.应用:WEB,FTP,电子邮件,Telnet

P2P体系结构:

1.对位于数据中心的专用服务器有最小(或者没有)依赖,应用程序在间断的主机对之间使用直接通信,对于这些主机称为对等方

2.特点:客户机间的直接通信使得P2P有了强大的自扩展性
(self-calability),比如下载文件时接收到文件的主机又可以直接把文件上载给其他的主机,因此对基础设施服务器依赖较小,并且可上载该文件的主机的数量是指数递增的,系统的服务能力只会越来越强。

3.应用:文件分发,因特网电话,文件搜索

4.任意的端系统直接通信

5.对等方间歇地连接,改变IP地址

6.P2P应用由于高度非集中式结构,面临安全性,性能和可靠性的挑战

区别:

应用程序体系结构(P2P, 客户-服务器)来自于应用设计者设定下更加宽泛的结构,而网络体系结构注重于通信进程的结构组织

进程通信

进行通信的实际是进程而不是程序,一个进程可以认为是运行在端系统中的一个程序。两个不同端系统上的进程,可以通过跨越计算机网络交换报文而相互通信。

客户和服务器进程:

1.网络应用程序由成对的进程组成,这些进程通过网络相互发送报文

2.两个进程一个标识为客户,一个标识为服务器

3.在一对进程之间的通信绘画会话场景中,发起通信的进程被标识为客户,回话开始时等待联系的进程时服务器

进程与计算机网络中的接口:

1.进程通过套接字的软件接口向网络发送和接收报文

2.套接字时同一台主机内应用层和运输层之间的接口,套接字是建立网络程序的可编程接口,因此套接字称为应用程序和网络之间的应用程序编程接口(api)

进程寻址:

一台主机的进程向另一台主机的进程发送分组,接收进程需要一个地址。为了标识该进程,需要定义两种信息:

主机的地址:用IP地址标识;

定义在目标主机中的接收进程的标识符:用目的地端口号标识。

可供应用程序使用的运输服务

1.可靠数据传输。容忍丢失的应用。

2.吞吐量:带宽敏感应用。弹性应用。

3.定时

4.安全性

因特网提供的运输服务

因特网为应用程序提供了两个运输服务类型UDP和TCP

TCP服务:

面向连接服务: 在应用层数据报文流动之前,TCP让客户和服务器互相交换运输层控制信息,握手阶段后,TCP连接就在两个进程的套接字之间建立了

可靠的信息传送服务: 通信进程能够依靠TCP,无差错、按适当顺序交付所有发送的数据

拥塞控制机制: 发送方和接收方之间的网络出现拥塞时,TCP 的拥塞控制机制会抑制发送进程。 TCP 拥塞控制机制也试图限制每个 TCP 连接,使他们达到公平共享网络带宽的目的。 这种服务不一定为通信进程带来直接好处,但是能为因特网带来整体好处。

安全套接字层(SSL): 用SSL加强后的TCP不仅能够做TCP所做的一切,而且提供了关键的进程到进程的安全性服务。

UDP服务:

1.UDP 是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。

2.UDP 是无连接的,因此在两个进程通信之前无握手。

3.UDP 协议提供一种不可靠数据传送服务,也就是说,当进程将一个报文发送

4.UDP 套接字时,UDP并不保证该报文到达接收进程。不仅如此,到达接收进程的报文也可能是乱序到达的。

5.UDP 没有包括拥塞控制机制,所以 UDP 的发送端可以用它选定的任何速率向其下层(网络层)注入数据

6.不抑制发送速率,实时应用通常选择UDP

因特网运输协议不提供的服务:

1.TCP 能提供可靠的数据传输服务,也能通过 SSL 来加强以提供安全服务。

2.今天的因特网通常能够为时间敏感应用提供满意的服务,但不能提供任何定时或带宽保证。

TCP和UDP的应用:

应用层协议

1.应用层协议定义了运行在不同端系统上的进程如何相互传递报文。

2.交换报文的类型,例如请求报文和响应报文。

3.各种报文类型的语法,如报文中各个字段及这些字段是如何描述的。

4.字段的语义,即这些字段中包含的信息的含义。

5.一个进程何时以及如何发送报文,对报文进行响应的规划。

WEB和HTTP

HTTP概况

1.web的应用层协议是超文本传输协议,它是web的核心

2.http由两个程序实现:客户程序和服务器程序

3.web页面是由对象组成的,一个对象只有一个文件,多数web页面含有一个
html基本文件以及几个引用对象

4.html基本文件通过对象的URL的地址引用页面中的其他对象,URL由两部分组成:存放对象的主机名和路径名

5.web浏览器实现了http的客户端,web服务器实现了http的服务器端。

6.http定义了web客户向web服务器请求web页面的方式,以及服务器向客户传送web页面的方式

7.服务器向客户发送被请求的文件,而不储存任何关于客户的状态信息,所以
http是无状态协议

非持续连接和持续连接

非持续连接的HTTP:

每个请求/响应是经过一个单独的TCP连接发送。

每个TCP连接只传输一个请求报文和一个响应报文。因此一次请求Web页面往往要产生多个TCP连接。

缺点:
必须为每个请求的对象建立和维护一个全新的连接;每个对象要经受两倍RTT的交付时延,一个RTT用于创建TCP,一个传输。总响应时间是两个RTT加上服务器传输HTML文件的时间。

持续连接的HTTP:

所有的请求以及响应经相同的TCP连接发送。

1.在采用持续连接的情况下,服务器再发送响应后保持该 TCP 连接打开。再相同的客户与服务器之间的后续请求和响应报文能够通过相同的连接进行传送。

2.一般来说,如果一条连接经过一定的时间间隔(一个可配置的时间间隔)仍未被使用,HTTP 服务器就关闭该连接。

3.HTTP 的默认模式是使用带流水线的持续连接。

http报文格式

http请求报文:

1
2
3
4
5
GET /somedir/page.html HTTP/1.1      //请求行
Host: www.somechool.edu //指明了对象所在的主机
Connection: close //要求服务器发送完请求的对象后就关闭该连接
User-agent: Mozilla/5.0 //用来指明用户代理,即向服务器发送请求的浏览器的类型
Accept-language: fr //指明了用户想要得到该对象的中文版本

请求行有三个字段:

方法字段:包括 GET、POST、HEAD、PUT 和 DELETE。绝大部分报文使用 GET 方法。

URL 字段

HTTP 版本字段

通用格式:

http响应报文:

1
2
3
4
5
6
7
8
HTTP/1.1 200 OK                                  //状态行(3个字段:版本协议字段、状态码和相应状态信息)
Connection: close //发送完报文后关闭TCP连接
Date: Tue, 18 Aug 2015 15:44:04 GMT //服务器产生并发送该响应报文的日期和时间
Server: Apache/2.2.3 (CentOS) //改报文是Apache web服务器产生的
Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT //代理服务器
Content-Length: 6821 //指示了被发送对象的字节数
Content-Type: text/html //指示了实体体中的对象是html文本
(data data data data data ......) //实体体

常见的状态码和相关短语:

通用格式:

http服务器是无状态的,Web 站点通常希望能够识别用户,为此,HTTP 使用了 cookie ,它允许站点对用户进行跟踪

cookie 有 4 个技术组件:

1.在 HTTP 响应报文中的一个 cookie 首部行;

2.在 HTTP 请求报文中的一个 cookie 首部行;

3.在用户端系统中保留有一个 cookie 文件,并由用户的浏览器进行管理;

4.位于 Web 站点的一个后端数据库。

在web站点后台有数据库。其工作原理是,用户第一次访问某服务器时,其响应报文中包含一个Set-cookie字段,该字段的值往往是服务器设定的唯一标识码,浏览器将该字段和服务器主机名等信息保存在本地,以后用户每次访问时,浏览器都会从cookies中找到该站点的标识码放在请求报文中发送,这样服务器就能通过这个唯一标识辨认这个用户,通过用户在网站上的浏览记录采取行为。

cookie的工作过程:

web缓存

1.Web缓存器也叫 代理服务器,是能够代表 Web 服务器来满足 HTTP 请求的网络实体。

2.Web服务器有自己的磁盘存储空间,并在存储空间中保存着最近存储过的对象的副本。

3.可以配置用户的浏览器,使得用户所有的 HTTP 请求首先指向 Web 缓存器。

4.客户与 Web 缓存器之间的速度通常比较快,所以可以提高访问的速度,降低时延。

5.客户通过 Web 缓存器请求对象

6.当浏览器申请一个文件时,先建立一个到web缓存的TCP连接,如果缓存服务器上有这个文件就返回,否则,他就建立一个到原始服务器的TCP获得该文件并存储,之后将该文件发回客户端。web缓存可以大幅减少对客户端的响应时间,减少机构内部网络和internet之间的链路通信量并节约带宽。这样会带来的新的问题是,web缓存上的文件可能是陈旧的。为此HTTP引入了条件get,即web缓存在保存一个文件时会记录其最后修改时间,客户端每次请求文件时,web缓存会向原始服务器发送一个带有if-modified-since的报文,如果该文件没有改动就直接把缓存中的文件返回给用户,否则重新下载该文件。

条件get的方法

条件get方法用来解决 Web 缓存器中的对象拷贝可能是旧的的问题

条件

①请求报文使用 GET 方法。

②请求报文中包含一个 If-Modified-Since: 首部行

因特网中的电子邮件

因特网电子邮箱系统有三个重要的组成部分:

①用户代理②邮件服务器③简单邮件传输协议(SMTP)

SMTP

1.SMTP是因特网电子邮件应用的核心,用于从发送方的邮件服务器发送报文到接收方的邮件服务器

2.SMTP 是因特网中电子邮件中主要的应用层协议。它使用 TCP 可靠数据传输

3.SMTP 限制所有的邮件报文只能采用简单的 7 比特 ASCII 表示。

邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱上

  • 如果 Bob 的邮件服务器没有开机,该报文会保留在 Alice 的邮件服务器上并尝试进行新的尝试。这意味着邮件并不会在中间的某个邮件服务器存留。

  • SMTP 一般不使用中间服务器发送邮件,即使这两个邮件服务器位于地球的两端也一样。

  • SMTP 用的是 持续链接:如果发送邮件服务器有几个报文发往同一个接收邮件服务器,它可以通过同一个 TCP 连接发送所有的的报文。

与HTTP对比

不同:

  • HTTP主要是一个拉协议,TCP连接由想要接收文件的机器发起。即在方便的时候,某些人在Web服务器上装载信息,用户使用HTTP从该服务器上拉取这些信息。
  • SMTP基本上是一个推协议,TCP连接由想要发送该文件的机器发起。即发送邮件服务器到接收邮件服务器
  • SMTP要求每个报文使用7比特ASCLL码形式。HTTP不受限制
  • 处理一个既包含文本又包含图形的文档,HTTP把每个对象封装到自己的HTTP响应报文中,SMTP则把所有的报文对象放在一个报文之中。

相同:

  • 都用于从一台主机向另一台主机传送文件。
  • 都使用持续连接。

邮件报文格式

每个首部必须含有一个From:首部行和一个To:首部行;也许有Subject:首部行以及其他可选的首部行

邮件访问协议

邮件访问使用客户-服务器体系结构 ,用户通过用户端系统上运行的客户程序阅读电子邮件

流行的邮件访问协议:

①第三版邮局协议(POP3)

②因特网邮件访问协议(IMAP)

③HTTP(基于web的电子邮件)

POP3

比较简单的邮件范文协议。

按三个阶段工作:

①特许阶段:特许、事物处理以及更新。第一阶段通过用户名和口令鉴别用户;

②事务处理阶段:第二阶段用户取回报文等操作;

③更新阶段:第三阶段退出,邮件服务器会删除那些被标记为删除的报文。

IMAP

POP3协议只在本地维持邮件的文件夹,不提供任何创建远程文件夹并为报文指派文件夹的方法。而IMAP服务器把每个报文与一个文件夹联系起来,为用户提供创建文件夹以及将邮件从一个文件夹移动到另一个文件夹的命令,允许用户
代理获取报文组件的命令。

基于web的电子邮件

使用浏览器收发邮件时,从用户到邮件服务器之间用HTTP传输。

DNS因特网的目录服务

主机的一种标识方式是用主机名,也可以用ip地址标识

①主机名:thriumph.top

②ip地址:xxx.xxx.xxx.xxx

DNS提供的服务

1.人们便于记忆主机名的方式,而路由器喜欢定长的具有层次结构的IP地址,所以需要一种能进行主机名到IP地址转换的服务,也就是域名系统(Domain Name System,DNS)

2.DNS 协议基于 UDP ,使用 53 端口

3.DNS也是应用层协议,它通常会被其他应用层协议所使用,包括HTTP、SMTP和FTP,将用户的主机名解析为 IP 地址

DNS域名系统是

①一个由分层的 DNS 服务器 实现的分布式数据库

②一个使得主机能够查询分布式数据库的应用层协议

DNS的其他服务:

①识别主机别名(用于HTTP、FTP):有着复杂主机名的主机能拥有一个或者多个别名

②识别邮件服务器别名(用于SMTP):便于记忆的电子邮件别名。

③负载分配:DNS可以用于冗余服务器之间进行负载分配。单个站点会有多台服务器,DNS数据中心会存储这些IP地址集合,因此多个服务器可以有相同的别名

DNS工作机理的概述

当主机上的DNS客户端收到一个转换请求时,客户端将向网络发送一个DNS查询报文,然后客户端将收到一个包含相关信息的DNS回答报文,这个报文里有客户端想要的内容,之后DNS客户端将IP地址返回给请求的提出者

分布式,层次数据库:

为了处理扩展性问题,DNS服务器采用层次式组织,并且分布在全世界范围内;大致来说,存在三种DNS服务器

DNS服务器:

①根 DNS 服务器:因特网上有13个根DNS服务器,大部分分布在北美洲,尽管我们可以将这13个根DNS服务器视为单个的服务器,但是每台服务器实际上是一个冗余的计算机网络以提供安全性和可靠性

②顶级域(DNS)服务器:负责顶级域名,如com,org,net,edu,gov以及各个国家的顶级域名的转换

③权威DNS服务器:因特网上,具有公共可访问主机的每个组织机构必须公共可访问的DNS记录,这些记录将主机名映射为IP地址。一个组织的权威DNS服务器收藏了这些DNS记录,多数大学和大公司实现和维护它们自己的基本和辅助(备份)权威DNS服务器;当然,也可以通过付费的方式,将相关的信息插入到其它权威服务器中

还有一种不在DNS层次结构之中,是本地DNS服务器。本地DNS服务器通常邻近其所在网络的其他主机。当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将请求转发到DNS服务器层次结构中。DNS服务器的层次结构,每个ISP都有一台本地DNS服务器。

DNS查询

①递归查询

②迭代查询

从请求主机到本地DNS服务器的查询是递归的,其他查询是迭代的,如果请求的接收者不知道所请求的内容,那么接收者将扮演请求者,发出有关请求,直到获得所需要的内容,然后将内容返回给最初的请求者。也就是说,在递归查询中,一定要给请求者想要的答案;迭代查询则是指,如果接收者没有请求者所需要的准确内容,接收者将告诉请求者,如何去获得,但是自己并不去发出请求

DNS缓存:

为了改善时延性能并减少在因特网上传输的DNS报文数量,DNS使用缓存技术。通常在本地服务器实现,可以缓存主机名/IP地址对,可以缓存TLD服务器地址,从而绕过根DNS服务器

DNS记录和报文

资源记录是一个4元组:(Name,Value,Type,TTL)

TTL为该记录的生存时间,决定了资源记录应当从缓存中删除的时间。

①Type=A,则Name是主机名,Value是该主机名对应的IP地址。

②Type=NS,则Name是域,Value是如何获取该域中主机IP地址的权威DNS服务
器的主机名。

③Type=CNAME,则Value是别名为Name的主机对应的规范主机名。

④Type=MX,则Value是别名为Name的邮件服务器对应的规范主机名。从而使得同一公司的邮件服务器和web服务器可以使用相同别名。

所以如果一条记录为type=A,则它直接包含了需要的信息;如果是NS,需要进一步得到权威DNS服务器的IP地址(不一定需要再次请求哦~),然后向其发出,请求希望得到一条A记录;而type=CNAME和MX的记录则实现了主机别名到主机规范名的转换,可以通过该规范名继续构建查询链条,直到获得希望的IP地址

DNS报文

DNS报文有两种,即查询报文和回答报文,并且两种报文有着相同的结构:

①前12字节为首部区域。标识符是一个用来标记该查询的16比特数。该标志符会被复制到相应的回答报文里,以便匹配请求和回答;

②标志字段有若干标志,用来指出报文的类型(请求还是响应)、查询类型(递归还是迭代)、是否是所请求名字的权威DNS服务器、以及4个有关数量的字段,用来指示4类数据区域出现的数量。

③问题区域包含了正在进行的查询信息,包括名字字段、查询类型。

④回答区域包含了对最初请求的名字的资源记录,回答报文回答区域可以包含多条RR,因此一个主机名能有多个IP地址。

⑤权威区域包含了其他权威服务器的信息。

⑥附加区域包含了其它有帮助的记录,比如在对于一个MX类型的请求回答报文里,回答区域里指出了邮件服务器的规范主机名,而附加区域里就有可能包含一个类型为A的关于该规范主机名的的IP地址。

向DNS数据库中插入记录

需要在注册登记机构完成这一任务,当你注册一个域名时,需要向该机构提供你的基本和辅助DNS服务器的名字和IP地址,该注册机构将确保一个类型为NS和类型为A的记录输入对应的顶级域名服务器,这样就完成了插入数据。

P2P文件分发

有两种典型因特网应用十分适合P2P体系结构,一种是文件分发,另一种是大型对等方社区中的数据库;P2P体系结构有着良好的自扩展性;

BitTorrent 是一种用于文件分发的流行P2P协议;用BitTorrent的术语来说,参与一个特定文件分发的所有对等方的集合被称为一个洪流;在一个洪流中的对等方彼此下载等长度的文件块;当一个对等方下载文件块的时候,也向其他对等方发送了多个块;一旦某对等方获得了完整文件,就可以自私地离开洪流或者大公无私地留下来继续向其他对等方发送文件

P2P的最小分发时间

套接字编程

UDP套接字编程

UDPClient.py

1
2
3
4
5
6
7
8
9
10
11
12
from socket import *
serverName = "127.0.0.1"
serverPort = 10021
clientSocket = socket(AF_INET,SOCK_DGRAM)
while True:
message = raw_input('Input lowercase sentence:')
if message=='quit':
break
clientSocket.sendto(message,(serverName,serverPort))
modifiedMessage,serverAddress = clientSocket.recvfrom(2048)
print modifiedMessage
clientSocket.close()

UDPServer.py

1
2
3
4
5
6
7
8
9
10
from socket import *
serverName = "127.0.0.1"
serverPort = 10021
serverSocket = socket(AF_INET,SOCK_DGRAM)
serverSocket.bind((serverName,serverPort))
print ("The server is ready to receive")
while True:
message,clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.upper()
serverSocket.sendto(modifiedMessage,clientAddress)

TCP套接字编程

TCPClient.py

1
2
3
4
5
6
7
8
9
10
11
12
13
from socket import *
serverName = "127.0.0.1"
serverPort = 10021
clientSocket = socket(AF_INET,SOCK_STREAM)
clientSocket.connect((serverName,serverPort))
while True:
message = raw_input('Input lowercase sentence:')
if message=='quit':
break
clientSocket.send(message)
modifiedMessage,serverAddress = clientSocket.recvfrom(2048)
print modifiedMessage
clientSocket.close()

TCPServer.py

1
2
3
4
5
6
7
8
9
10
11
12
13
from socket import *
serverName = "127.0.0.1"
serverPort = 10021
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind((serverName,serverPort))
serverSocket.listen(1)
print ("The server is ready to receive")
while True:
connectionSocket,addr = serverSocket.accept()
message = connectionSocket.recv(2048)
modifiedMessage = message.upper()
connectionSocket.send(modifiedMessage)
connectionSocket.close()
相关文章
评论
分享
  • 计算机网络中的安全

    《计算机网络自顶向下方法》第八章读书笔记 什么是网络安全安全通信具有下列所需要的特性: 机密性。仅有发送方和希望的接收方能够理解传输报文的内容。因为窃听者可以截获报文,这必须要求报文在一定程度上进行加密,是截取的报文无法被截获者所...

    计算机网络中的安全
  • 无线网络和移动网络

    《计算机网络自顶向下方法》第七章读书笔记 概述 基站 是无线网络基础设施的一个关键部分。基站在有线网络中没有明确的对应设备,它负责向与之关联的无线主机发送数据和从主机那里接收数据。基站通常负责协调与之相关联的多个无线主机的传输。当...

    无线网络和移动网络
  • 链路层和局域网

    《计算机网络自顶向下方法》第六章读书笔记 链路层信道分为两种: 广播信道:局域网,无限LAN,卫星和混合光纤 点对点的通信链路 链路层的概念运行链路层协议的任何设备称为节点。把沿着通信路径连接相邻节点的通信信道称为链路 链路层采取...

    链路层和局域网
Please check the parameter of comment in config.yml of hexo-theme-Annie!