《计算机网络 自顶向下方法》学习整理
计算机网络
1、计算机网络
(1)英特网
-
英特网:英特网是世界范围内的计算机网络,互联了全世界数亿计计算机网络设备的网络。
-
协议:在网络中,一个协议定义了两个或多个通信实体之间的交换报文的格式和次序,以及报文发送和接收一条报文或其他事件所采取的动作。
英特网广泛使用了协议,不同的协议用于完成不同的通信任务
(2)网络边缘
- 端系统:端系统也称为主机,容纳(运行)应用程序,端系统(主机)再划分为客户端(Client)和服务器(Service)
- 客户端(Client):即用户端,为客户提供本地服务的程序,用来收集用户请求信息,并发送到服务器,等待服务器处理完成之后返回结果。
- 服务器(Service):用来接收和处理请求,服务器是一个数据中心,接收客户端发送的请求,对数据进行处理并返回处理结果给客户端
- 接入网:将端系统连接到其边缘路由器的物理链路。
- 边缘路由器:终端到任何其他远程端系统路径上的第一台路由器。
(3)网络核心
-
网络核心:由互联因特网端系统的分组交换机和链路构成的网状网络
-
分组交换:在通信过程中,双方以分组为单位,使用存储-转发机制实现数据交互的通信方式,被称为分组交换。
- 分组:再端系统和目的端系统之间发送的报文(数据),将报文(数据)划分成多个更小的等长数据段,在每个数据段的前面加上必要的控制信息作为数据段的首部,每个带有首部的数据段就构成了一个分组。
分组首部指明了该分组发送的地址,当交换机收到分组之后,将根据首部中的地址信息将分组转发到目的地,这个过程就是分组交换。能够进行分组交换的通信网被称为分组交换网。
分组交换的本质即存储转发。
- 存储转发:以太网交换机的控制器先将输入端口到来的数据包缓存起来,先检查数据包是否正确,并过滤掉冲突包错误。确定包正确后,取出目的地址,通过查找表找到想要发送的输出端口地址,然后将该包发送出去。缺点是延时大。
- 排队时延:如过交换到达的分组需要传输到某一条链路,但发现该链路正在忙于传输其他分组,则该到达的分组必须再缓存中等待。
- 分组丢失:因为缓存空间大小是有限的,一个到达的分组可能发现该缓存已经被其他等待的分组完全充满了,在此情况下,将出现分组丢失。
(4)时延、丢包、吞吐量
-
时延:分组在一台主机,经过一系列路由器传输,在另一台主机(目的地)中结束他的历程。在这过程中(从一个节点,延该条路径到后继节点)沿途中的每个节点经受了不同类型的时延。
-
处理时延
检查分组首部,决定改分组导向何处所需要的时间是处理时延的一部分,还包括如检测比特级别的差错所需要的时间等。
-
排队时延
分组在链路上等待传输时,等待的时间即排队时延,取决于先期到达正在等在的分组数量。
-
传输时延
假定分组以先到先服务方式传输,当所有已经到达的分组被传输后才能传输刚到达的分组。(公式L/R:L表示分组长度,R表示传输速率)
-
传播时延
一旦一个比特被被推向链路,该比特需要向路由器B传播,从该链路起点到路由器B传输所需要的时间。
-
-
丢包:
当排队等待的容量接近当前容量极限时,到达的分组发现一个满的队列,由于没有地方储存这个分组,路由器会丢弃该分组,该分组则会丢失。分组丢失的份额是随着流量强度增加而增加的。
-
吞吐量:例如主机A向主机B跨越计算机网络传输一个大文件。
- 瞬间吞吐量:主机B接收到文件的速率。
- 平均吞吐量:主机B接收到F比特时用到的时间T的比值:F/T
(5)协议层次
-
因特网协议栈
为了给网络协议的设计提供一个机构,网络设计者以分层的方式组织协议以及实现这些协议的网络硬件和软件,每个协议属于这些层次之一。关注某层向他的上一层提供的服务,则为该层的服务模型。
各层的所有协议被称为协议栈,因特网的协议栈有五个层次组成:物理层、链路层、网络层、运输层、应用层。
-
应用层
网络应用程序及他们的应用层协议存留的地方,包含协议有例如HTTP、SMTP、FTP等,应用层协议分布在多个端系统上,一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息的分组,一般将应用层的信息分组成为报文。
-
运输层
运输层在应用程序端点之间传送应用层报文。常见的运输层协议有TCP / UDP,利用其中的一个都能运输应用层报文。
TCP向他的应用程序提供了面向连接的服务,这种服务包括了应用层保温向目的地确保传递和流量控制,因此当网络拥塞时,源抑制其传输速率。
UDP协议向他的应用程序提供无连接服务,这是一种不提供不必要服务的服务,没有可靠性,没有流量控制,也没有拥塞控制。一般将运输层分组成为报文段。
-
网络层
网络层负责将数据报的网络层分组从一台主机移动到另一台主机,在一台源主机中的因特网运输层协议(TCP/UDP)向网络层递交运输层报文段和目的地址。
网络层包含的协议有IP协议,该协议定义了在数据报中各个字段以及端系统和路由器如何作用于这些字段。IP协议只有一个,所有具有网络层的因特网组件必须运行IP协议。
网络层还包含决定路由的路由选择协议,使得数据报根据该路由从源传输至目的地。
-
链路层
网络层通过源和目的地之间的一些列路由器路由数据报,为了将该分组从一个结点移动到路径上的下一个结点,网络层必须依靠链路层的服务。特别是在每个结点,网络层将数据报下传给链路层,链路层沿着路径将数据报传输给下一个结点。
链路层提供的服务取决于应用于该链路的特定链路层协议。各个不同的端系统的链路层协议可能不同,一般将链路层分组称为帧。
-
物理层
链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素,而物理层的任务是将该帧中的一个一个比特从一个结点移动到下一个结点。该层的协议仍然是跟链路层相关的,并且进一步于该链路的实际传输媒体(双绞铜线、单模光纤等)相关。
-
OSI模型
开放系统互联模型:应用层 -> 表示层 -> 会话层 -> 运输层 -> 网络层 -> 数据链路层 -> 物理层
在七层模型中,五层的功能和因特网协议栈中的对应类似,新增加的两个层:表示层、会话层。表示层的作用是使通信的应用程序能够解释交换数据的含义。会话层提供了数据交换定界和同步功能,包括了建立检查点和恢复方案的方法。
-
封装
2、应用层
(1)应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何互相传递报文,特别是应用层协议定义了:
- 交换的报文类型,例如请求报文和响应报文。
- 各种报文类型的语法,如报文中各个字段及这些字段是如何描述的。
- 字段的语义,即这些字段中包含的信息的含义。
- 一个进程何时以及如何发送报文,对报文进行响应的规则。
网络协议和应用层协议:
应用层协议只是网络协议的一部分(非常重要的一部分),例如web是一种客户-服务器应用(网络协议),它允许客户按照需求从web服务器获取文档,该web应用有很多组成部分,包括文档格式的标准(HTML),web浏览器,web服务器以及一个应用层协议(HTTP),HTTP只是定义了在浏览器和web服务器之间穿啊属的报文格式和序列,只是web应用的一部分。
(2)Web和HTTP
-
HTTP
Web的应用层协议是超文本传输协议(HTTP),是web 的核心,HTTP由两个程序实现,一个客户程序一个服务器程序。客户程序和服务器程序之间运行在不同的端系统中,通过交换HTTP报文进行会话,HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式。
-
HTTP请求-响应行为
客户端(运行web浏览器的PC)—(请求报文)—> 套接字接口(客户进程与TCP连接之间的门)-------> 进入TCP控制 ------------>套接字接口(服务器进程与TCP连接之间的门) ------->Web服务器 -----(响应报文)------> 套接字接口 ----------> 进入TCP控制 -----------> 套接字接口----------> 客户端
-
HTTP是一个无状态协议
HTTP服务器不会保存关于客户的任何信息,所以服务器不会因为刚刚为该用户提供了服务就不再作出反应。
-
非持续连接和持续连接
非持续连接:每个请求/响应对是经一个单独的TCP连接发送
缺点:必须为每一个请求对象建立和维护一个全新的连接,对于每个这样的连接,在客户和服务器中都要分配TCP的缓冲区和保持TCP变量,会给web服务器带来很大的严重负担。其次“三次握手”每个对象经受两个RTT的交付时延(一个用于创建TCP,另一个用于请求和接收)。
持续连接:所有的请求及其响应经相同的TCP连接发送
服务器在发送响应后保持该TCP连接的打开,在相同客户和服务器之间的后续请求和响应报文能经过相同的连接进行传送。
- HTTP报文
Http请求报文由 请求行 、请求头、空行、请求数据四个部分组成:
本例中第一行即为请求行,其后继的行交作首部行。
请求行:请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;
- GET:当客户端要从服务器中读取某个资源时,使用GET 方法。GET 方法要求服务器将URL 定位的资源放在响应报文的数据部分,回送给客户端,即向服务器请求某个资源。使用GET 方法时,请求参数和对应的值附加在 URL 后面,利用一个问号(“?”)代表URL 的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。
- POST:当客户端给服务器提供信息较多时可以使用POST 方法,POST 方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。GET 一般用于获取/查询资源信息,POST 会附带用户数据,一般用于更新资源信息。POST 方法将请求参数封装在HTTP 请求数据中,以名称/值的形式出现,可以传输大量数据;请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。
请求头部:通知服务器有关于客户端请求的信息。典型的请求头有:
-
User-Agent:产生请求的浏览器类型;
-
Accept:客户端可识别的响应内容类型列表;星号 “ * ” 用于按范围将类型分组,用 “ / ” 指示可接受全部类型,用“ type/* ”指示可接受 type 类型的所有子类型;
-
Accept-Language:客户端可接受的自然语言;
-
Accept-Encoding:客户端可接受的编码压缩格式;
-
Accept-Charset:可接受的应答的字符集;
Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机;
connection:连接方式(close 或 keepalive);
Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;
空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;
请求包体:请求包体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length。
HTTP 响应报文:由状态行、响应头部、空行 和 响应包体 4 个部分组成
状态行:状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开; 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:
1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
2xx:表示服务器已成功接收到请求并进行处理;
3xx:表示服务器要求客户端重定向;
4xx:表示客户端的请求有非法内容;
5xx:表示服务器未能正常处理客户端的请求而出现意外错误;
常见的状态码:
状态码描述文本有如下取值:
200 OK:表示客户端请求成功;
400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;
401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;
403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;
404 Not Found:请求的资源不存在,例如,输入了错误的URL;
500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;
503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;
-
cookie(储存在用户本地终端上的数据)
cookie 的4个组件:
- 在HTTP响应报文中的一个cookie首部行;
- 在HTTP请求报文中的一个cookie首部行;
- 在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理;
- 位于web站点的一个后端数据库;
Cookie可以将web站点和用户身份联系起来,允许对用户进行追踪。
当浏览器第一次连接Web服务器时,服务器会发出响应并产生一个唯一识别码,作为索引在后端数据库中产生一个表项,之后服务器就会用一个包含Set-cookie:首部的HTTP响应报文对浏览器进行响应。之后的每一次用户浏览器和服务器进行交互时,都会将cookie信息传递给web服务器,只有浏览器存储的、与请求的url中的域相关的cookie才会发送到服务器。
(3)SMTP
-
SMTP
SMTP是因特网电子邮件中主要的应用层协议,使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。一般不使用中间邮件服务器发送邮件,通常如果接收方邮件服务器没有开机,则报文会保留在发送方邮件服务器上等待进行新的尝试,不会保留在任何一个中间的邮件服务器。
过程:
-
与HTTP对比
-
共同点:
- 两个协议都用于从一台主机向另一台主机传送文件(HTTP是从web服务器向web客户;SMTP是从一个邮件服务器向另一个邮件服务器),当进行文件传送时,持续的HTTP和SMTP都是用持续连接。
-
不同点:
-
HTTP协议主要是一个拉协议,即在方便的时候,某些人在web服务器上装在信息,用户使用HTTP从该服务器拉取这些信息,特别是TCP连接是由想接收文件的机器发起的。
而SMTP基本是一个推协议,即发送邮件服务器把文件推向接收邮件服务器。特别是这个TCP连接是由想要发送该文件的机器发起的。
-
SMTP要求每个报文使用7比特ASCII码格式,而HTTP不受该限制
-
(对于处理一个既包含文本又包含图形的文档)HTTP把每个对象都封装到自己的HTTP响应报文中,而SMTP把所有报文对象都放在一个报文中。
-
-
(4)DNS
-
DNS(能够进行主机名到IP地址转换的目录服务)
-
一个由分层的DNS服务器实现的分布式数据库
-
一个使得主机能够查询分布式数据库的应用层协议
-
-
工作机理
运行在用户主机上的某些应用程序需要将主机名转换为IP地址,这些应用程序将调用DNS的客户端,并指明需要被转换的主机名。用户主机上的DNS接收到后,像网络发送一个DNS查询报文,所有的DNS请求和回答报文使用UDP数据报经端口53发送。经过一定时间的时延后,用户主机上的DNS接收到一个提供所希望映射的DNS回答报文,这个映射结果被传递到调用DNS的应用程序。综合来看DNS是一个提供简单的、直接的转换服务的黑盒子。
3、运输层
(1)运输层服务
-
和网络层的关系
网络层提供了主机之间的逻辑通信,运输层为运行在不同主机上的进程之间提供了逻辑通信。
-
运输层
因特网为应用层提供了两种截然不同的可用运输层协议(TCP/UDP),TCP的运输层分组成为报文段,UDP的分组成为数据报
-
多路复用和多路分解
多路复用:在源主机从不同的套接字中收集数据块,并为每个数据块封装上首部信息(将在以后用于分解)从而生成报文段,然后将报文段传递到网络层。
多路分解:将运输层报文段中的数据交付到正确的套接字。
(2)无连接运输:UDP(用户数据报协议)
UDP是一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口,应用程序差不多直接与IP打交道。
UDP从应用程序得到数据,附加上用于多路复用/分解服务的源和目的端口号字段,以及两个其他小字段,然后将形成的报文段交给网络层。网络层将该运输层报文封装到一个IP数据报中。然后尽力尝试将此报文段交付给接收主机。如果该报文段到达接收主机,UDP使用目的端口号将报文段中的数据交付给正确的应用程序。在使用UDP时在发送报文段之前,发送方和接收方的运输层实体之间没有握手,因此是无连接的。
UDP协议适用端口分别运行在同一台设备上的多个应用程序。
- UDP的特点
- 关于何时、发送什么数据的应用层控制更为精细。
- 无需建立连接,不会引入建立连接的时延(DNS运行在UDP上的原因之一)。
- 无连接状态。
- 分组首部开销小。TCP报文段有20字节的首部开销,UDP仅有8字节的开销。
(4)面向连接:TCP(传输控制协议)
TCP被称为是面向连接的,是因为在一个应用程序可以开始向另一个应用程序发送数据之前,这两个进程必须先互相“握手”,即他们必须相互发送某些预备报文段,已建立确保数据传输的参数。
TCP协议只在端系统中运行,而不再中间的网络元素(路由器和交换机)中运行,所以中间的网络元素不会不会维持在TCP连接状态(事实上中间路由器对TCP连接完全视而不见,他们看到的是数据报而不是连接)。
-
全双工服务:如果一台主机上的流程A与另一台主机上的进程B存在一条TCP连接,那么应用层数据就可以在从进程B流向进程A的同时,也从进程A流向进程B。
-
点对点:在单个发送方与单个接收方之间的连接
-
TCP的三次握手:
为什么需要三次握手?
第一次握手:客户端向服务端发送SYN(synchronous建立联机)建立连接请求消息。
第二次握手:服务端收到SYN请求建立连接消息之后,返回给客户端ACK(acknowledgement 确认)确认可以与其建立连接。
第三次握手:客户端需要向服务端再次确认收到了服务端的确认消息,之后便可以开始数据交互。第三次握手主要防止已经失效的连接请求报文段突然又传到服务端,其次,假如没有第三次握手,在第二次握手之后,客户端暂时没有任何数据要传送到服务端,此时服务端还在等待客户端的数据,就会造成很大的资源浪费,因此需要客户端再回应一下。
- TCP的四次挥手:
第一次挥手:客户端向服务端发送断开TCP连接的请求报文[FIN,ACK],报文中随机生成一个序列号seq=x,表示要断开连接。
第二次挥手:服务端收到客户端发来的断开TCP连接的请求,回复ACK确认收到断开请求,回复时随机生成一个seq=y,同时还要回复客户端发来的请求,所以回复的客户端序列号在原来x的基础上+1.
第三次挥手:服务端回复确认收到消息之后不会马上断开tcp连接,需要等到服务端确认是否传输到客户端的数据传输完毕,确认完毕之后再向客户端发送断开连接请求[FIN,ACK]。此时服务端处于半关闭状态。
第四次挥手:客户端收到服务端发来的TCP断开连接请求后进行回复,表示收到断开请求,并确认断开,向服务端发送ACK报文。
4、网络层
(1)虚电路
-
虚电路:虚电路是交换网络(ATM、帧中继、IP或因特网)上两个终端站之间的点对点通信链路,在网络层连接。虚电路是建立一条逻辑连接,发送方与接收方不需要预先建立连接。
-
组成:
-
源和目的主机之间的路径(一系列链路和路由器)
-
VC号,沿着该路径每段链路的一个号码
-
沿着改路径的每台路由器中的转发表表项
-
-
3个不同阶段
- 虚电路建立:建立阶段,发送运输层与网络层联系,指定接收方地址,等待网络建立虚电路。
- 数据传送:一旦建立起来虚电路,分组就可以开始沿该虚电路流动了
- 虚电路拆除:发送方通知网络层他希望终止该虚电路时,即启动拆除阶段网络层通知网络另一侧系统结束呼叫,并更新路径上每台分组路由器中的转发表以表明该虚电路已不存在。
-
(2)IP协议
IP(网络之间互连的协议)设计的目的是提高网络的可扩展性,实现大规模、异构网络的互联互通,分割顶层网络应用和底层网络技术之间的耦合关系。IP只为主机提供一种无连接、不可靠的、尽力而为的数据报传输服务。
- 数据报格式
文章内容整理来源于《计算机网络 自顶向下方法》