计算机网络(自顶向下 第七版)学习笔记

计算机网络(自顶向下 第七版)


建议搭配中科大视频看,老师讲的很好,这个是我根据计算机网络自顶向下第七版原书搭配老师视频做的笔记。
老师视频链接是:https://www.bilibili.com/video/BV1JV411t7ow/?spm_id_from=333.337.search-card.all.click

第一章 计算机网络概述

1.1 什么是Internet?

​ 回答这个问题有两种方式:其一,我们能够描述因特网的具体构成,即构成因特网的基本硬件和软件组成;其二,我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。

1.1.1 从具体构成角度看:

  • 主机 (端系统)(host):数以亿计的、互联的计算设备

  • 通信链路(communication link)

  • 由不同类型的物理媒体组成,这些物理媒体包括光纤、同轴电缆、无线电频谱、卫星
  • 传输速率=带宽(bps),不同的链路能够以不同的速率传输数据,链路的传输速率以比特/秒(bit/s,或bps)
  • 分组交换机(packet switch):转发分组
  • 分组:当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并未每段加上首部字节,由此形成的信息包用计算机网络的术语称为分组(packet)。
  • 两种著名类型的分组交换机:路由器(router)和链路层交换机(link-layer switch);路由器常用于网络核心中,链路交换机常用于接入网中
  • 从发送端系统到接收端系统,一个分组所经历的通信链路和分组交换机称为通过该网络的路径(route或path)。
  • 协议(protocol):这些协议控制着因特网中信息的接收和发送

TCP(传输控制协议)和IP(网络协议)是因特网中两个最为重要的协议,IP协议定义了在路由器和端系统之间发送和接收的分组格式。因特网的主要协议统称为TCP/IP。

1.1.2. 从服务角度看:

从根据基础设施向分布式应用程序提供的的服务来描述:

  • 使用通信设施进行的分布式应用程序(distributed application)

Web、VoIP、email、分布式游戏、电子商务、社交网络

  • 与因特网相连的端系统提供了一个套接字接口(socket interface),该接口规定了运行在一个端系统上的程序请求因特网基础设施向运行另一个端系统上的特定目的地程序交付数据的方式。
  • 通信基础设施为apps提供接口(通信服务)
  • 将发送和接受数据的apps与互联网连接
  • 为app应用提供服务选择,类似邮政服务:无连接不可靠服务、面向连接的可靠服务

从组成类型看:
请添加图片描述

  • 网络边缘
  • 主机
  • 应用程序(客户端和服务器)
  • 网络核心:互连着的路由器、网络的网络
  • 接入网、物理媒体:有线或者无线通信链路

———————————————————————————————————
另一种角度:

  • 节点
  • 主机结点:主机及其上运行的应用程序
  • 数据交换(中转)结点:例如路由机和交换机,但这些结点既不是数据源也不是数据目标
  • 边:通信链路
  • 接入网链路:主机连接到互联网的链路
  • 主干链路:路由器间的链路
  • 协议
  • 协议控制发送、接受消息

    如:TCP、IP、HTTP、FTP、PPP

  • Internet:网络的网络

    松散的层次结构、互联的ISP

    公共Internet vs ,专用intranet

  • Internet标准

    RFC、IETF

1.1.3 什么是协议

协议(protocol)定义了在两个或多个通信实体之间交换的报文格式和次序,以及在报文传输和接受或其他事件方面所采取的动作。

1.2 网络边缘

​ 端系统位于网络边缘,因为它们容纳(即运行)应用程序,也被称为主机。主机有时又进一步分为两类:客户(client)和服务器(server)。客户通常是桌面PC、移动PC和智能手机等,而服务器通常是更为强大的机器,用于存储和发布Web页面、流视频等。

应用进程之间通讯的两种模式

  • 客户/服务器模式 C/S(主从)
  • 客户端向服务器请求、接受服务,如Web浏览器/服务器;email客户端/服务器
  • 对等(peer-peer)模式
  • 很少(甚至没有)专门的服务器如:Genutella、KaZaA、Emule

请添加图片描述

网络边缘:采用网络设施的面向连接服务

什么是面向连接的服务,就是在请求与响应端进行先“打招呼”后传输的行为,既要先建立连接状态,连接完成的同时底层的各种协议也要准备相互的资源,以及各种配置的初始化准备。且注意在面向连接服务中之间的各种状态信息和连接信息等资源都是端系统来维护的,而不是网络核心或接入网、物理媒体即是忽略中间结点和链路的

典型的面向连接的传输协议:TCP

优点:

  • 可靠的(原原本本的传输给你,发的什么收的就是什么)、按顺序地传送数据(确认与重传)
  • 流量控制:发送方不会淹没接收方
  • 拥塞控制:当网络(路径上面资源很多的时候)拥塞时,发送方降低发送频率

网络边缘:采用基础设施的无连接服务

可以简单理解为根本没有“握手”行为的传输协议。只要符合协议的规范就可以了,发送方发送消息,接收方接收到以后立马就回应了

典型的无连接的传输协议:UDP

TCP所具有的安全稳定特性,UDP一律没有。无连接、不可靠数据传输、无流量控制、无拥塞控制。

两种协议的应用:

  • TCP的应用

HTTP(Web),FTP(文件传送),Telnet(远程登录),SMTP(email)

  • UDP的应用

既然UDP这么多缺点我们为什么还要使用它呢,在很要求时间效率或对可靠性要求不高的场景中一般都会选择UDP来作为资源传输的首选协议什么网络多媒体(直播)、聊天软件、视频电话等等

1.2.1 接入网

补充:端系统通过因特网服务提供商(Internet Service Provider,ISP)接入因特网,包括本地电缆或电话那样的住宅ISP、公司ISP、大学ISP,在机场、旅馆和其它公共场所提供WiFi接入的ISP,以及为智能手机和其他设备提供移动接入的蜂窝数据ISP。

接入网是指将端系统物理连接到其边缘路由器(edge router)的网络。边缘路由器是端系统到任何远程端系统的路径上的第一台路由器。

  1. 家庭接入:DSL、电缆、FTTH、拨号和卫星
  2. 企业(和家庭)接入:以太网和WiFi
  3. 无线接入

1.2.2 物理媒体

​ 物理媒体分为两种类型:导引型媒体非导引型媒体

导引型媒体:信号沿着固体媒介被导引:同轴电缆、光纤、 双绞铜线

非导引型媒体: 开放的空间传输电磁波或者光信号,在电磁或者光信号中承载数字数据

双绞铜线:最便宜并且最常用的导引型媒体,一百年来,一直用于电话网。双绞线由两根绝缘的铜线组成,以规则的螺旋状排列着。这两根线绞合起来,以减少邻近类似的双绞线的电气干扰。通常许多双绞线困扎在一起形成一根电缆,并在这些双绞线外面覆盖上保护性防护层。一对电线构成了一个通信链路。**无屏蔽双绞线(Unshielede Twisted Pair,UTP)**常用在建筑物内的计算机网络中,即用于局域网(LAN)中。双绞线最终已经作为告诉LAN联网的主导性解决方案,也经常用于住宅因特网接入。

同轴电缆: 两根同轴的铜导线;双向;基带电缆: 电缆上一个单个信道 ;Ethernet; 宽带电缆: 电缆上有多个信道 ; HFC

光纤和光缆: 光脉冲,每个脉冲表示一个bit,在玻璃纤维中传输;高速: 点到点的高速传输(如10 Gps-100Gbps传输速率 );低误码率:在两个中继器之间可以有很长的距离,不受电磁噪声的干扰;安全

无线链路类型:地面微波 ; LAN (e.g., WiFi) ;wide-area (e.g., 蜂窝) ; 卫星

1.3 网络核心

网络核心即由互联因特网端系统的分组交换机和链路构成的网状网络。

网络核心的关键功能:

路由:决定分组采用的源到目标的路径

转发:将分组从路由器的输入链路转移到输出链路

基本问题:数据怎么通过网络进行传输

  • 电路交换(线路交换):为每个呼叫预留一条专有电路:如电话网
  • 分组交换:将要传送的数据分成一个个单位:分组,将分组从一个路由器传到相邻路由器(hop),一段段最终从源端传到目标端

1.3.1 分组交换

分组交换_百度百科 (baidu.com)

​ 在各种网络应用中,端系统彼此交换报文(message)。报文能够包含协议设计者需要的任何东西。报文可以执行一种控制功能,也可以包含数据,例如电子邮件数据、JPEG图像或MP3音频文件。为了从源端系统向目的端系统发送一个报文,源将长报文划分为较小的数据块,称之为分组(packet)。在源和目的地之间,每个分组都通过通信链路和分组交换机传送。分组以等于该链路最大传输速率的速度传输通过通信链路。因此,如果某源端系统或分组交换机经过一条链路发送一个L比特的分组,链路的传输速率为R比特/秒,则传输该分组的时间为L/R秒。

1. 存储转发传输

​ 多数分组交换机在链路的输入端使用存储转发传输(store-and-forward transmission)机制。存储转发传输是指在交换机能够开始向输出链路传输该分组的第一个比特之前,必须接收到整个分组。

详细说明:路由器将源系统的分组转发到目的系统,中间只用源系统到路由器和路由器到目的系统两条通信链路。在某个时刻,源已经传输了分组1的一部分,分组1的前沿已经到达了路由器。因为该路由器应用了存储转发机制,所以此时它还不能传输已经接收的比特也就是分组1的一部分,而是必须先缓存(即“存储”)该分组的比特。仅当路由器已经接收完了该分组的所有比特后,它才能开始向输出链路传输(即转发)该分组,这样当需要转发次数多了,就会造成一定的延迟,也就是端时延。

一般情况:通过由N条速率为R的链路组成的路径(所以,在源和目的地之间有N-1台路由器,从源到目的地发送一个分组,端到端的存储转发时延是:d=N(L/R)

  • 以分组为单位存储-转发方式

    网络带宽资源不再分分为一个片,传输时使用全部带宽

    主机之间传输的数据被分为一个个分组

    存储-转发:分组每次移动一跳(hop) 在转发之前,节点必须收到整个分组,延迟比线路交换要大,排队时间

  • 资源共享,按需使用

分组交换出现的排队延迟和丢失

如果到达速率>链路的输出速率,分组将会排队,等待传输,如果路由器的缓存用完了,分组将会被抛弃

2. 排队时延和分组丢失

​ 每组分组交换机有多条链路与之相连。对于每条相连的链路,该分组交换机具有一个输出缓存(output buffer,也成为输出队列(output queue)),它用于存储路由器准备发往那条链路的分组。如果到达该分组需要传输到某条链路,但发现该链路正忙于传输其他分组,该到达分组必须在输出缓存中等待。因此,除了存储转发时延意外,分组还要承受输出缓存的排队时延(queuing delay)。这些时延是变换的,变换的程度取决于网络的拥塞程度。因为缓存空间的大小是有限的,一个到达的分组可能发现该缓存已被其他等待传输的分组完全充满了。在此情况下,将出现分组丢失(丢包)(packet loss),到达的分组或已经排队的分组之一将被丢弃。

对最后一句的最后一部分解释:如果这个分组部分bit丢失了,而源操作系统没有重发,那么就会造成丢包,所以说是到达的分组或已经排队的分组之一将被丢弃。

补充知识:按照实现方式,分组交换可以分为数据报分组交换虚电路分组交换。也可以说是按有无网络层的连接区分

  1. 数据报网络

    数据包分组交换要求通信双方之间至少存在一条数据传输通路。发送者需要在通信之前将所要传输的数据包准备好,数据包都包含有发送者和接收者的地址信息。数据包的传输彼此独立,互不影响,可以按照不同的路由机制到达目的地,并重新组合。

​ 2.虚电路网络

​ 它与数据报方式的区别主要是在信息交换之前,需要在发送端和接收 端之间先建立一个逻辑连接,然后才开始传送分组,所有分组沿相同 的路径进行交换转发,通信结束后再拆除该逻辑连接。网络保证所传 送的分组按发送的顺序到达接收端。所以网络提供的服务是可靠的, 也保证服务质量。

3. 转发表和路由选择协议

​ 在因特网中,每个端系统具有一个称为IP地址的地址。当源主机要向目的端系统发送一个分组时,源在该分组的首部包含了目的地的IP地址。当一个分组到达网络中的路由器时,路由器检查该分组的目的地址的一部分,并向一台相邻路由器转发该分组。更特别的是,每台路由器具有一个转发表(forwarding table),用于将目的地址(或目的地址的一部分)映射成为输出链路。当某分组到达一台路由器时,路由器检查该地址,并用这个目的地址搜索其转发表,已发现适当达出链路。路由器则将该分组导向该出链路。

​ 因特网具有一些特殊的路由选择协议(routing protocol),用于自动地设置这些转发表。例如:一个路由选择协议可以决定从每台路由器到每个目的地之间的最短路径,并使用这些最短路径结果来配置路由器中的转发表。

1.3.2 电路交换

电路交换_百度百科 (baidu.com)

​ 在电路交换网络中,在端系统间通信会话期间,预留了端系统间沿路劲通信所需要的资源(缓存,链路传输速率)。在分组交换网络中,这些资源则不是预留的;会话的报文按需使用这些资源,其后果可能是不得不等待(即排队)接入通信链路。例子:传统的电话网络。

主要特点:

  • 独占性:独享资源,不同享

每个呼叫一旦建立起来就能够保证性能

  • 如果呼叫没有数据发送,被分配的资源就会被浪费
  • 不适合计算机之间的通信

连接建立时间长;

计算机之间的通信有突发性,如果使用线路交换,则浪费的片较多,比如当这个呼叫没有数据传递,其所占据的片也不能够别的呼叫使用;

1. 电路交换网络中的复用
2. 分组交换和电路交换的对比

分组交换是“突发数据的胜利者?”

  • 同样的网络资源,分组交换允许更多用户使用网络!
  • 适合于对突发式数据传输
    • 资源共享
    • 简单,不必建立呼叫
  • 过度使用会造成网络拥塞:分组延时和丢失
    • 对可靠地数据传输需要协议来约束:拥塞控制
  • Q: 怎样提供类似电路交换的服务?
  • 保证音频/视频应用需要的带宽
  • 一个仍未解决的问题(chapter 7)

1.3.3 网络的网络 Internet/ISP结构<再看看书>

因特网服务提供商(Internet Service Provider,ISP)

互联网络结构:网络的网络

  • 端系统通过接入ISPs连接到互联网
  • 接入ISPs相应的必须是互联的
  • 导致的“网络的网络”非常复杂
  • 第一层ISP国家或国际来覆盖或ICP的专用网络,速率极高直接与其他第一层的ISP相连,与大量第二层的ISP相连(POP)
  • 第二层是更小些的ISP(一般是区域性的),与第一层一个或多个相连(多宿,multi home),也可能与同层相连(对等接入)
  • 第三层就是我们口中的接入网,与端系统距离最近

网络的网络

  • POP: 高层ISP面向客户网络的接入点,涉及费用结算 ,如一个低层ISP接入多个高层ISP,多宿(multi home)
  • 对等接入:2个ISP对等互接,不涉及费用结算
  • IXP:多个对等ISP互联互通之处,通常不涉及费用结算
  • ICP自己部署专用网络,同时和各级ISP连接

1.4 分组交换网中的丢包、延时、吞吐量

1.4.1 分组交换网的时延概述

时延的分类

节点延时:

​ d*nodal = dproc +dqueue + dtrans + dprop

四种分组延时:

  1. 节点处理延时(dproc)
    • 检查bit级别差错
    • 检查分组首部和决定将分组导向何处
    • 通常是微妙数量级或更少
  2. 排队延时(dqueuec)
    • 在输出链路上等待传输的时间
    • 依赖于路由器的拥塞程度
    • 通常为微妙级到毫秒级
  3. 传输延时
    • R=链路带宽(bps)
    • L=分组长度(bits)
    • 将分组发送到链路上的时间=L/R
    • 存储转发延时
    • 通常为微妙级到毫秒级
  4. 传播延时(dprop)
    • d=物理链路的长度
    • s=在媒体上的传播速度
    • 传播延时=d/s
    • 几微妙到几百毫秒
1.4.2 排队时延和丢包

排队延时

  • R=链路带宽(bps)

  • L=分组长度(bits)

  • a=分组到达队列的平均速率

  • 流量强度=La/R

设计系统时流量强度不能大于1!

吞吐量:在源端和目标端之间传输的速率(数据量/单位时间)

瓶颈链路端到端路径上,限制端到端吞吐的链路(短板效应)

  • 瞬间吞吐量:在一个时间点的速率
  • 平均吞吐量:在一个长时间平均值

1.5 协议层次、服务模型

从我们目前的讨论来说,因特网是一个及其复杂的系统:

  • 网络功能负责:数字信号的物理信号重载、点到点、路由、rdt、进程区分,应用等
  • 现实来看,网络的许多构成元素和设备:主机、路由器、各种媒体的链路、应用、协议、硬件,软件

问题:如何组织和实现这个复杂的网络功能?

​ 通过分层的体系结构,对于大而复杂且需要不断更新的系统,改变服务的实现而不影响该系统其他组件是分层的一个重要优点。例如:登机口的路口改变了,但航线没变,但登机口仍实现了它的登机离机功能。

层次化方式实实现复杂网络功能:

  • 将网络复杂的功能分层功能明确的层次,每一层实现了其中一个或一组功能,功能中有其上层可以使用的功能:服务,即下层为上层提供服务(这个服务是包括本层加以下层次全部功能)
  • 本层协议实体相互交互执行本层的协议动作,目的是实现本层功能,通过接口为上层提供更好的服务
  • 在实现本层协议的时候,直接利用了下层所提供的服务
  • 本层的服务:借助下层服务实现的本层协议实体之间交互带来的新功能(上层可以利用的)+ 更下层所提供的服务

一个协议层能够用软件、硬件或两者的结合来实现。诸如HTTP和SMTP这样的应用层协议几乎总是在端系统中用软件实现,运输层协议也是如此。因为物理层和数据链路层负责处理跨越特定链路的通信,它们通常在与给定链路相关联的网络接口卡(例如以太网和WiFi接口卡)中实现。网络层经常是硬件和软件实现的混合体。还要注意的是一个第n层的协议分布在构成该网络的端系统、分组交换机和其他组件中。这就是说,第n层协议的不同部分常常位于这些网络组件的各部分中。

服务和服务访问点:

这个知识点书上没有,尽量看视频

  • 服务:底层实体向上层实体提供它们之间通信的能力。
  • 服务用户
  • 服务提供者
  • 原语:上层使用下层服务的形式,高层使用低层提供的形式,以及低层向高层提供服务都是通过服务访问原语来进行交互的–形式
  • 服务访问点SAP:上层使用下层提供的服务提供的服务通过层间的接口-地点:
  • 例子:邮箱
  • 地址:下层的一个实体支撑着上层的多个实体,SAP有标志不同上层实体的作用
  • 可以有不同的实现,队列
  • 例子:传输层的SAP:端口

分层处理和实现复杂系统的好处?

对付复杂的系统

  • 概念化:结构清晰,便于标示网络组件,以及描述其相互关系
  • 分层参考模型
  • 结构化:模块化更易于维护和系统升级
  • 改变某一层服务的实现不影响系统中的其他层次

  • 对于其他层次而言是透明的

  • 如改变登机程序并不影响系统的其它部分

  • 改变2个秘书使用的通信方式不影响2个翻译的工作

  • 改变2个翻译使用的语言也不影响上下2个层次的工作

Internet 协议栈

  1. 应用层: 网络应用
  • 为人类用户或者其他应用进程提供网络应用服务
  • FTP, SMTP, HTTP,DNS
  1. 传输层: 主机之间的数据传输
  • 在网络层提供的端到端通信基础上,细分为进程到进程,将不可靠的通信变成可靠地通信
  • TCP, UDP
  1. 网络层: 为数据报从源到目的选择路由
  • 主机主机之间的通信,端到端通信,不可靠
  • IP, 路由协议
  1. 链路层: 相邻网络节点间的数据传输
  • 2个相邻2点的通信,点到点通信,可靠或不可靠
  • 点对对协议PPP, 802.11(wifi), Ethernet
  1. 物理层: 在线路上传送bit
    参考模型

封装和解封装

各层次的协议数据单元

  • 应用层:报文(message)
  • 传输层:报文段(segment):TCP段,UDP数据报
  • 网络层:分组packet(如果无连接方式:数据报datagram)
  • 数据链路层:帧(frame)
  • 物理层:位(bit)

1.6 服务与协议

可以在1.3中电路交换和分组交换相关的知识点一起看

服务和协议

服务与协议的区别

  • 服务(Service):低层实体向上层实体提供它们之间的通信的能力,是通过原语(primitive)来操作的,垂直

  • 协议(protocol) :对等层实体(peer entity)之间在相互通信的过程中,需要遵循的规则的集合,水平

服务与协议的联系

  • 本层协议的实现要靠下层提供的服务来实现
  • 本层实体通过协议为上层提供更高级的服务

服务的类型:

  • 面向连接的服务和无连接的服务-方式

面向连接的服务( Connection-oriented Service)

  • 连接(Connection):两个通信实体为进行通信而建立的一种结合
  • 面向连接的服务通信的过程:建立连接,通信,拆除连接
  • 面向连接的服务的例子:网络层的连接被成为虚电路
  • 适用范围:对于大的数据块要传输; 不适合小的零星报文
  • 特点:保序
  • 服务类型:
    • 可靠的信息流 传送页面(可靠的获得,通过接收方的确认)
    • 可靠的字节流 远程登录
    • 不可靠的连接 数字化声音

无连接的服务(Connectionless Service)

  • 无连接服务:两个对等层实体在通信前不需要建立一个连接,不预留资源;需要通信双方都是活跃;(例:寄信)
  • 特点:不可靠、可能重复、可能失序
  • IP分组,数据包;
  • 适用范围:适合传送零星数据;
  • 服务类型:
    • 不可靠的数据报 电子方式的函件
    • 有确认的数据报 挂号信
    • 请求回答 信息查询

————————————————————————————————

由此可得,面向连接工作方式和无连接工作方式的特点。

(1)面向连接工作方式的特点

不管是面向物理的连接还是面向逻辑的连接,其通信过程可分为三个阶段:连接建立、传送信息、连接拆除。

一旦连接建立,该通信的所有信息均沿着这个链接路径传送,且保证信息的有序性(发送信息顺序与接收信息顺序一致)。

信息传送的时延比无连接工作方式的时延小。

一旦建立的连接出现故障,信息传送就要中断,必须重新建立连接,因此对故障敏感。

(2)无连接工作方式的特点

没有连接建立过程,一边选路、一遍传送信息。

属于同一通信的信息沿不同路径到达目的地,该路径事先无法预知,无法保证信息的有序性(发送信息顺序与接收信息顺序不一致)。

信息传送的时延比面向连接工作方式的时延大。

对网络故障不敏感。

第二章 应用层

2.1 应用层协议原理

(2.1这一大节建议先看我梳理的知识点有一个脉络,再看老师视频,因为再这一章老师夹杂了很多私货(之后的知识点))

研发网络应用程序的核心是写出能够运行在不同的端系统通过网络彼此通信的程序。例如:在Web应用程序中,有两个互相通信的不同的程序:一个是运行在用户主机(平板电脑、桌面机等)上的浏览器程序;另一个是运行在Web服务器主机上的Web服务器程序。因此,当研发新应用程序时,你需要编写将多台端系统运行的软件。

2.1.1 网络应用程序体系结构

​ 当进行软件编码之前,应当对应用程序有一个宽泛的体系结构计划。(应用程序的体系结构明显不同于网络的体系结构(例如OSI网络体系结构)。应用程序体系结构(application architecture)由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。在选择应用程序体系结构时,应用程序研发者很可能利用现代网络应用程序所使用的两种主流体系结构之一:客服-服务器体系结构或对等(P2P)体系结构。

  • 客户-服务器模式(C/S:client/server)

    服务器:

    • 一直运行;
    • 固定的IP地址和周知的端口号(约定);
    • 扩展性:服务器场,数据中心进行扩展 ,扩展性差

    客户端:

    • 主动与服务器通信;
    • 与互联网有间歇性的连接;
    • 可能是动态IP 地址;
    • 不直接与其它客户端通信
  • 对等模式(P2P:Peer To Peer)

    • (几乎)没有一直运行的服务器
    • 任意端系统之间可以进行通信
    • 每一个节点既是客户端又是服务器
      • 自扩展性-新peer节点带来新的服务能力,当然也带来新的服务请求
    • 参与的主机间歇性连接且可以改变IP地址
    • 难以管理
    • 例子: Gnutella,迅雷
  • 混合体:客户-服务器和对等体系结构

    Napster

    • 文件搜索:集中
      • 主机在中心服务器上注册其资源
      • 主机向中心服务器查询资源位置
    • 文件传输:P2P
      • 任意Peer节点之间

    即时通信

    • 在线检测:集中
      • 当用户上线时,向中心服务器注册其IP地址
      • 用户与中心服务器联系,以找到其在线好友的位置
    • 两个用户之间聊天:P2P

2.1.2 进程通信

​ 在构建网络应用程序前,还需要对运行在多个端系统上的程序是如何互相通信的情况有一个基本了解。用操作系统的术语来说,进行通信的实际上是**进程(process)**而不是程序。一个进程可以被认为是运行在端系统中的一个程序。运行环境有两种情况:在相同的端系统和不同的端系统,我们更关注在两个不同端系统上的进程的通信。

  • 当多个进程运行在相同的端系统上时,它们使用进程间通信机制(由操作系统定义)相互通信
  • 在两个不同端系统上的进程,通过跨越计算机网络交换**报文(message)**而相互通信。
    • 使用OS提供的通信服务
    • 按照应用协议交换报文
      • 借助传输层提供的服务
1. 客户和服务器进程

​ 在P2P文件共享的某些应用中,一个进程能够既是客户又是服务器。无论如何,在任何给定的一对进程之间的通信会话场景中,我们仍能将发起通信的进程标识为客户,在会话开始时等待联系的进程标识为服务器

2. 进程和计算机网络之间的接口

​ 如上所述,多数应用程序是由通信进程对组成,每对中的两个进程互相发送报文。从一个进程向另一个进程发送的报文必须通过下面的网络。进程通过一个称为套接字(soket)的软件接口向网络发送报文和从网络接收报文。由于该套接字是建立网络应用程序的可编程接口,因此套接字也称为应用程序和网络之间的应用程序编程接口(Application Programming Interface,API)

应用程序开发者可以控制套接字在应用层端的一切,但是对该套接字的运输层端几乎没有控制权。应用程序开发者对于运输层的控制仅限于:(1)选择运输层协议;(2)也许能设定几个运输层参数,如最大缓存和最大报文段长度等。一旦应用程序开发者选择了一个运输层协议(如果可供选择的话),则应用程序就建立在有该协议提供的运输层服务之上。

3. 进程寻址

​ 为了向特定目的地发送邮政邮件,目的地需要有一个地址。类似地,在一台主机上运行的进程为了向在另一台主机上的进程发送分组,接收进程需要有一个地址。为了标识该接收进程,需要定义两种信息:主机的地址(由IP地址标识)和在目的主机中指定接收进程的标识符(目的端口号)。

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

​ 前面讲过套接字是应用程序进程和运输层协议之间的接口。在发送端的应用程序将报文推进该套接字。在该套接字的另一侧,运输层协议负责从从接收进程的套接字得到该报文。

​ 包括因特网在内的很多网络提供了不止一种运输层协议。当开发一个应用时,必须选择一种可用的运输层协议。一个运输层协议能够为调用它的应用程序提供什么样的服务呢?我们大体能够从四个方面对应用程序服务要求进行分类:可靠数据传输、吞吐量、定时和安全性。

1.可靠数据传输

​ 在第一章学习的时候,我们知道分组在计算机网络中可能丢失。像电子邮件、文件传输以及金融应用等这样的应用,数据丢失可能会造成灾难性的后果。为了支持这些应用,必须做一些工作以确保由应用程序的一端发送的数据正确、完全地交付给该应用程序的另一端。如果一个协议提供了这样的确保数据交付服务,就认为提供了可靠数据传输。有些应用(如音频)能容忍一定比例以下的数据丢失。

2. 吞吐量

​ 在沿着一条网络路径上的两个进程之间的通信会话场景中,可用吞吐量就是发送进程能够向接收进程交付比特的速率。因为其他会话将共享沿着该网络路径的带宽,并且因为这些会话将会到达和离开,该可用吞吐量将 随机波动。这些观察导致另一种自然的服务,即运输层能够以某种特定的速率提供确保的可用吞吐量。其中一些(带宽敏感的)应用(如多媒体)必须需要最小限度的吞吐,从而使得应用能够有效运转,一些应用能充分利用可供使用的吞吐(弹性应用,如:电子邮件,文件传输)。

3. 定时(延迟)

​ 运输层协议也能提供定时保证。如同具有吞吐量保证那样,定时保证能够以多种形式实现。一个保证的例子如:发送方注入进套接字中的每个比特到达接收方的套接字不迟于100ms。这种服务将对交互式实时应用有吸引力,如因特网电话、电话协议和多方游戏,所以这些服务为了有效性而要求数据交付有严格的时间限制。例如你在打大型fps竞技游戏,就需要较低的时延。

4. 安全性

​ 最后,运输协议能够为应用程序提供一种或多种安全性服务。例如机密性、数据完整性、端点鉴别。这在第8章详细讨论

2.1.4 因特网提供的运输服务

​ 至此,我们已经考虑了计算机网络能够提供的通用运输服务。现在我们要更为具体地考察由因特网提供的运输服务类型。因特网(更一般的是TCP/IP网络)为应用程序提供了两个运输层协议,即UDP和TCP。当你(作为一个软件开发者)为因特网创建一个新的应用时,首先做的决定是,选择UDP还是TCP。每个协议为调用它们的应用程序提供了不同的服务集合。

1. TCP服务

​ TCP服务模型包括面向连接服务可靠数据传输服务。当某个应用程序调用TCP作为其运输协议时,该应用程序就能获得来自TCP的这两种服务。

  • 面向连接的服务:要求在客户端进程和服务器进程之间建立连接
  • 可靠的数据传送服务:通信进程能够依靠TCP,无差错、按适当顺序交付所有发送的数据。当应用程序的一端将字节流传进套接字时,它能够依靠TCP将相同的字节流交付给接收方的套接字,而没有字节的丢失和冗余。

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

2. UDP服务

​ UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。UDP是无连接的,仅提供一种不可靠数据传送服务。

UDP存在的必要性

  • 能够区分不同的进程,而IP服务不能

    • 在IP提供的主机到主机端到端功能的基础上,区分了主机的应用进程
  • 无需建立连接,省去了建立连接时间,适合事务性的应用

  • 不做可靠性的工作,例如检错重发,适合那些对实时性要求比较高而对正确性要求不高的应用

    • 因为为了实现可靠性(准确性、保序等),必须付出时间代价(检错重发)
  • 没有拥塞控制和流量控制,应用能够按照设定的速度发送数据

    • 而在TCP上面的应用,应用发送数据的速度和主机向网络发送的实际速度是不一致的,因为有流量控制和拥塞控制

这一段是老师补充的私货,应该是其它章的内容,在书里第二章没有仔细阐述套接字,所以建议这里多看老师视频,在第13集应用层原理的 18:57开始讲述这一段内容,之后就引申出下面知识点。

套接字(Socket)

  • 进程向套接字发送报文或从套接字接收报文

  • 套接字 <-> 门户

    • 发送进程将报文推出门户,发送进程依赖于传输层设施在另外一侧的将报文交付给接受进程
    • 接收进程从另外一端的门户收到报文(依赖于传输层设施)

TCP之上的套接字(socket)

  • 对于使用面向连接服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标示
    • 4元组:(源IP,源port,目标IP,目标port)
    • 唯一的指定了一个会话(2个进程之间的会话关系)
    • 应用使用这个标示,与远程的应用进程通信
    • 不必在每一个报文的发送都要指定这4元组
    • 就像使用操作系统打开一个文件,OS返回一个文件句柄一样,以后使用这个文件句柄,而不是使用这个文件的目录名、文件名
    • 简单,便于管理

UDP之上的套接字(socket)

  • UDP socket:

    • UDP服务,两个进程之间的通信需要之前无需建立连接
      • 每个报文都是独立传输的
      • 前后报文可能给不同的分布式进程
    • 因此,只能用一个整数表示本应用实体的标示
      • 因为这个报文可能传给另外一个分布式进程 ·1
    • 穿过层间接口的信息大小最小
    • UDP socket:本IP,本端口
    • 但是传输 报文时:必须要提供对方IP,port
      • 接收报文时: 传输层需要上传对方的IP,port
  • 对于使用无连接服务(UDP)的应用而言,套接字是2元组的一个具有本地意义的标示

    • 2元组:IP,port (源端指定)
    • UDP套接字指定了应用所在的一个端节点(end point)
    • 在发送数据报时,采用创建好的本地套接字(标示ID),就不必在发送每个报文中指明自己所采用的ip和port
    • 但是在发送报文时,必须要指定对方的ip和udp port(另外一个段节点)

2.1.5 应用层协议

​ 我们刚刚学习了通过把报文发送进套接字实现网络进程间的相互通信。但是如何构成这些报文?在这些报文中的各个字段的含义是什么?进程何时发送这些报文?这些问题将我们带进应用层协议的范围。**应用层协议(application-layer protocol)**定义了运行在不同端系统的应用程序进程如何相互传递报文。

特别是应用层协议定义了:

  • 交换的报文类型,例如请求报文和响应报文
  • 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的
  • 字段的语义,即这些字段中的信息的 含义
  • 确定一个进程何时以及如何发送报文,对报文进行响应的规则

公开协议:

  • 由RFC文档定义
  • 允许互操作
  • 如HTTP, SMTP

专用(私有)协议:

  • 协议不公开
  • 如:Skype

​ 区分网络应用和应用层协议是很重要的。应用层协议只是网络应用的一部分。例如:Web的应用层协议是HTTP,它定义了在浏览器和Web服务器之间传输的报文格式和序列。因此,HTTP只是Web应用的一个部分。

2.1.6 本书涉及的网络应用

​ 在本章中我们详细讨论5种重要的应用:Web、文件传输、电子邮件、目录服务、流式视频和P2P。我们首先讨论Web应用,不仅因为它是极为流行的应用,而且因为它的应用层协议HTTP比较简单并且容易理解。接下来讨论电子邮件,它使用了多个而不是一个应用层协议。在电子邮件之后,我们学习DNS,它为因特网提供目录服务。大多数用户不直接与DNS打交道,而是通过其他的应用(包括Web、文件传输和电子邮件)间接使用它。DNS很好地说明了一种核心地网络功能(网络名字到网络地址地转换)是怎样在因特网地应用层实现地。然后再讨论P2P文件共享应用,通过讨论包括经内容分发网分发存储地视频在内的按需流式视频,结束应用层的学习。

分布式进程通信需要解决的问题

  • 定义应用层协议:报文格式,解释,时序等
  • 编制程序,使用OS提供的API ,调用网络基础设施提供通信服务传报文,实现应用时序等;

问题1:对进程进行编址(addressing)

  • 进程为了接收报文,必须有一个标识即:SAP(发送也需要标示)

    • 主机:唯一的 32位IP地址
      • 仅仅有IP地址不能够唯一标示一个进程;在一台端系统上有很多应用进程在运行
  • 所采用的传输层协议:TCP or UDP

  • 端口号(Port Numbers)

    • 一些知名端口号的例子:HTTP: TCP 80 Mail: TCP25 ftp:TCP 2
  • 一个进程:用IP+port标示 端节点
  • 本质上,一对主机进程之间的通信由2个端节点构成

问题2:传输层提供的服务-需要穿过层间的信息

  • 层间接口必须要携带的信息

    • 要传输的报文(对于本层来说:SDU)
    • 谁传的:对方的应用进程的标示:IP+TCP(UDP) 端口
    • 传给谁:对方的应用进程的标示:对方的IP+TCP(UDP)端口号
  • 传输层实体(tcp或者udp实体)根据这些信息进行TCP报文段(UDP数据报)的封装

    • 源端口号,目标端口号,数据等

    • 将IP地址往下交IP实体,用于封装IP数据报:源IP,目标IP

问题2.5 :传输层提供的服务-层间信息的代表

  • 如果Socket API 每次传输报文,都携带如此多的信息,太繁琐易错,不便于管理

  • 用个代号标示通信的双方或者单方:socket

  • 就像OS打开文件返回的句柄一样

    • 对句柄的操作,就是对文件的操作
  • TCP socket:

    • TCP服务,两个进程之间的通信需要之前要建立连接

    • 两个进程通信会持续一段时间,通信关系稳定

    • 可以用一个整数表示两个应用实体之间的通信关系,本地标示

    • 穿过层间接口的信息量最小

    • TCP socket:源IP,源端口,目标IP,目标IP,目标端口

问题3:如何使用传输层提供的服务实现应用

定义应用层协议:报文格式,解释,时序等

编制程序,通过API调用网络基础设施提供通信服务传报文,解析报文,实现应用时序等

2.2 Web and HTTP

2.2.1 HTTP概况

​ Web的应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP),它是Web的核心。HTTP由两个程序实现:一个客户端程序和一个服务器程序。在详细解释HTTP之前,应当回顾某些Web术语。

Web页面(也叫文档)是由对象组成的。一个对象只是一个文件,诸如HTML文件、JPEG图像、Java小程序、声音剪辑文件,且它们可通过一个URL地址寻址。Web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用(链接)。
请添加图片描述

  • 客户发起一个与服务器的TCP连接 (建立套接字) ,端口号为 80
  • 服务器接受客户的TCP连接
  • 在浏览器(HTTP客户端)与 Web服务器(HTTP服务器 server)交换HTTP报文 (应用层协议报文)
  • TCP连接关闭

​ HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传Web页面的方式。它使用TCP作为它的支撑运输协议。而其中的详细过程在老师视频由详细讲解。注意到下列现象很重要:服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息。因为HTTP服务器并不保存关于客户的任何信息,所以我们说HTTP是一个无状态协议。我们同时注意到Web使用了客户-服务器应用程序体系结构,Web服务器总是打开的,具有一个固定的IP地址,且它服务于可能来自数以百万计的不同浏览器的请求。

2.2.2 非持续连接和持续连接

​ 当这种客户-服务器的交互是经TCP进行的,应用程序的研制者就需要做一个重要决定,即每个请求/响应对是经一个单独的TCP连接发送,还是所有的请求及其响应经相同的TCP连接发送呢?采用前一种方法,该应用程序被称为使用非持续连接(non-persistent connection);采用后一种方法,该应用程序被称为使用持续连接(persist connection)。尽管HTTP在其默认方式下使用持续连接,HTTP客户和服务器也能配置成使用非持续连接。

1. 采用非持续连接的HTTP

特点:

  • 最多只有一个对象在TCP连接上发送
  • 下载多个对象需要多个TCP连接
  • HTTP/1.0

从服务器向客户传送一个Web页面的步骤。假该页面含有一个HTML基本文件和10个JPEG图形,并且这11个对象位于同一台服务器上。进一步假设该HTML文件的URL为:http://www.someSchool.edu/someDept/home.index。

请添加图片描述

上面的步骤举例说明了非持续连接的使用,其中每个TCP连接在服务器发送一个对象后关闭,即该连接并不为其他的对象而持续下来。值得注意的是每个TCP连接只传输一个请求报文和响应报文。因此在本例中看,当用户请求该Web页面时,要产生11个TCP连接。

​ 在继续讨论之前,我们来简单估算一下从客户请求HTML基本文件起到该客户收到整个文件之所花费的时间。为此,我们给出往返时间的定义=响应时间模型

请添加图片描述

2. 采用持续连接的HTTP
  • 服务器在发送响应后,仍保持TCP连接
  • 在相同客户端和服务器之间的后续请求和响应报文通过相同的连接进行传送
  • 客户端在遇到一个引用对象的时候,就可以尽快发送该对象的请求
  • HTTP/1.1 默认使用

而持久HTTP又分为非流水方式的持久HTTP和流水方式的持久HTTP。

非流水方式的持久HTTP:

  • 客户端只能在收到前一个响应后才能发出新的请求
  • 每个引用对象花费一个RTT

流水方式的持久HTTP:

  • HTTP/1.1的默认模式
  • 客户端遇到一个引用对象就立即产生一个请求
  • 所有引用(小)对象只花费一个RTT是可能的

非持久HTTP的缺点:

  • 每个对象要2个 RTT
  • 操作系统必须为每个TCP连接分配资源
  • 但浏览器通常打开并行TCP连接以获取引用对象

2.2.3 HTTP报文格式

​ HTTP规范包含了对HTTP报文格式的定义。HTTP报文有两种:请求报文响应报文。下面讨论这两种报文。

1. HTTP请求报文

下面提供了一个经典的HTTP请求报文:

GET /somedir/page.html HTTP/1.1   请求行
Host: www.someschool.edu  首部行
User-agent: Mozilla/4.0   首部行
Connection: close         首部行 
Accept-language:fr        首部行

详细解释:HTTP请求报文的第一行叫做请求行(request line),其后继的行叫做首部行(header line)。

请求行有三个字段:方法字段、URL字段和HTTP版本字段。方法字段可以取几种不同的值,包括GET、POST、HEAD、PUT和DELETE,绝大部分的HTTP请求波阿文使用报文使用GET方法。当浏览器请求一个对象时,使用GET方法,在URL字段带有请求对象的标识。在本例中,该浏览器正在请求对/somedir/page.html。其版本字段是自解释的;在本例中浏览器实现的是HTTP/1.1版本。

首部行 Host: www. someschool. edu 指明了对象所在的主机。你也许认为该首部行是不必要的,因为在该主机中已经有一条 TCP 连接存在了但是,如我们将在 2.2.5 节中所见,该首部行提供的信息是 Web 代理高速缓存所要求的。

​ 通过包含 Connection: close 首部行,该浏览器告诉服务器不希望麻烦地使用持续连接,它要求服务器在发送完被请求的对象后就关闭这条连接。

User- agent: 首部行用来指明用户代理,即向服务器发送请求的浏览器的类型。这里浏览器类型是 Mozilla/5. 0 , 即Firefox 浏览器 这个首部行是有用的,因为服务器可以有效地为不同类型的用户代理实际发送相同对象的不同版本 。(每个版本都由相同的URL寻址)。

​ 最后, Accept-language: 首部行表示用户想得到该对象的法语版本(如果服务器中有这样的对象的话) ; 否则,服务器应当发送它的默认版本。 Accept -language 首部行仅是 HTTP 中可用的众多内容协商首部之一。

看过 个例子之后,我们再来看看如图所示的一个请求报文的通用格式

请添加图片描述

然而,你可能已经注意到了在首部行(和附加的回车和换行)后有一个"实体体" (entity body) 使用 GET 方法时实体体为空,而使用POST 方法时才使用该实体体 当用户提交表单时, HTTP 客户常常使用 POST 方法,例如当用户向搜索引擎提供搜索关键词时 使用 POST 报文时,用户仍可以向服务器请求一个Web 页面,但 Web 页面的特定内容依赖于用户在表单字段中输人的内容 如果方法字段的值为 POST 时,则实体体中包含的就是用户在表单字段中的输人值。

当然,如果不提"用表单生成的请求报文不是必须使用POST方法"这一点,那将是失职。HTML 表单经常使用 GET方法,并在(表单字段中)所请求的 URL中包括输入的数据。例如,一个表单使用GET方法,它有两个字段,分别填写的是" monkeys"和"bananas",这样,该 URL 结构为www. somesite. com/animalsearch? monkeys&bananas。在日复一日的网上冲浪中,你也许已经留意到了这种扩展的URL。

HEAD 方法类似于GET方法。当服务器收到使用 HEAD 方法的请求时将会用一个HTTP 报文进行响应,但是并不返回请求对象。应用程序开发者常用 HEAD方法进行调试跟踪。PUT方法常与 Web发行工具联合使用,它允许用户上传对象到指定的 Web 服务器上指定的路径(目录)。 PUT方法也被那些需要向 Web 服务器上传对象的应用程序使用DELETE 方法允许用户或者应用程序删除 Web 服务器上的对象。

2. HTTP响应报文
HTTP/1.1 200 OK\r\n
Connection close\r\n
Date: Thu, 06 Aug 1998 12:00:15 GMT\r\n
Server: Apache/1.3.0 (Unix) \r\n
Last-Modified: Mon, 22 Jun 1998 …... \r
Content-Length: 6821\r\n
Content-Type: text/html\r\n
data data data data data ...

响应报文有三个部分:一个初始状态行(status line),6个首部行(header line),然后是实体体(entity body)。

实体体部分是报文的主要部分,即它包含了所请求的对象本身(表示 data data data data data …)。

状态行:有三个字段:协议版本字段、状态码和相应状态信息。在这个例子中,状态行指示服务器正在使用HTTP/1.1,并且一切正常(即服务器已经找到并正在发送所请求的对象)。

首部行:服务器用connection:close首部行告诉客户,发送完报文后将关闭该TCP连接。Date:首部行指示服务器产生并发送该响应报文的日期和时间(值得一提的是,这个时间不是指对象创建或最后修改的时间,而是服务器从它的文件系统中检索到该对象,将该对象插入响应报文,并发送该响应报文的时间)。Server:首部行指示该报文是一台Apache Web服务器产生的,它类似于Http请求保文中的User-agent:首部行。Last-Modified:首部行指示了对象创建或最后修改的日期和时间。Last-Modified:首部行对即可能在本地客户也可能在网络缓存服务器上的对象缓存来说非常重要。Content Length:首部行指示了被发送对象中的字节数。Content-Type:首部行指示了实体体中的对象是HTML文本。

一些常见的状态码和相关的短语包括:

• 200 OK: 请求成功 信息在返回的响应报文中

• 301 Moved Pernanently: 请求的对象已经被永久转移了,新的 URL 定义在响应报文的Location: 首部行中 客户软件将自动获取新的 URL

• 400 Bad Request: 一个通用差错代码,指示该请求不能被服务器理解

• 404 Not FO lll1 d: 被请求的文档不在服务器上

• 505 HTTP Version Not Supported: 服务器不支持请求报文使用的 HTTP 协议版本

2.2.4 用户和服务器的交互:cookie

我们前面提到了 HTTP 服务器是无状态的。一个 Web 站点通常希望能够识别用户,可能是因为服务器希望限制用户的访问,或者因为它希望把内容与用户身份联系起来。为此. HTTP 使用了 cookie 。**cookie 在[RFC 6265 ]中定义,它允许站点对用户进行眼踪。**目前大多数商务 Web 站点都使用了 cookie。

cookie 技术有4个组件:1) 在HTTP响应报文中有一个cookie的首部行;2)在HTTP请求报文含有一个cookie的首部行;3) 在用户端系统中保留有一个cookie文件,由用户的浏览器管理;4) 在Web站点有一个后端数据库。

请添加图片描述

Cookies与隐私:

  • Cookies允许站点知道许多关于用户的信息

  • 可能将它知道的东西卖给第三方

  • 使用重定向和cookie的搜索引擎还能知道用户更多的信息

  • 如通过某个用户在大量站点上的行为,了解其个人浏览方式的大致模式

  • 广告公司从站点获得信息

2.2.5 Web缓存

Web 缓存器 (Web cache) 也叫代理服务器 (proxy server) ,它是能够代表初始 Web 服务器来满足 HTTP 请求的网络实体。Web 缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。

目标:不访问原始服务器,就满足客户的请求

举例来说:假设浏览器正在请求对象,将会发送如下情况:

  • 用户设置浏览器: 通过缓存访问Web
  • 浏览器将所有的HTTP 请求发给缓存
    • 如果对象在缓存:缓存直接返回对象
    • 如果对象不在缓存,缓存请求原始服务器,然后再将对象返回给客户端

值得注意的是:Web 缓存器是服务器同时又是客户。当它接收浏览器的请求并发回响应时,它是一个服务器;当它向初始服务器发出请求并接收响应时,它是一个客户。Web 缓存器通常由 ISP 购买并安装。例如:一所大学可能在它的校园网上安装一台缓存器,并且将所有校园网上的用户浏览器配置为指向它。

为什么要使用Web缓存?

  • 降低客户端的请求响应时间
  • 可以大大减少一个机构内部网络与Internet接入链路上的流量
  • 互联网大量采用了缓存:可以使较弱的ICP也能够有效提供内容

2.2.6 条件GET方法

尽管高速缓存能减少用户感受到的响应时间,但也引人了一个新的问题,即存放在缓存器中的对象副本可能是陈旧的。换句话说,保存在服务器中的对象自该副本缓存在客户上以后可能已经被修改了。幸运的是, HTTP 协议有一种机制,允许缓存器证实它的对象是最新的。这种机制就是条件GET (conditional GET) 方法。 如果:①请求报文使用 GET 方法;并且②请求报文中包含一个" If-Modified -Since : "首部行。那么,这个 HTTP 请求报文就是一个条件 GET求报文。

目标:如果缓存器中的对象拷贝是最新的,就不要发送对象。

2.3 FTP:文件传输协议

2.4 EMail

​ 在本节中,我们将讨论因特网电子邮件的核心地位的应用层协议。在深入讨论这些应用层协议之前,我们先总体上看看因特网电子邮件系统和它的关键组件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TCvKSG0y-1683618198488)(\picture\电子邮件组成部分.png)]

从该图中我们可以看到它有三个主要组成部分:用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)。下面对每个组成部分进行描述。

  • 用户代理
    • 又名 “邮件阅读器”
    • 允许用户撰写、编辑和阅读邮件
    • 如Outlook、Foxmail
    • 输出和输入邮件保存在服务器上
  • 邮件服务器
    • 邮箱中管理和维护发送给用户的邮件
    • 输出报文队列保持待发送邮件报文
    • 邮件服务器之间的SMTP协议:发送email报文
      • 客户:发送方邮件服务器
      • 服务器:接收端邮件服务器
  • SMTP
  • 使用TCP在客户端和服务器之间传送报文,端口号为25
  • 直接传输:从发送方服务器到接收方服务器
  • 传输的3个阶段
    • 握手
    • 传输报文
    • 关闭
  • 命令/响应交互
    • 命令:ASCII文本
    • 响应:状态码和状态信息
  • 报文必须为7位ASCII码
2.4.1 SMTP

举例:Alice给Bob发送报文

请添加图片描述

  1. Alice使用用户代理撰写邮件并发送给bob@someschool.edu

  2. Alice的用户代理将邮件发送到她的邮件服务器;邮件放在报文队列中

  3. SMTP的客户端打开到Bob邮件服务器的TCP连接

  4. SMTP客户端通过TCP连接发送Alice的邮件

  5. Bob的邮件服务器将邮件放到Bob的邮

  6. Bob调用他的用户代理阅读邮件

观察到下述现象是重要的: SMTP 一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样。假设Alice 的邮件服务器在中国香港,而 Bob 的服务器在美国圣路易斯,那么这个TCP连接也是从香港服务器到圣路易斯服务器之间的直接相连。特别是,如果Bob的邮件服务器没有开机,该报文会保留在Alice 的邮件服务器上并等待进行新的尝试,这意味着邮件并不在中间的某个邮件服务器存留。

2.4.2 与HTTP对比

首先, HTTP 主要是一个拉协议 (pull protocol) , 即在方便的时候,某些人在 Web 服务器上装载信息,用户使用 HTTP 从该服务器拉取这些信息,特别是 TCP 连接是由想接收文件的机器发起的。另一方面,SM胃基本上是一个推协议 (push protocol) ,即发送邮件服务器把文件推向接收邮件服务器。特别是,这个 TCP连接是由要发送该文件的机器发起的。

第二个区别就是我们前面间接地提到过的, SMTP要求每个报文(包括它们的体)使用7比特ASCII码格式。HTTP数据则不受这种限制。二者都是ASCII形式的命令/响应交互、状态码。

第三个重要区别是如何处理一个既包含文本又包含图形(也可能是其他媒体类型)的文档,HTTP 把每个对象封装到它自己的HTTP响应报文中,而SMTP则把所有报文对象放在一个报文之中

2.4.3 邮件报文格式

邮件报文格式

如同 HTTP 协议,每个首部行包含了可读的文本,是由关键词后跟冒号及其值组成的 。某些关键词是必需的,另一些则是可选的。每个首部必须含有一个From: 首部行和一个 To;首部行;一个首部也许包含一个Subject:首部行以及其他可选的首部行。在报文首部之后,紧接着一个空白行,然后是以 ACSII格式表示的报文体 。你应当用Telnet 向邮件服务器发送包含一些首部行的报文,包括 Subject: 首部行。为此,输入命令telnet serverName 25 。

在这里插入图片描述

2.4.4 邮件访问协议

为了能够及时及时接收可能在任何时候到达的新邮件,他的PC必须总是不间断地运行着并一直保持在线。这对于许多因特网用户而言是不现实地。相反,典型的用户通常在本地PC上运行一个用户代理程序,而它访问存储在总是保持开机的共享邮件服务器上的邮箱。该邮件服务器与其他用户共享,并且通常由用户的 ISP 进行维护(如大学或公司)。值得注意的是 Bob 的用户代理不能使用SMTP取回报文,因为取报文是个拉操作,而SMTP协议是一个推协议。通过引人一个特殊的邮件访问协议来解决这个难题,该协议将 Bob 邮件服务器上的报文传送给他的本地PC。目前有一些流行的邮件访问协议,包括第三版的邮局协议 (Post Office Protocol-Version 3 , POP3)、因特网邮件访问协议 (Internet Mail Access Protocol , IMAP) 以及 HTTP。
邮件访问协议

1.POP3协议

POP3是一个极为简单地邮件访问协议,由RFC 1939进行定义。POP3按照三个阶段进行工作:特许(authorization)、事务处理以及更新。在第一个阶段即特许阶段,用户代理发送(以明文)形式用户名和口令以鉴别用户。在第二个阶段即事务处理阶段,用户代理取回报文;同时在这个阶段用户代理还能进行如下操作,对报文做删除标记,取消报文删除标记,以及获取邮件地统计消息。在第三个阶段即更新阶段,它出现在客户发出了quit命令之后,目的是结束POP3会话;这时,该邮件服务器删除那些被标记为删除的报文。

在这里插入图片描述

2.IMAP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-53xfFvFU-1683618198490)(\picture\破皮.png)]

2.5 DNS:因特网的目录服务

DNS系统需要解决的问题

问题1:如何命名设备

用有意义的字符串:好记,便于人类用使用

解决一个平面命名的重名问题:层次化命名

问题2:如何完成名字到IP地址的转换

分布式的数据库维护和响应名字查询

问题3:如何维护:增加或者删除一个域,需要在域名系统中做哪些工作

因特网上的主机名可以使用多种方式进行标识。主机的一种标识方法是用它的主机名(hostname),如www.facebook.com、gaia.cs.umass.edu等。然而,主机名几乎没有提供关于主机在因特网中位置的信息。况且,因为主机名可能由不定长的字母数字组成,路由器难以处理。由于这些原因,主机也可以使用所谓IP地址(IP address)进行标识。

我们将在第四章更为详细地讨论IP地址,单向在简略地介绍一下还是有必要的。一个IP地址由4个字节组成,并有严格的层次结构

2.5.1 DNS提供的服务

我们刚刚看到了识别主机有两种方式,通过主机名或者IP地址。人们喜欢便于记忆的主机名标识方式,而路由器则喜欢定长的、有着层次结构的IP地址。为了折中这些不同的偏好,我们需要一种能进行主机名到地址转换的目录服务。这就是域名系统(Domain Name System,DNS)的主要任务。

DNS 是:①一个由分层的 DNS 服务器( DNS server)实现的分布式数据库; ②一个使得主机能够查询分布式数据库的应用层协议。DNS服务器通常是运行 BIND (Berkeley Internet Name Domain) 软件[ BIND 2012 ]的UNIX机器。DNS协议运行在 UDP 之上,使用 53 号端口。

DNS是为因特网上的用户应用程序以及其他软件提供一种核心功能,即将主机名转换为其背后的地址。

DNS 通常是由其他应用层协议所使用的,包括 HTTP SMTP FTP ,将用户提供的主机名解析为IP地址。

除了进行主机名到 IP 地址的转换外, DNS 还提供了一些重要的服务:

  • 主机别名 (host aliasing):有着复杂主机名的主机能拥有一个或者多个别名。例如,一台名为 relay1. west-coast enterprise. com 的主机,可能还有两个别名为 enter-prise. com 和www. enterprise. com。在这种情况下,relay1. west - coast. enterprise. com 也称为规范主机名 (canonical hostname) .主机别名(当存在时)比主机规范名更加容易记忆 应用程序可以调用 DNS 来获得主机别名对应的规范主机名以及主机的IP地址。
  • 邮件服务器别名到邮件服务器的正规名字的转换:Mail server aliasing
  • 负载均衡:Load Distribution
2.5.2 DNS工作机理概述

DNS 的一种简单设计是在因特网上只使用一个 DNS 服务器,该服务器包含所有的映射。在这种集中式设计中,客户直接将所有查询直接发往单一的 DNS 服务器,同时该 DNS 服务器直接对所有的查询客户做出响应。尽管这种设计的简单性非常具有吸引力,但它不适用于当今的因特网,因为因特网有着数量巨大(并持续增长)的主机,这种集中式设计的问题包括:

  • 单点故障 (a single point of failure)。如果该 DNS 服务器崩溃,整个因特网随之瘫痪!

  • 通信容量( traffic volume)。单个 DNS 服务器不得不处理所有的 DNS 查询(用于为上亿台主机产生的所有 HTTP 请求报文和电子邮件报文服务)

  • 远距离的集中式数据库(distant centralized database)。单个 DNS 服务器不可能"邻近"所有查询客户。如果我们将单台 DNS 服务器放在纽约市,那么所有来澳大利亚的查询必须传播到地球的另一边,中间也许还要经过低速和拥塞的链路。这将导致严重的时延。

  • 维护(maintenance)。单个 DNS 服务器将不得不为所有的因特网主机保留记录。这不仅将使这个中央数据库非常庞大,而且它还不得不为解决每个新添加的主机

    而频繁更新。

因此, DNS 采用了分布式的设计方案。事实上,DNS是一个在因特网上实现分布式数据库的精彩案例。

1. 分布式、层次数据库

大致说来,有三种类型的 DNS 服务器:根 DNS 服务器顶级域 (Top- Level Domain , TLD) DNS 服务器权威 DNS 服务器

  • 根 DNS 服务器:在因特网上有 13 个根 DNS 服务器(标号为 M) ,它们中的大部分位于北美洲。,但每台"服务器"实际上是一个冗余服务器的网络,以提供安全性和可靠性。到了 2011 年秋季,共有 247 个根服务器。
  • 顶级域 (Top- Level Domain , TLD) DNS 服务器:这些服务器负责顶级域名如 com、org、net、 edu 、gov,以及所有国家的顶级域名如uk、fr、ca和 jp。
  • 权威 DNS 服务器:在因特网上具有公共可访问主机(如 Web 服务器和邮件服务器)的每个组织机构必须提供公共可访问的 DNS 记录,这些记录将这些主机的名字映射为 IP 地址 。

除了根、TLD和权威 DNS 服务器都处在该 DNS 服务器的层次结构中,还有另一类重要的 DNS ,称为本地 DNS 服务器 (local DNS server) 。一个本地 DNS 服务器严格说来并不属于该服务器的层次结构,但它对 DNS 层次结构是重要的。

每个ISP (居民区的ISP、公司、大学)都有一个本地DNS服务器,也称为“默认名字服务器”。当一个主机发起一个DNS查询时,查询被送到其本地DNS服务器。起着代理的作用,将查询转发到层次结构中。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

递归查询就是A问了B一个问题,而B不知道答案,但他知道C可能知道答案,所以B跑去问C,C也不知道,但C知道D可能知道,C又跑去问D,D告诉了C答案,而C又把答案告诉B,最后B把答案告诉A

在这里插入图片描述

实践中通常遵循上图,从请求主机到本地 DNS 服务器的查询是递归的,其余的查询是迭代的

2.DNS缓存
  • 一旦名字服务器学到了一个映射,就将该映射缓存起来

  • 根服务器通常都在本地服务器中缓存着

    • 使得根服务器不用经常被访问
  • 目的:提高效率

  • 可能存在的问题:如果情况变化,缓存结果和权威资源记录不一致

  • 解决方案:TTL(默认2天)

2.5.3 DNS记录和报文

共同实现 DNS 分布式数据库的所有 DNS 服务器存储了资源记录 (Resource Record , RR) , RR 提供了主机名到 地址的映射 每个 DNS 回答报文包含了一条或多条资源记录。

资源记录是一个包含了下列字段的4元组:

(Name , Value , Type , TTL)

TTL 是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。在下面给出的记录例子中,我们忽略掉 TTL 字段,Name 和 Value 的值取决于 Type:

  • 如果 Type =A ,则 Name 是主机名, Value 是该主机名对应的 IP 地址。因此,类型为 A 的资源记录提供了标准的主机名到 IP 地址的映射 。
  • 如果 Type = NS ,则 Name 是个域(如 foo. com) ,而 Value 是个知道如何获得该域中主机 IP 地址的权威 DNS 服务器的主机名。这个记录用于沿着查询链来路由 DNS 查询。
  • 如果 Type = CNAME ,则 Value 是别名为 Name 的主机对应的规范主机名。该记录能够向查询的主机提供一个主机名对应的规范主机名。
  • 如果 Type = MX ,则 Value 是个别名为 Name 的邮件服务器的规范主机名。
1. DNS报文

DNS只有查询和回答报文这两种报文,并且,查询和回答报文有着相同的格式。

2. 维护问题:新增一个域
  • 在上级域的名字服务器中增加两条记录,指向这个新增的子域的域名 和 域名服务器的地址

  • 在新增子域 的名字服务器上运行名字服务器,负责本域的名字解析: 名字->IP地址

例子:在com域中建立一个“Network Utopia”

  • 到注册登记机构注册域名networkutopia.com
    • 需要向该机构提供权威DNS服务器(基本的、和辅助的)的名字和IP地址
    • 登记机构在com TLD服务器中插入两条RR记录:
      ​ (networkutopia.com, dns1.networkutopia.com, NS)
      ​ (dns1.networkutopia.com, 212.212.212.1, A)
  • 在networkutopia.com的权威服务器中确保有
  • 用于Web服务器的www.networkuptopia.com的类型为A的记录
  • 用于邮件服务器mail.networkutopia.com的类型为MX的记录
3.攻击DNS

攻击DNS

2.4 EMail

​ 在本节中,我们将讨论因特网电子邮件的核心地位的应用层协议。在深入讨论这些应用层协议之前,我们先总体上看看因特网电子邮件系统和它的关键组件。

请添加图片描述

从该图中我们可以看到它有三个主要组成部分:用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)。下面对每个组成部分进行描述。

  • 用户代理
    • 又名 “邮件阅读器”
    • 允许用户撰写、编辑和阅读邮件
    • 如Outlook、Foxmail
    • 输出和输入邮件保存在服务器上
  • 邮件服务器
    • 邮箱中管理和维护发送给用户的邮件
    • 输出报文队列保持待发送邮件报文
    • 邮件服务器之间的SMTP协议:发送email报文
      • 客户:发送方邮件服务器
      • 服务器:接收端邮件服务器
  • SMTP
  • 使用TCP在客户端和服务器之间传送报文,端口号为25
  • 直接传输:从发送方服务器到接收方服务器
  • 传输的3个阶段
    • 握手
    • 传输报文
    • 关闭
  • 命令/响应交互
    • 命令:ASCII文本
    • 响应:状态码和状态信息
  • 报文必须为7位ASCII码
2.4.1 SMTP

举例:Alice给Bob发送报文

请添加图片描述

  1. Alice使用用户代理撰写邮件并发送给bob@someschool.edu

  2. Alice的用户代理将邮件发送到她的邮件服务器;邮件放在报文队列中

  3. SMTP的客户端打开到Bob邮件服务器的TCP连接

  4. SMTP客户端通过TCP连接发送Alice的邮件

  5. Bob的邮件服务器将邮件放到Bob的邮

  6. Bob调用他的用户代理阅读邮件

观察到下述现象是重要的: SMTP 一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样。假设Alice 的邮件服务器在中国香港,而 Bob 的服务器在美国圣路易斯,那么这个TCP连接也是从香港服务器到圣路易斯服务器之间的直接相连。特别是,如果Bob的邮件服务器没有开机,该报文会保留在Alice 的邮件服务器上并等待进行新的尝试,这意味着邮件并不在中间的某个邮件服务器存留。

2.4.2 与HTTP对比

首先, HTTP 主要是一个拉协议 (pull protocol) , 即在方便的时候,某些人在 Web 服务器上装载信息,用户使用 HTTP 从该服务器拉取这些信息,特别是 TCP 连接是由想接收文件的机器发起的。另一方面,SM胃基本上是一个推协议 (push protocol) ,即发送邮件服务器把文件推向接收邮件服务器。特别是,这个 TCP连接是由要发送该文件的机器发起的。

第二个区别就是我们前面间接地提到过的, SMTP要求每个报文(包括它们的体)使用7比特ASCII码格式。HTTP数据则不受这种限制。二者都是ASCII形式的命令/响应交互、状态码。

第三个重要区别是如何处理一个既包含文本又包含图形(也可能是其他媒体类型)的文档,HTTP 把每个对象封装到它自己的HTTP响应报文中,而SMTP则把所有报文对象放在一个报文之中

2.4.3 邮件报文格式

请添加图片描述

如同 HTTP 协议,每个首部行包含了可读的文本,是由关键词后跟冒号及其值组成的 。某些关键词是必需的,另一些则是可选的。每个首部必须含有一个From: 首部行和一个 To;首部行;一个首部也许包含一个Subject:首部行以及其他可选的首部行。在报文首部之后,紧接着一个空白行,然后是以 ACSII格式表示的报文体 。你应当用Telnet 向邮件服务器发送包含一些首部行的报文,包括 Subject: 首部行。为此,输入命令telnet serverName 25 。

请添加图片描述

2.4.4 邮件访问协议

为了能够及时及时接收可能在任何时候到达的新邮件,他的PC必须总是不间断地运行着并一直保持在线。这对于许多因特网用户而言是不现实地。相反,典型的用户通常在本地PC上运行一个用户代理程序,而它访问存储在总是保持开机的共享邮件服务器上的邮箱。该邮件服务器与其他用户共享,并且通常由用户的 ISP 进行维护(如大学或公司)。值得注意的是 Bob 的用户代理不能使用SMTP取回报文,因为取报文是个拉操作,而SMTP协议是一个推协议。通过引人一个特殊的邮件访问协议来解决这个难题,该协议将 Bob 邮件服务器上的报文传送给他的本地PC。目前有一些流行的邮件访问协议,包括第三版的邮局协议 (Post Office Protocol-Version 3 , POP3)、因特网邮件访问协议 (Internet Mail Access Protocol , IMAP) 以及 HTTP。

请添加图片描述

1.POP3协议

POP3是一个极为简单地邮件访问协议,由RFC 1939进行定义。POP3按照三个阶段进行工作:特许(authorization)、事务处理以及更新。在第一个阶段即特许阶段,用户代理发送(以明文)形式用户名和口令以鉴别用户。在第二个阶段即事务处理阶段,用户代理取回报文;同时在这个阶段用户代理还能进行如下操作,对报文做删除标记,取消报文删除标记,以及获取邮件地统计消息。在第三个阶段即更新阶段,它出现在客户发出了quit命令之后,目的是结束POP3会话;这时,该邮件服务器删除那些被标记为删除的报文。

请添加图片描述

2.IMAP

请添加图片描述

2.5 DNS:因特网的目录服务

DNS系统需要解决的问题

问题1:如何命名设备

用有意义的字符串:好记,便于人类用使用

解决一个平面命名的重名问题:层次化命名

问题2:如何完成名字到IP地址的转换

分布式的数据库维护和响应名字查询

问题3:如何维护:增加或者删除一个域,需要在域名系统中做哪些工作

因特网上的主机名可以使用多种方式进行标识。主机的一种标识方法是用它的主机名(hostname),如www.facebook.com、gaia.cs.umass.edu等。然而,主机名几乎没有提供关于主机在因特网中位置的信息。况且,因为主机名可能由不定长的字母数字组成,路由器难以处理。由于这些原因,主机也可以使用所谓IP地址(IP address)进行标识。

我们将在第四章更为详细地讨论IP地址,单向在简略地介绍一下还是有必要的。一个IP地址由4个字节组成,并有严格的层次结构

2.5.1 DNS提供的服务

我们刚刚看到了识别主机有两种方式,通过主机名或者IP地址。人们喜欢便于记忆的主机名标识方式,而路由器则喜欢定长的、有着层次结构的IP地址。为了折中这些不同的偏好,我们需要一种能进行主机名到地址转换的目录服务。这就是域名系统(Domain Name System,DNS)的主要任务。

DNS 是:①一个由分层的 DNS 服务器( DNS server)实现的分布式数据库; ②一个使得主机能够查询分布式数据库的应用层协议。DNS服务器通常是运行 BIND (Berkeley Internet Name Domain) 软件[ BIND 2012 ]的UNIX机器。DNS协议运行在 UDP 之上,使用 53 号端口。

DNS是为因特网上的用户应用程序以及其他软件提供一种核心功能,即将主机名转换为其背后的地址。

DNS 通常是由其他应用层协议所使用的,包括 HTTP SMTP FTP ,将用户提供的主机名解析为IP地址。

除了进行主机名到 IP 地址的转换外, DNS 还提供了一些重要的服务:

  • 主机别名 (host aliasing):有着复杂主机名的主机能拥有一个或者多个别名。例如,一台名为 relay1. west-coast enterprise. com 的主机,可能还有两个别名为 enter-prise. com 和www. enterprise. com。在这种情况下,relay1. west - coast. enterprise. com 也称为规范主机名 (canonical hostname) .主机别名(当存在时)比主机规范名更加容易记忆 应用程序可以调用 DNS 来获得主机别名对应的规范主机名以及主机的IP地址。
  • 邮件服务器别名到邮件服务器的正规名字的转换:Mail server aliasing
  • 负载均衡:Load Distribution
2.5.2 DNS工作机理概述

DNS 的一种简单设计是在因特网上只使用一个 DNS 服务器,该服务器包含所有的映射。在这种集中式设计中,客户直接将所有查询直接发往单一的 DNS 服务器,同时该 DNS 服务器直接对所有的查询客户做出响应。尽管这种设计的简单性非常具有吸引力,但它不适用于当今的因特网,因为因特网有着数量巨大(并持续增长)的主机,这种集中式设计的问题包括:

  • 单点故障 (a single point of failure)。如果该 DNS 服务器崩溃,整个因特网随之瘫痪!

  • 通信容量( traffic volume)。单个 DNS 服务器不得不处理所有的 DNS 查询(用于为上亿台主机产生的所有 HTTP 请求报文和电子邮件报文服务)

  • 远距离的集中式数据库(distant centralized database)。单个 DNS 服务器不可能"邻近"所有查询客户。如果我们将单台 DNS 服务器放在纽约市,那么所有来澳大利亚的查询必须传播到地球的另一边,中间也许还要经过低速和拥塞的链路。这将导致严重的时延。

  • 维护(maintenance)。单个 DNS 服务器将不得不为所有的因特网主机保留记录。这不仅将使这个中央数据库非常庞大,而且它还不得不为解决每个新添加的主机

    而频繁更新。

因此, DNS 采用了分布式的设计方案。事实上,DNS是一个在因特网上实现分布式数据库的精彩案例。

1. 分布式、层次数据库

大致说来,有三种类型的 DNS 服务器:根 DNS 服务器顶级域 (Top- Level Domain , TLD) DNS 服务器权威 DNS 服务器

  • 根 DNS 服务器:在因特网上有 13 个根 DNS 服务器(标号为 M) ,它们中的大部分位于北美洲。,但每台"服务器"实际上是一个冗余服务器的网络,以提供安全性和可靠性。到了 2011 年秋季,共有 247 个根服务器。
  • 顶级域 (Top- Level Domain , TLD) DNS 服务器:这些服务器负责顶级域名如 com、org、net、 edu 、gov,以及所有国家的顶级域名如uk、fr、ca和 jp。
  • 权威 DNS 服务器:在因特网上具有公共可访问主机(如 Web 服务器和邮件服务器)的每个组织机构必须提供公共可访问的 DNS 记录,这些记录将这些主机的名字映射为 IP 地址 。

除了根、TLD和权威 DNS 服务器都处在该 DNS 服务器的层次结构中,还有另一类重要的 DNS ,称为本地 DNS 服务器 (local DNS server) 。一个本地 DNS 服务器严格说来并不属于该服务器的层次结构,但它对 DNS 层次结构是重要的。

每个ISP (居民区的ISP、公司、大学)都有一个本地DNS服务器,也称为“默认名字服务器”。当一个主机发起一个DNS查询时,查询被送到其本地DNS服务器。起着代理的作用,将查询转发到层次结构中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Dx6jTje-1684735692353)(\picture\DNS大致工作过程.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-knqGJJUR-1684735692354)(\picture\递归查询.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KpKF9gdZ-1684735692354)(\picture\迭代查询.png)]

递归查询就是A问了B一个问题,而B不知道答案,但他知道C可能知道答案,所以B跑去问C,C也不知道,但C知道D可能知道,C又跑去问D,D告诉了C答案,而C又把答案告诉B,最后B把答案告诉A

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hbOgcaJj-1684735692354)(\picture\各种DNS服务器的交互.png)]

实践中通常遵循上图,从请求主机到本地 DNS 服务器的查询是递归的,其余的查询是迭代的

2.DNS缓存
  • 一旦名字服务器学到了一个映射,就将该映射缓存起来

  • 根服务器通常都在本地服务器中缓存着

    • 使得根服务器不用经常被访问
  • 目的:提高效率

  • 可能存在的问题:如果情况变化,缓存结果和权威资源记录不一致

  • 解决方案:TTL(默认2天)

2.5.3 DNS记录和报文

共同实现 DNS 分布式数据库的所有 DNS 服务器存储了资源记录 (Resource Record , RR) , RR 提供了主机名到 地址的映射 每个 DNS 回答报文包含了一条或多条资源记录。

资源记录是一个包含了下列字段的4元组:

(Name , Value , Type , TTL)

TTL 是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。在下面给出的记录例子中,我们忽略掉 TTL 字段,Name 和 Value 的值取决于 Type:

  • 如果 Type =A ,则 Name 是主机名, Value 是该主机名对应的 IP 地址。因此,类型为 A 的资源记录提供了标准的主机名到 IP 地址的映射 。
  • 如果 Type = NS ,则 Name 是个域(如 foo. com) ,而 Value 是个知道如何获得该域中主机 IP 地址的权威 DNS 服务器的主机名。这个记录用于沿着查询链来路由 DNS 查询。
  • 如果 Type = CNAME ,则 Value 是别名为 Name 的主机对应的规范主机名。该记录能够向查询的主机提供一个主机名对应的规范主机名。
  • 如果 Type = MX ,则 Value 是个别名为 Name 的邮件服务器的规范主机名。
1. DNS报文

DNS只有查询和回答报文这两种报文,并且,查询和回答报文有着相同的格式。

2. 维护问题:新增一个域
  • 在上级域的名字服务器中增加两条记录,指向这个新增的子域的域名 和 域名服务器的地址
  • 在新增子域 的名字服务器上运行名字服务器,负责本域的名字解析: 名字->IP地址

例子:在com域中建立一个“Network Utopia”

  • 到注册登记机构注册域名networkutopia.com

    • 需要向该机构提供权威DNS服务器(基本的、和辅助的)的名字和IP地址
    • 登记机构在com TLD服务器中插入两条RR记录:
      (networkutopia.com, dns1.networkutopia.com, NS)
      (dns1.networkutopia.com, 212.212.212.1, A)
  • 在networkutopia.com的权威服务器中确保有

    • 用于Web服务器的www.networkuptopia.com的类型为A的记录
    • 用于邮件服务器mail.networkutopia.com的类型为MX的记录
3.攻击DNS

请添加图片描述

2.6 P2P 应用

P2P应用即单一服务器向大量主机(称为对等方)分为一个大文件。在C/S文件分发中,该服务器必须向每个对等方发送该文件的一个副本,即服务器承受了极大的负担,并且消耗了大量的服务器带宽。在P2P文件分发中,每个对等方能够向任何其他对对等方重新分发它已经收到的该文件的任何部分,从而在分发过程中协助该服务器。到2016年止,最为流行的P2P文件分发协议BitTorrent

纯P2P架构

  • 没有(或极少)一直运行的服务器
  • 任意端系统都可以直接通信
  • 利用peer的服务能力
  • Peer节点间歇上网,每次IP地址都有可能变化

例子:文件分发 (BitTorrent)、流媒体(KanKan)、VoIP (Skype)

1.P2P体系结构的扩展性

请添加图片描述

分发时间是所有N个对等方得到该文件的副本所需要的时间。

2.7 CDN

2.8 TCP 套接字编程

2.9 UDP 套接字编程

传输层

网络层:数据平面

网络层:控制平面

数据链路层和局域网

网络安全

无线和移动网络

多媒体网络

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值