计算机网络和因特网大二暑假

本文详细阐述了计算机网络和因特网的基本概念,包括架构、服务、协议、网络边缘、核心网络、接入与物理媒体、ISP与主干、时延与分组丢失、协议层次及服务模型等内容,旨在帮助读者全面掌握网络与因特网的运行机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 计算机网络和因特网

1.1 什么是因特网

网络和网络协议的总体概述。

1.1.1 架构描述

端系统(end system) = 主机(host)

端系统通过通信链路(communication links)连接到一起。
因特网并不在通信端系统指奸提供专用路径,而是使用了分组交换(packet switching)技术。

分组交换技术:允许多个通信端系统同时共享一条路径,或路径的一部分。

端系统通过因特网服务提供商(Internet Service Provider,ISP)接入因特网。

每个端系统、路由器和其他因特网部件都要运行控制因特网中信息接收和发送的协议(protocol)

最重要的两个协议是TCP(Transmission Control Protocol,传输控制协议)IP(Internet Protocol,互联网协议)。因特网的主要协议统称为TCP/IP协议。

许多专用网络如公司和政府网络网内的主机不能于专网外部的主机交换信息(除非这些信息通过了限制报文流进和流出网络的防火墙),这些专用网络被称为内联网(Intranet)

1.1.2 服务描述

1.1.3 什么是协议

人类活动的类比

A:你好(TCP连接请求)

B:你好(TCP连接响应)

A:几点了(GET http://www.awl.com/kurose-ross

B:两点了(<文件>)

网络协议

凡是涉及到两个或多个通信的远程实体,都要受协议制约。协议不同则无法交流。

协议:定义了在两个或多个通信实体之间交换的报文格式和次序,以及就一条报文传输或接收或其他事件所采取的动作。

1.1.4 一些好的超链接

1.2 网络边缘

现在深入研究一些因特网的部件。

1.2.1 端系统、客户机、服务器

端系统:与因特网相连的计算机通常被称为端系统,也被成为主机。主机可进一步被划分为客户机(client)服务器(server)

1.2.2 无连接和面向连接的服务

TCP/IP网络,特别是因特网,为端系统应用程序提供了两类服务:无连接服务(connectionless service)面向连接服务(connection-oriented service,连接导向的服务)

面向连接服务

在客户机程序和服务器程序之间发送具有实际数据的分组之前,要彼此发送控制分组,这种握手过程提醒客户机和服务器,使之对随后的分组的到来做好准备。握手结束则可以说两个端系统之间创建了连接。

仅有端系统自己才知道有这种连接,分组交换机(packetswitch)(即路由器,router)则完全不留意该连接。连接只在端系统中分配缓存和状态变量。
面向连接服务和其他几个服务是共存的:

可靠数据传送(reliable data transfer):无差错按序传递所有数据。

流控制(flow control):确保一方不会过快地发送过量的分组而淹没另一方。

拥塞控制(congestion-control):防止因特网进入迟滞(gridlock)状态。

因特网的面向连接服务有一个名字叫做传输控制协议(TCP),它提供给应用程序的服务包括可靠数据传送、流控制、拥塞控制。

无连接服务

又称为用户数据报协议(User Datagram Protocol,UDP),在因特网无连接服务中不存在握手,直接发送分组。由于没有握手,数据能被更快地传递,但数据传送也没有可靠性可言,因此源主机不能确定哪些分组到达了目的地。而且,也没有流控制等服务。

我们最熟悉的因特网应用程序多数使用的是TCP,即基于因特网面向连接服务。包括FTP(文件传输)、HTTP(用于Web)、SMTP(用于电子邮件)等。

1.3 网络核心

考虑完端系统和端到端传输服务模型,我们来更输入的研究一下网络“内部”。

1.3.1 电路交换和分组交换

两种构建网络核心的方法:电路交换(circuit switching)分组交换(packet switching)

电路交换网中,沿着端系统系统通信路径所需要的资源(缓存,链路带宽)在通信会话期间将会被预留。在分组交换网中,则不会,但是一旦遇到拥堵,将不得不等待。类似于餐馆吃饭,要么预定,要么不预定但不保证一定能安排。

我们的电话网络就是电路交换网络的例子。

因特网则是分组交换网络的典范。

电路交换

当两台主机要通信,网络会在两台主机之间建立一条专用的端到端连接(end-to-end connection)

网络必须在两条链路之上预留一条电路。如果每条链路具有 n 条电路,则该连接在连接期间获得了该链路带宽的1n

电路交换网络中的复用

频分复用(frequen-division multiplexing,FDM):链路的频谱由跨越链路创建的连接所共享,链路在连接期间为每个连接专用一个频段。频段的宽度称为带宽(bandwidth)。电话网络中,这个频段通常是4kHz。调频无线电台也使用FDM来共享微波频段。

时分复用(time-division multiplexing,TDM):时间被划分为固定区间的帧,每一帧又被划分为固定数量的时隙,这些时隙被用于该连接。比如每帧四个时隙,每到2号时隙,该连接就周期性地得到所有带宽。

分组交换

将长报文划分为较小的数据块,称之为分组(packet)。所以路由器又被称为分组交换机(packet switch)

分组交换机在输入端使用存储转发传输(store-and-forward transmission)机制。

存储转发传输:必须接收完整个分组,才会开始向输出链路传输。

每个路由器都有一个输出缓存(output buffer)(也称为输出队列,output queue),如果缓存空间被等待传输的分组占满,则会出现分组丢失(packet lost)

除了存储转发延时,还有排队时延时。

分组交换与电路交换

电路交换在静默期间(silent period)(即不使用网路,但是仍旧占用者。比如打电话时候的沉默)专用电路空闲而效率较低。电路交换必须一直占用资源,而分组交换不需要,所以同样的带宽,分组交换能支持远大于电路交换的人数。

eg:

假设:

一个用户在线时仅有10%的活动时间,活动时以100kbit/s的速率产生数据;链路带宽为1Mbit/s。

结果:

电路交换只能支持10人同时在线。

对于分组交换 ,假设有35个用户,小于等于10个人同时在线的概率为0.0004,也就是说0.9996的情况下,这根宽带支撑35人同时上网完全没问题。

报文分段

分段会比不分段复杂,但是其优点大大补偿了它的复杂性。

源如果不分割报文,分组交换网络执行的是报文交换(message switching)。所以,报文交换是一种特殊的分组交换。
优点:
- 分组交换机在输入端使用机制,必须接收完整个分组,才会开始向输出链路传输,所以分段可以(在第一个分组到达最后一个交换机后)让所有的节点都在传输,形成流水线(pipeline)
- 分组会产生比特差错,如果报文中出现一个比特错误,则一组都要被丢弃,如果不分组,则只能丢弃整个报文。

1.3.2 计算机网络中的分组转发

分组交换网络有两类:数据报网络(datagram network)虚电路网络(virtual circuit network)

数据报网络:根据主机目的地址转发分组的网络。

虚电路网络:根据虚电路号转发分组的网络。

虚电路

为了进行数据的传输,网络的源节点和目的节点之间先要建立一条逻辑通路,因为这条逻辑电路不是专用的,所以称之为“虚”电路。每个节点到其它任一节点之间可能有若干条虚电路支持特定的两个端系统之间的数据传输,两个端系统之间也可以有多条虚电路为不同的进程服务。这些虚电路的实际路径可能相同,也可能不同。

虚电路络中的交换机根据分组的VC(virtual circuit)号转发分组,需要维护连接状态;数据报网络中的交换机根据分组的目的地址转发分组(就好像送快递一样,根据省市县一级级找下去),不需要维护连接状态。

特点:

虚电路提供了可靠的通信功能,能保证每个分组的正确到达,且分组保持原来顺序。另外,还可以对两个数据端点的流量进行控制,当接收方来不及接收数据时,可以通知发送方暂缓发送分组,但虚电路有一个致命的弱点,即当某个节点或某条链路出故障而彻底失效时,则所有经过该节点或该链路的虚电路将遭到破坏。而在数据报方式中,这种故障的影响面要小得多,当发生上述故障时,仅有缓存在该节点上的分组可能丢失,其它分组则可绕开故障区到达目的地,或者一直被搁置到故障修复后再传送。不过,数据报不保证数据分组的按序到达,数据的丢失也不会立即被发现。

数据报网络

在数据报方式中,每个分组被称为一个数据报。若干个数据报构成一次要传送的报文或数据块。每个数据报自身携带有足够的信息。它的传送是被单独处理的。一个节点接收到一个数据报后,根据数据报中的地址信息和节点所存储的路由信息,找出一个合适的出路,把数据报原样地发送到下一个节点。

数据报网络在许多方面与邮政服务类似。

特点:

数据报免去了呼叫建立过程,在分组传输数量不多的情况下要比虚电路简单灵活。每个数据报可以临时根据网络中的流量情况选取不太拥挤的链路,不象虚电路中的每个分组必须按照连接建立时的路径传送。每个节点没有额外开销,但每个分组在每个节点都要经过路由选择处理,会影响传送速度。

虚电路与数据报的区别:
- 从占用通信子网资源的方面看:虚电路服务将占用存储交换机的存储空间,而数据报服务对每个其完整的目标地址独立选径,如果传送大量短的分组,数据头部分大于数据部分,则会浪费带宽
- 从时间开销方面看:虚电路服务有创建连接时间的开销,对传送小量的短分组,显得很浪费;而数据报服务决定分组的去向过程很复杂,对每个分组都有分析时间的开销;
- 从拥塞避免方面看:虚电路服务对连接起来的资源可以预存下来,一旦分组到达,所需的带宽和结点交换机的容量便已拥有,因此有一些避免拥塞的优势。而数据报服务则很难;
- 从健壮性方面看:通信线路的故障对虚电路服务是致命的因素,但对数据报服务则可以通过调整路由得到补偿。因此虚电路服务更脆弱;
- 网络所提供的上述这两种服务的思路来源不同:虚电路服务的思路来源于传统的电信网。数据报服务使用另一种完全不同的新思路。它力求使网络顽存性好和使对网络的控制功能分散,因而只能要求网络提供最大努力的服务。

虚电路与电路交换的区别:
- 首先,最根本的一点,虚电路的思想来自于传统的电路交换。虚电路交换属于分组交换,采用电路交换方式,而非真正的电路交换。所以说是“虚”的。CS(Circuit Switching) resides at the physical layer, VC(Virtual Circuit) resides at the network layer.
- 电路交换通常是在物理层,譬如打电话等。此时整个物理线路的带宽是由该通讯独占的。
- 虚电路交换在一条物理线路上虚拟出多个逻辑的通道,此时该物理线路上可以有多条通讯量,每条通讯独占一条虚拟电路。多个虚拟电路通过时分/频分等多路复用方式复用到一条物理链路上。

网络分类

电信网络要么使用电路交换,要么使用分组交换;

电路交换网络的链路要么使用FDM,要么使用TDM;

分组交换网络要么是虚电路网络,要么是数据报网络。

1.4 网络接入和物理媒体

1.5 ISP和因特网主干

第一层ISP也被称为因特网主干(Internet backbone)

下一层ISP被称为上一层的客户(customer),上一层被称为下一层的提供商(provider)。

入网点(Point of Presence,POP)是将互联网从一个地方接到另一个地方的接入点。

1.6 分组交换网络中的时延和分组丢失

注意这些时延仅存在于分组交换网络中。

1.6.1 时延的类型

仅当在该链路中没有其他分组正在传输,并且没有其他分组排在该队列的前面时,才能在这条链路上传输该分组。

节点总时延(total nodal delay) = 节点处理时延(nodal processing delay) + 排队时延(queuing delay) + 传输时延(transmission delay) + 传播时延(propagation delay)

处理时延(processing delay)

检查分组的首部和决定将该分组导向何处所需要的时间(除此之外还有很多,比如检查比特级别差错等)。

通常是微秒级或更低。

排队时延(queuing delay)

在路由器的等待队列(也称缓存)中的时间。

传输时延(transmission delay)

仅当所有已到达的分组被传输后,才能传输下一个分组。

L(bits) :分组的长度。

R(bits/s) :链路的传输速率。如 R=10Mbit/s

Note传输速率不是传播速率,传播速率是接近光速的值,单位为 m/s

将所有分组的比特推向链路所需要的时间。又叫存储转发时延 LR=

传播时延(propagation delay)

t(s)=l(m)/v(m/s)

传输时延和传播时延的比较

传输时延是路由器将分组传出去所需要的时间,只与分组长度和链路传输速率有关;传播时延是从一台路由器到另一台路由器的时间。

1.6.2 排队时延和分组丢失

流量强度(traffic intensity) LaR

L(bits):分组长度,更确切的说,应该是bits/pkt

a(pkt/s,分组每秒):分组到达队列的平均速率

R(bit/s):传输速率,比特从队列推出的时间

流量强度 > 1将导致排队时延越来越大,拥堵越来越严重。平均排队时延与流量强度的相关性几乎是指数级的。

分组丢失

由于链路前队列的容量是有限的,所以当队列满了之后,再来的分组会被丢弃(drop),该分组丢失(lost)。丢失的分组可能会在端到端的基础上重传。

1.6.3 因特网中的时延和路由

使用Traceroute诊断程序:http://www.traceroute.org

1.7 协议层次及其服务模型

1.7.1 分层的体系结构

分层(layer)可以将一个大的系统展现的很清晰,而且好维护,只要某一层向上提供相同的服务,向下接受相同的服务,则改变该层服务的实现是不影响大局的。

1.7.2 因特网协议栈

协议数据单元PDU(Protocol Data Unit)是指对等层次之间传递的数据单位。

协议数据单元(Protocol Data Unit )物理层的 PDU是数据位(bit),数据链路层的 PDU是数据帧(frame),网络层的PDU是数据包(packet),传输层的 PDU是数据段(segment),其他更高层次的PDU是报文(message)。

层次协议栈协议数据单元PDU
第5层应用层报文(message)
第4层运输层报文段
第3层网络层数据报
第2层链路层
第1层物理层1-PDU
应用层

负责支持网络应用程序。支持的协议包括HTTP(Web)、SMTP(email)、FTP(file)。

运输层

负责在应用程序的客户机和服务器之间传输应用层报文(注意是端到端(end-to-end),而不是链路层的节点到节点)。

运输协议有两个:TCP(Transmission Control Protocol,传输控制协议,又称面向连接的服务)UDP(User Datagram Protocol,用户数据报协议,又称无连接服务)

网络层

负责为数据报从一台主机传输到另一台主机选路。IP(Internet Protocol,互联网协议,网络之间互联的协议)协议

IP协议是将因特网连接在一个的粘合剂。

链路层

网络层通过一系列分组交换机(路由器)在源和目的之间发送分组,而将分组从一个节点(主机或分组交换机)移动到下一个节点,网络层依靠链路层的服务。

在每个节点,网络层将数据报下传给链路层,链路层将其传输到下一个节点,再将数据报上传给网络层。

物理层

链路层是一个网络单元到下一个网络单元逸动整个帧,而物理层则是将该帧中的单个比特从一个节点移动到下一个节点。

2 应用层

网络应用是计算机网络存在的理由。

2.1 应用层协议原理

网络应用程序的软件分布于两个或更多的端系统(即主机)中。如,Web应用由相互通信的两部分软件组成:位于用户主机的浏览器软件,位于Web服务器的Web服务器程序。

进行通信的不是程序,而是进程(process)

当通信的进程位于相同的端系统中,使用的是进程间通信。当位于不同的端系统中,进程通过计算机网络交换报文(message)互相通信。

2.1.1 应用层协议

应用层协议(application-layer protocal)网络应用(network application)的一部分(相当大的一部分)。如,Web应用是一种允许客户机按照需求从Web服务器获得“文档”的网络应用。其组成部分包括:文档格式的标准(html)、Web浏览器(chrome)、Web服务器程序(Apache)、应用层协议(http)

应用层协议(如http)定义了运行与不同端系统上的一个用程序进程间互相传递报文的方式。尤其定义了:
- 交换的报文类型,如请求报文和相应报文
- 各种报文类型的语法,如报文各个字段及其描述
- 字段的语义,即字段包含信息的含义
- 进程何时以及如何发送报文,对报文相应的规则

应用程序的客户机和服务器

很多应用中,客户机侧和服务器侧可能需要在同一台主机上实现。如,当两台主机建立FTP会话,任何一方都可以向另一方传输文件,既是客户机,又是服务器。

网络上的进程通信

套接字(socket):源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。

套接字是是同一台主机内应用层与运输层的接口。由于套接字是在网络上建立网络应用程序的可编程接口,因此也叫做应用程序和网络之间的应用程序接口(application programmer’s interface,API)

网络进程通信,进程通过它的套接字在网络上发送和接收报文,并对接收到的报文进行处理。

进程寻址

一台主机的进程能向另一台主机的进程发送报文,必须识别接收进程,要定义两种信息:
- 该主机的名称或地址;(IP地址(Internet Protocol address)
- 用来指定目的主机上接收进程的标识。(端口号(port number)

一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。

服务器一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用知名的1~1023之间的端口号。这些知名端口号由Internet号分配机构(InternetAssignedNumbersAuthority,IANA)来管理。

2.1.2 应用所需要的服务

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

因特网(或TCP/IP网络)上的应用使用了两个运输层协议:用户数据报协议(User Datagram Protocol,UDP)传输控制协议(Transmission Control Protocol,TCP)。当开发者创建一个因特网应用时,需要选择一个协议,每个协议提供了不同的服务模型。

TCP服务

单工(Simplex Communication):数据传输是单向的。只允许甲方向乙方传送信息,而乙方不能向甲方传送 。比如汽车的单行道。通信双方中,一方固定为发送端,一方则固定为接收端。信息只能沿一个方向传输,使用一根传输线。

半双工(Half Duplex):所谓半双工就是指一个时间段内只有一个动作发生。举个简单例子,一条窄窄的马路,同时只能有一辆车通过,当目前有两辆车对开,这种情况下就只能一辆先过,等到头儿后另一辆再开。早期的对讲机、以及早期集线器等设备都是基于半双工的产品。

全双工(Full Duplex):通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。A→B的同时B→A,是瞬时同步的。

  • 面向连接的服务:使用TCP协议,数据报文流动之前先握手,握手之后一个TCP连接(TCP connection)建立,这个连接是全双工的。结束报文发送后,必须拆除该连接。之所以称之为“面向连接”服务,而不是“连接”服务,或“虚电路”服务,是因为连个进程之间的连接方式非常松散。
  • 可靠的传输服务:以无差错、按适当顺序交付发送的数据。
  • 拥塞控制机制:对整个互联网的益处远大于对通信进程的直接好处。当两个进程之间的网络发生拥堵时,TCP协议的拥塞控制机制抑制发送过程。

然而,由于实时音频视频对宽带限制有最低要求,所以抑制传输速率对其影响很大。而且实时应用可以容忍数据丢失,并不需要完全可靠的传输服务,所以实时应用开发者常把应用放在UDP协议上。

  • 不保证最小传输速率,不允许进程按照自己的意愿以任意速率发送,必须接受拥塞控制机制的制约;
  • 不提供时延保证,虽然最终报文都能到达,但不保证传输时间;(world wide wait,世界范围的等待
UDP服务
  • 不提前握手,无连接;
  • 不可靠的数据传输服务,既不保证报文到达的顺序,也不保证报文一定被接收进程收到;
  • 没有拥塞控制协议;
  • 不提供延时保证;

选择TCP的应用(要求可靠的数据传输服务,保证所有数据最终到达目的地):电子邮件(smtp)、Web(http)、文件传输(ftp)、远程终端访问(telnet)

选择UDP的应用(有最低速率要求,可以忍受一定的数据丢失):因特网电话、语音通话、视频通话、流式多媒体

2.2 Web应用和HTTP协议

2.2.1 HTTP概况

Web页:又称文档,是由对象组成的。对象简单来说就是一个具有单个URL地址的文件,如HTML文件、JPEG文件、GIF文件、Java小程序、声音剪辑文件等。多数 Web=HTML+

HTTP协议有HTTP/1.0和HTTP/1.1。均使用TCP。一旦一个HTTP请求报文被客户机发送,该报文就“脱离了客户机的控制”,“进入了TCP的控制”。(互联网的分层结构)

HTTP是无状态协议,比如你在短时间内发送了两次请求同一个对象的请求,HTTP服务器就会发送回两次对象,而不会因为刚给过就不发送了。

2.2.2 非持久连接和持久连接

HTTP/1.0是非持久连接;HTTP/1.1是持久连接。

非持久连接

比如一个Web页含有一个基本HTML文件和10个JPEG图形,则:

  • HTTP客户机根据HTML文件的URL(比如:www.baidu.com/somedir/haha.index)初始化一个到服务器www.baidu.com的TCP连接,使用HTTP协议默认的端口80;
  • HTTP客户机发送HTTP请求报文
  • HTTP服务器获取报文,从存储设备(内存/磁盘)中检索出对象/somedir/haha.index,在HTTP响应报文中封装该对象,发送;
  • HTTP服务器断开TCP连接(但是知道确认客户机收到响应报文后TCP连接才真正结束);
  • HTTP客户机收到响应报文,TCP连接关闭,客户机从报文中提取文件,检查文件,得到10个JPEG的URL;
  • 对每个JPEG的URL重复前四步。

浏览器程序在浏览器和Web服务器之间初始化一个TCP连接的“三次握手”:
1. 客户机发送一个小TCP报文段到服务器;
2. 服务器用一个小TCP报文段确认和回应;
3. 客户机向服务器返回确认(与此同时,客户机会将一个HTTP请求报文合并发送到该TCP连接)。

持久连接

非持久连接每请求一个对象都要建立一个新的连接,既浪费时间,又给服务器带来严重负担。

持久连接情况下,服务器发送相应后保持该TCP连接。如果一个连接经过一定的时间间隔(可配置的超时间隔)仍未被使用,HTTP服务器再关闭该连接。

持久连接分为流水线方式(HTTP/1.1协议默认方式)和非流水线方式(客户机只能在前一个响应收到之后才能发出新的请求)。

2.2.3 HTTP报文格式

HTTP报文有两种:请求报文、相应报文。

HTTP请求报文
GET /somedir/haha.html HTTP/1.1
Host: www.baidu.com
Connection: close
User-Agent: Mozilla/4.0
Accept-language: fr

请求体使用GET方法时为空,使用POST方法时才使用,比如输入搜索引擎的关键字。然而,产生表单的请求报文并不一定非得使用POST,比如百度有时就会把关键字整合到URL中。

HTTP响应报文

刚刚的请求报文的响应报文:

HTTP/1.1 200 OK                             //初始化状态行
Connection: close                           //接下来是首部行
Date: Thu, 06 Aug 2015 07:49:04 GMT
Server: Apache
Last-Modified: Mon, 22 Jun 1998 09:23:24 GMT
Content-Length: 6821
Content-Type: text/html

(data data data data data data data ...)    //实体主体
  • Connection: close:服务器告诉客户机报文发送之后它关闭了TCP连接;
  • Date:服务器从文件系统中检索到该对象,插入相应报文发送的时间;不是创建对象或最后修改对象的时间
  • Last-Modified:对象创建或最后修改的时间,对于缓存非常重要,接下来介绍;
  • Content-Type:用此来表明对象类型,而不是拓展名;
  • 200 OK:请求成功,信息包含在响应报文中。

2.2.4 用户服务器交互:特许和Cookies

特许

很多站点需要提供用户名和口令才能访问,就是特许(authorization)
- 客户机先发送不带特殊首部行的普通请求报文;
- 服务器发送响应报文,实体主体为空,状态码401 Authorization Required,包含WWW-Authenticate:的首部行;
- 客户机(浏览器)收到响应报文,提示用户输入,重新发送请求报文,包含Authorization:首部行,内容为输入的用户名和口令;
- 客户机在后继的报文中携带用户名和口令。

Cookies

2.2.5 条件GET方法

通过存储之前检索的对象,Web缓存可以减小对象检索的时延,并减少穿越因特网的Web信息量。Web缓存可以存放在客户机(由浏览器管理)或者存放在一个中间体网络缓存服务器中。

为了防止存储的对象已经过期,HTTP协议使用了条件GET(conditional GET)机制。

条件GET:请求报文使用GET方法,且报文中包含If-Modified-Since:首部行。

一个条件GET根据上一次访问的情况,将服务器响应报文的Last-modified:作为自己的If-Modified-Since:的值

GET /fruit/kiwi.gif HTTP/1.0
...
If-modified-since: Mon, 22 Jun 1998 09:23:24

该条件GET利用If-Modified-Since:询问服务器,如果和服务器当前检索到的Last-modified:首部行值相同,则返回响应报文:

HTTP/1.0 304 Not Modified
...
...

并不包含所请求的对象。否则只是对带宽的浪费,也增加了用户的等待时间。

2.3 文件传输协议:FTP

FTP使用了两个并行的TCP连接,一个是控制连接(control connection),一个是数据连接(data connection)。端口号分别为2120。所以我们说FTP的控制信息是带外(out-of-band)传送的,而HTTP协议是在传输文件的TCP连接中发送请求和响应报文,所以是带内(in-band)传输信息的。

FTP的传输中,控制连接贯穿始终用户整个会话期间(保留用户状态信息,而HTTP是无状态的,因为它不追踪用户状态),数据连接则每一次文件传输都需要重新打开一个(数据连接是非持久连接)。

2.4 因特网中的电子邮件

2.5 DNS:因特网的目录服务

表明一个人的有“人名”和“身份证号”,我们使用人名因为好记,而各种机构使用身份证号;表明一个主机的有“主机名”和“IP地址”,主机名好记,“IP地址唯一”。

2.5.1 DNS提供的服务

人们喜欢便于记忆的主机名,路由器喜欢定长的有着层次结构的IP地址。为了折衷折衷偏好,域名系统(Domain Name System,DNS)将主机名与IP地址相互转换。

DNS是一个由等机制分层的名字服务器(name server)实现的分布式数据库,也是一个应用层的协议。

DNS提供的重要服务:
- 主机名和IP地址转换;
- 主机别名(Host aliasing):一台主机可能有多个名字。一般情况下主机别名比规范主机名(canonical hostname)容易记。DNS可以将主机别名对应到规范主机名和IP地址;
- 邮件服务器别名(Mail server aliasing):比如qq邮箱和hotmail;
- 负载分配(Load distribution):繁忙的站点比如baidu.com会分布在多台服务器上,运行于不同的端系统,有着不同的IP地址。此时一个IP地址集对应同一个规范主机名。为了负载均衡,DNS服务器在回答的IP地址集中轮转IP地址排放的顺序,客户机通常访问排在前面的IP。

2.5.2 DNS工作机理概述

DNS是一个由等机制分层的名字服务器(name server)实现的分布式数据库。之所以采用分布式,因为集中式设计问题太多:
- 单点故障:仅有的这个服务器跪了,世界网络就瘫痪了;
- 通信容量:单个服务器处理全世界的DNS请求,忙不过来;
- 远距离的集中式数据库:离得远的客户机请求数据时,万一再碰上拥堵,会产生严重的时延;
- 维护:因全世界每一个主机的新添而频繁更新。

DNS是一个在因特网上实现分布式数据库的精彩范例!没有一台名字服务器拥有因特网上所有主机的映射;相反,该映射分布在所有的名字服务器上。

DNS使用了大量的名字服务器,通过分等级方式组织,共有三种类型的名字服务器:
- 本地名字服务器(local name server):也叫默认名字服务器,每个ISP都有一个。通常本地名字服务器会和客户机临近,如果客户机查询的为另一个本地的主机,则本地名字服务器可以直接给出请求的IP。如主机surf.eurecom.fr请求主机baie.eurecom.fr的IP,位与eurecom的本地名字服务器可直接搞定。
- 根名字服务器(root name server):当本地名字服务器不能解析查询时,则自己将作为向某个根名字服务器查询的客户机。
- 权威名字服务器:每台主机都要向某个权威名字服务器(一般是本地名字服务器,由该足迹本地ISP提供)注册。一般每台主机至少需要知道两台权威名字服务器。

surf.eurecom.fr请求gaia.cs.umass.edu,本地名字服务器转发到根名字服务器,如果根名字服务器也不知道,再转给其他的名字服务器,如果一直不知道,最后会转发到权威名字服务器(即gaia.cs.umass.edu所在的本地名字服务器),然后将查询结果依次返回。

由于可能会经历多次请求的转发才能解析到IP地址,所以DNS缓存(DNS caching)可以改善时延,减少网络DNS报文数量。

2.5.3 DNS记录

DNS存储在名字服务器里的形式是四元组:(Name, Value, Type, TTL)

TTL是记录的生存时间,决定了记录从缓存中删除的时间。
- Type = A :Name->主机名;Value->主机IP地址;
- Type = NS :Name->域;Value->获取该域中主机IP地址的权威名字服务器的主机名;
- Type = CNAME : Name->主机的别名;Value->其规范主机名;
- Type = MX :Name->邮件服务器别名;Value->邮件服务器规范主机名。

2.5.4 DNS报文

只有查询和回答这两种报文。

2.6 TCP套接字编程

2.6.1 TCP套接字编程

2.7 UDP套接字编程

3 运输层

4 网络层和选路

运输层为不同主机上的两个进程提供了通信服务。而运输层为了提供进程到进程的通信服务,依赖于网络层提供的主机到主机的通信服务。

4.1 概述和网络服务模型

4.4 互联网协议(IP)

因特网的网络层,又被称为IP层,主要是因为因特网的IP协议。不过IP协议是因特网网络层中很重要的一部分,但并不是全部。

因特网的网络层主要有三个组件:
- 网络层协议。又叫互联网协议,更常叫做IP协议
- 路径确定组件。
- 报告数据报错误,对某些网络层信息的请求做出响应的工具。互联网控制报文协议(ICMP)

4.4.1 IPV4编址

IP地址长度为32bit,采用点分十进制记法(dotted-decimal notation)书写。

223.1.1.xxx组成一个IP网络,最左侧24bit是相同的,所以网络本身的地址是223.1.1.0/24其中/24网络掩码(network mask)。它表明32bit中最左侧的24bit网络地址,后面8bit主机地址(更精确的说法是“主机的接口地址”)每个主机的每个接口和每个路由器的每个接口都要分配一个IP

ip地址的分类编址(classful addressing)*4类地址分法并不科学。一个2000台主机的组织,C类只提供 282=254 台主机,太少;只能分配B类,而B类支持 2162=65534 台主机,浪费了63000个ip。因此出现了无类别域间选路(Classless Interdomain Routing,CIDR,读作“cider”)*。

无类别域间选路:ip地址的网络部分可以是任意长而不再限定为6/16/24 bit。其形式为a.b.c.d/x。比如a.b.c.d/21表明前21bit是网络地址,后11bit为主机地址,可以支持 2112=2046 台机器的工作组。

获取网络地址

管理员从其ISP获取一组地址,从而得到一块地址。全世界的IP最终由ICANN分配。

获取主机地址

一个组织获取一块地址后,可以给组织内的主机和路由器接口分配单个IP地址。方法有两种:
- 手工配置。
- 动态主机配置协议(Dynamic Host Configuration Protocol):允许主机自动获取(自动被分配)IP地址。又被称为即插即用协议(plug-and-play protocol)

DHCP在主机接入网络时为主机分配一个临时IP地址,等下线后或者到时间后就回收。比如抱着笔记本去图书馆、教室、自习室,分配起ip很方便。

4.4.2 从源到目的地传输数据报:编址、选路和转发

4.4.3 数据报格式

4.4.4 IP数据报分片

4.4.5 ICMP:互联网控制报文协议

4.4.6 动态主机配置协议(DHCP)

客户机被动态分配ip,最简单情况下,每个网络都应当有一个DHCP服务器,如果没有,客户机则需要知道该网络DHCP服务器地址的DHCP中继代理(通常是一台路由器)。

DHCP协议执行分四步:
- DHCP服务器发现。客户机要寻找DHCP服务器,于是发送DHCP发现报文(DHCP discover message)。由于主机自己还没有ip,也不知道DHCP服务器的ip,于是它将发现报文发给该网络所有的机器,报文的源地址为0.0.0.0,目的地址为255.255.255.255
- DHCP服务器提供。可能会有多个DHCP服务器提供多个ip。
- DHCP请求。主机挑一个,回应。
- DHCP ACK。

4.4.7 网络地址转换(NAT)

如果家里需要联网的东西多了,但是ip地址已经分配了,可以使用更简单的地址分配方法:网络地址转换(Network Address Translation,NAT)

例如,一个NAT使能路由器对外的广域网接口IP地址为138.76.29.7,但是朝向家里的局域网接口IP地址为10.0.0.4,局域网里的机器被分配了10.0.0.110.0.0.210.0.0.3等。即NAT使能路由器将家里的内部细节掩盖了,外界的Web服务器并不知情,会认为家里就一个ip138.76.29.7。路由器接收之后,会根据自己的NAT转换表将目的地址转换为相应的内部ip(比如10.0.0.1)。

4.5 因特网中的选路

4.7 IPv6

地址为128bit,“地球上的每个砂砾都可以用IP地址编址了”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值