文章目录
第一章 概述
1.网络,互联网,因特网,ISP,RPC
- 网络:由不同的结点和链路组成。
- 互联网:不同的网络组成一个更大的网络,也就是网络的网络。
- 因特网:全球最大的一个互联网,Internet。
- ISP:Internet service provider(因特网服务提供商,国内就是移动电信联通三大运营商)
- RFC:Request For Comments (用于Internet的标准化工作)
2.交换方式
互联网组成分为 边缘部分和核心部分。核心部分就为边缘部分之间的计算机通信提供支持。核心部分中最终要的就是路由器,其主要作用就是分组交换(先把分组储存,等到线路空闲在转发出去),转发的依据就是分组中的保存的目的地址和路由器中的下一跳地址。
除了分组交换,还有电路交换和报文交换。
-
电路交换:需要先建立连接,然后信息通信,最后还要建立连接。这导致一条连接建立之后,即使不通信也要占用线路资源。
-
报文交换:和分组交换相比,每个报文很大。
3.计算机网络分类
- WAN – Wide Area Network 广域网
- MAN – Metropolitan Area Network 城域网
- LAN – Local Area Network 局域网
- PAN – Personal Area Network 个人局域网
4.计算机网络的性能
速率,带宽,吞吐量
速率:比特在信道中传播的速率,单位 bit/s(b/s,bps),kbps,Mbps 1kbps = 10^3bps
带宽:网络信路中传输数据的能力。单位 b/s,kb/s ,Mb/s。。。和速率一致
吞吐量:网络中实际传输数据的能力。带宽是理论上的,吞吐量是真实的。
时延
时延分为发送时延,传播时延,处理时延。
发送时延:是发送这个分组(包)的时间
传播时延:数据在信道上的传播时间。
处理时延:路由器转发的时间。
哪个时延占主导地位?
具体情况具体分析。
时延带宽积就是单位时间内的比特数。
网络利用率高了,可能发生丢包。
5.计算机网络体系结构
事实才是标准,因为TCP/IP率先抢占市场并且效率高适合商用,并且用于Internet,加之Internet已经成为全球最大的互联网,所以国际标准自然就成为了TCP/IP协议。一般在操作系统和路由器中都有TCP/IP的协议族。网络接口层其实支持很多接口类型,比如以太网,无线网。
- 应用层:为主机上的进程提供服务,所以它定义的是应用程序之间的通信和交互的规则。不同的网络应用要有不同的应用层协议,比如HTTP,DNS。 传输的数据单元是报文。
- 传输层:负责为两台主机上的网络应用提供通用的数据传输的服务。最为重要的是TCP(传输的是报文段)和UDP(传输的是数据报)。
- 网络层:负责为分组交换网上的不同主机提供通信服务。在发送数据的时候,网络层把运输层发送过来的报文段或者数据报封装成分组(包)。注意:无论哪一层都可以将传输的数据单元笼统的叫做分组或包。
- 数据链路层:将网络层发送过来的分组封装成帧。加上了差错控制信息,同步信息,地址信息等。数据链路层不仅要检查错误还要更改错误。如果发现有错误的报文,可以选择丢弃。
- 物理层:传输的数据单位是比特。发送方发送的是0/1,接收方接受的也是0/1.传输比特流的物理介质如双绞线,同轴电缆,光缆等不是物理层协议的控制范围,属于物理层下面的。
6.计算机各层的主要工作
数据链路层:一台主机发送的信息,如何让目的主机识别,不让其他主机接受信息。
7.一些题目
第二章 物理层
1.基本概念
作用
- 物理层主要解决的就是使用何种信号来传输比特流的问题。
- 我们知道,现在各种传输介质,他们都有不同的传输比特流的方法,物理层做的就是选择使用哪一种,从而为数据链路层提供透明的服务。也就是数据链路层不用关心使用何种信号进行传输。
任务
物理层的主要任务就是确定传输媒体接口的一些特性
- 机械特性:接线器的形状,尺寸。
- 电气特性:电压范围
- 功能特性
- 过程特性
2.数据通信原理
数据通信系统
数据通信系统由发送源,发送器(调制解调器),传输系统,接收器(调制解调器),接收源五部分组成。
信号
模拟信号(连续信号)
数字信号(离散信号)
编码和调制
编码
编码就是将数字信号转变为数字信号,可以在数字信道上传输
常见的编码方式:
不归零编码
归零编码
曼彻斯特编码
差分曼彻斯特
调制
将数字信号转变为模拟信号
调幅,调频,调相
第三章 数据链路层
1.基本概念
主要作用就是把网络层发送的IP数据报封装成帧,然后加上差错校验信息,转交给物理层,物理层再将帧的比特流转化为信号交给传输媒介进行传输。
2.解决的三个问题
(1)封装成帧 :
加上帧头和帧尾
帧头信息:源地址,目的地址,控制信息
帧尾信息:错误信息
问题一:接收方的数据链路层如何从物理层提取到的比特流中知道哪里是帧呢?
PPP帧是通过帧定界,也就是一个标志位来区分以太网是通过前导码和帧间间隔来区分。
问题二:如果数据部分的比特和帧定界符一样怎么办?
可以事先扫描数据部分,如果发现有和帧定位符一样的比特段,就在之前加上一个标志段(转意)字段的比特流来标识。
(2)差错校验
可能在交付的过程中,产生误码,这要求要丢弃。
- 校验方法:
①奇偶校验:就是通过看基数或者偶数的个数来判断是否发生误码,这种检验的方法当奇数个误码产生,能检测出来,但是如果有偶数个误码产生,就检测不出来。
②循环冗余校验:
(3)可靠传输
如果发送端发送的内容是什么,接收端接收得到的也是什么,就是可靠传输 .
要注意的是:以太网并不要求数据链路层提供可靠传输,要求上层提供可靠传输。无线网络要求数据链路层提供可靠传输。
3.可靠传输的实现协议
(1)停止等待协议
问题1:怎么实现可靠性?
发送方发送一个帧之后,接收方要回复给发送方一个信息,如果正确,回复ACK。如果检测到发生了误码,回复NAK;
问题2:如果在传输的过程中,由于路由器队列满了,路由器将分组丢弃或者其他原因造成了分组丢弃怎么办?
采用超时重传的机制,发送方发送完这个帧,就启动计时器,如果计时器时间到了还是没有接收到回复,就再次发送。
问题3:如果在回复的过程中发生了丢失,发送方就会再次发送一个帧,这就造成了接收方收到了重复的帧,该如何处理?
发送方发送的时候,给帧添加一个序号,接收方根据序号来判断是否是重复的帧。
问题4:确认分组是否也需要编号?
需要,可能由于网络延迟,导致了发送方重传。但是帧之后有到达了接收方。
(2)回退N帧协议
是一个滑动窗口协议。可以连续发送N个帧,当其中一个帧发生误码的时候,其之后的帧也要重传,这也是回退N帧协议的由来。
(3)选择重传协议
是对回退N帧协议的一个改进。
主要的改进就是接收方的接收窗口=N,不再是一直为1.
4.点对点协议PPP
基本概念
实现了封装成帧,差错检验,透明传输。
- 封装成帧:上图可以看到帧的首部
- 差错检验:通过循环冗余校验
- 透明传输:面向字节,面向比特
5.媒体接入控制
什么是媒体接入控制?
Medium Access Control,媒体也叫媒介,介质。
6.关于局域网和以太网✔
以太网ethernet:就是一种基带总线局域网,但是目前,以太网几乎垄断了局域网,一般以太网成为了局域网的另一个名称。
以太网_百度百科 :https://baike.baidu.com/item/以太网/99684?fr=aladdin
通信适配器(网卡)
可以认为是计算机与外界媒介进行通信的接口,就是一块网络接口板,也叫做网卡;
-
这种通信适配器上装有处理器和存储器(ROM和RAM),其中MAC地址就存储在ROM中。
-
网卡与局域网之间的通信通过双绞线这种媒介,与主机通信是IO总线。
-
功能:对数据进行转换,所以要有存储器。
-
在主板上装上网卡的时候,也要装上这个网卡相应的驱动程序,以保证与计算机之间的数据交互。
-
要能够实现以太网协议。
-
当适配器在接受和发送各种帧的时候,不使用计算机的CPU。
-
当收到有差错的帧的时候,可以丢弃,不用通知计算机。当收到正确的帧的时候,要用中断来通知计算机。
一般主机上都有两块网卡,一块是局域网网卡,另一块是无线局域网网卡,每个网卡都会有一个MAC地址。
7.MAC地址
8.ARP地址解析协议
为什么使用ARP地址解析协议?
如果我们知道了IP地址,但是在传输帧的时候,怎么才能知道目的IP对应的主机的MAC地址呢?
因为我们知道,经过网络层的封装之后,目的IP就是下一个设备(主机or路由器),但是这时候并不知道下一个设备的MAC地址,所以我们通过双绞线传输的时候就找不到下一个目标了。如何解决呢? 其实主机中都会有一个ARP高速缓存表,这个表是自学习的,其中记录着本网络中的其他主机的MAC地址,每一个都会有一个属性(静态的or动态的)。然后通过查找这个就知道了。
-
只能在一个网络中有效,不能跨网络使用。
-
每个主机都会有一个ARP高速缓存表。
-
ARP缓存表中有静态MAC和动态MAC两种。
过程:
9.集线器和交换机
-
集线器
- 工作在物理层
- 仅仅提供比特流的转发功能,没有检测功能。判断帧是否为自己的所需要的工作交给网卡。
- 相当于总线的一段。
-
交换机
- 会根据自己的帧转发表来定向的传递给目的MAC的主机,不会造成多余的转发
- 以太网交换机工作在数据链路层(也包括物理层)
- 以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
- 以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。
-
集线器,交换机对比
- 集线器已经淘汰,目前主要使用交换机。
- 集线器碰撞风险大。
10.以太网交换机的自学习
以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。
**帧交换表中的MAC地址有过期时间,到期自动删除。因为接口和主机的对应关系并不是永久的。**可能原因如下:
- 交换机的接口更换了主机。
- 主机上的网卡更换了。
11.为什么主机上有ARP高速缓存表,交换机上还需要帧交换表?里面都是MAC地址。
ARP高速缓存表是在主机中的,里面存储的是本网络中的其他主机的MAC地址。主要目的就是将MAC地址放到帧中,进行传输。交换机中的帧交换表是为了减少总线上的碰撞,不是和集线器一样的广播传输,而是通过里面的接口和MAC地址的对应关系进行高高效的准确转发。
12.为什么使用VLAN?
-
我们都知道,使用交换机可以使帧得以传播,但是当一个主机发送一个广播帧之后,这个帧就会传播整个局域网(也就是通过交换机连接的所有交换机设备或者主机)。这就浪费了太多的网络资源。怎么解决呢?
-
可以使用路由器,路由器可以屏蔽这种广播帧,也就是,路由器不转发广播帧。但是路由器花费太多,如何解决这个问题呢?
-
可以使用VLAN。
13.VLAN的实现机制
主要通过交换机来实现的,通过IEEE 802.1Q帧和不同的端口类型来实现的。
-
802.1Q帧对以太网的MAC帧进行了扩充,增加了四字节的标记。
-
端口
交换机的每个端口有且仅有一个PVID。
- 🥇PVID:端口的唯一标志
- 🥇VID:帧的唯一标志
一道习题:
为什么会出现这种情况呢?
首先,看第一种情况,A发送的广播帧,首先进行打标签,由于Trunk端口的PVID==帧的VID,T端口去标签进行转发。然后,交换机2的T端口接收到交换机1T端口发来的无标签的帧,然后加上自己的PVID进行打标签,然后,交换机2将该帧发送给E,F(因为这两个端口的PVID == 帧的VID)。
再来看第二种情况:A,交换机1的T端口转发的时候由于帧的VID != T的PVID,所以直接转发,交换机2直接接受,正确转发。C发的帧的VID == T的PVID,所以去标签转发,交换机2的T端口再给帧加上自己的PVID,也就是这时候帧的VID==1,转发给E,F转发失败。
第四章 网络层
1.网络层的概述
网络层的主要任务就是连接各个网络,使得各个网络之间能够进行通信。即可以实现数据包在各网络之间传输。
要实现网络层的主要任务,需要解决以下的主要问题:
-
网络层提供的是怎样的服务(“可靠的”,“不可靠的”)。
可靠和不可靠的判断依据是在网络传输的过程中,如果出现了数据包误码,由于路由器繁忙丢弃或者失序到达的额情况,网络层如果进行处理就是可靠的服务,如果不进行处理就是不可靠的服务。为什么TCP是可靠的呢?其实TCP使用的下层的服务(IP)也是不可靠的,TCP自身保证了可靠的传输,比如确认应答,超时重传的机制等。TCP提供的是面向连接的可靠的字节流服务。
TCP/IP协议的网络层中的IP协议提供的就是不可靠的服务,ATM的网络层提供的是可靠的服务。
-
网络的寻址问题
-
路由选择的问题
依据就是数据包中的目的IP和路由器中的路由表。
2.网络层提供的两种服务
(1)面向连接的虚电路服务
(2) 无连接的数据报服务
互联网的先驱们采用的是无连接的数据报服务,如下图
两者的比较如下:
因特网目前使用的是数据报服务。
3.IPv4地址编址方法
IP地址:为了在全世界范围内互联网上的主机或者路由器编制一个惟一的标识符。
IP地址编制方法共经历了三个历史阶段:
分类的IP地址
:最基本的编址方法。1981年
子网划分
:对最基本的编址方法的改进。1985年
无分类编址CIDR(构成超网)
:比较新的无分类的编址方法。1993年
(1) 分类的IPv4地址
概述
:第一个字段是“网络号”,第二个字段是“主机号”,网络号在互联网范围内必须是唯一的。主机号表示在网络上的主机。一台主机号在其网络中必须是唯一的。所以,整个IP地址在互联网范围内是唯一的。
D类用作多播,E类地址保留为以后用。
⛔️为什么A类网络号的第一位为0,B类网络号的第一位第二位分别为1,0 ,C类…?
这样正是为了区分不同的网络号,这样做的目的是刚好使得IP地址连续。
A类的IP地址最大为127.255.255.255(广播地址),B类最小的IP地址为128.0.0.0(网络号)。B类最小的IP地址+1就是C类最大的IP地址。
为什么B的第二位必须是0呢?这是因为如果是1的话,据没办法和C类的IP地址进行区分了
A类
关于本地软件环回测试:
若主机发送一个目的地址为环回地址的数据报,则本主机中的协议软件就会处理数据报中的数据,而不会吧数据报发送到其他网络。
B类
C类
特殊的ip地址
(2)划分子网的IPv4地址
假如某单位申请了一个B类网络号,之后随着计算机的发展,需要新增两个网络,如果再为这两个网络申请网络号,就会造成如下问题:
子网掩码:利用子网掩码可以知道主机号中的几位被用作了子网号。
核心:用连续的1来表示对应的网络号和子网号
子网划分的细节:
总结:
(3)无分类编址CIDR的IPv4地址(构造超网)
CIDR(classless Inter-Domain Routing,“sider”),IPV4编址的第三个历史阶段。
概述(原因)
表示方法
路由聚合
为什么使用路由聚合?
目的是为了减少路由表中的表项,我们来看下图的例子,R2中只需要保存他们的共同前缀组成的网络号就可以了。
4.IPv4地址的应用规划
如何对分到的网络号进行划分子网?也就是给定一个IPv4地址块,如何划分成更小的地址块?进而把这些地址块分配给互联网中的不同网络,进而分配给网络中的主机或者路由器。有两种方法:
下面这个例子分别用定长的子网掩码和非定长的子网掩码进行划分:
(1) 使用定长的子网掩码
只能划分n个子网,n为从主机号中借用的子网号的位数,因为本例中需要五个网络,所以要借用三位。因为是借助主机号的三位作为子网号,所以子网掩码为255.255.255.224
我们来看一下,这种方式的缺点:首先,使用定长的子网掩码会造成IP地址的浪费。就拿N1和N5网络来说,分配给他们32个IP属实有点浪费。下面我们来看一下非定常的子网掩码。
(2) 使用非定长的子网掩码
N1的IP地址需求总计为9个,所以需要使用4个主机号作为子网号。
地址块
是指网络号位数+子网号位数
地址数量
是指这个地址所能容纳的主机数。
(3)小结
参考:湖科大教书匠,《计算机网络谢希仁》
5.IP数据报的发送与转发过程
IP数据报的发送转发过程包括以下两个部分:
- 主机发送IP数据报
- 路由器转发IP数据报
IP数据包在从源计算机发送到网络上后,根据上述两种不同情况,被传递到目的计算机时也有两种方式:直接交付
和间接交付
。
①直接交付:IP数据包被直接交付时不需要经过路由器。因为在运行TCP/IP协议的以太网中,入网的计算机TCP/IP协议族的ARP协议软件,会帮助查询到本物理网络中其他计算机的MAC地址,使IP数据包可以直接从源计算机传递到目的计算机。即在网络中传输。
②间接交付:当送出IP数据包的源计算机与接收数据包的目的计算机不在同一个物理网络时,就需要借助跨接不同物理网络的路由器实现间接交付。特别是当源计算机与目的计算机被多个物理网络隔开,且它们之间可能有多条信息传输路径时,IP数据包的间接交付不但需要借助多台路由器,还有一个选择最佳路径的问题。
首先,每个主机都有一个默认网关,就是直接与它相连的路由器接口。如果用户想要让本网络中的主机与其他网络中的主机进行通信,就必须为该主机指定本网络中的一个路由器,该路由器也成为了默认网关。
当一个数据报发送的时候,其IP数据报首部会标明目的网络地址和原地址,用目的网络地址与路由器路由表中的地址掩码进行与运算,得到相应的目的网络号,如果相等就按照路由表指定的该网络号的下一跳进行转发。
- 路由器不转发广播数据报 (隔断广播域)
6.静态路由配置
(1)概念
(2)默认路由条目
当网络到Internet的网络的时候,如果我们在逐条配置路由,那么工作量很巨大,我们可以配置默认路由条目来解决(相当于路由聚合)也就是如果找不到目的网络就使用这个默认的路由条目,但是遵循最长前缀匹配的原则。
默认路由条目为0.0.0.0/0 默认为静态
特定主机路由
:为某个主机配置路由信息,当有多条路由信息可选择的时候,遵循最长前缀匹配的原则。因为是人工配置的,所以为静态。
7.静态路由配置产生的错误情况
- 导致路由环路的问题
(1) 配置错误
在进行人工配置路由信息的过程中,产生了网络号填写错误的情况,这可能会导致环路错误
(2)聚合不存在的网络
实例
:
解决办法
:
当有不存在的网络的时候,我们把不存在的网络放在R2的路由表中,并把它的下一跳设置为黑洞接口,这是路由器的一个虚拟接口,会丢弃IP数据报。
(3)网络故障
实例
:192.168.1.0/24出现故障,R1中的路由表会删除该路由器自动生成的这个网络的直连条目,这时候,如果再往这个IP发送数据包,R1会将它转发到默认的0.0.0.0/0,这就导致下一跳又回到了10.0.0.2 导致路由环路。
解决办法
:添加针对该网络的黑洞路由条目。
如果一段时间后,故障解除,那么路由表中会自动生成一个与该路由器直连的网络号,黑洞路由条目将被设置为无效,如果之后再次出现故障,该网络的黑洞路由再次被设置为有效,直连网络被删除。
8.路由选择协议
路由选择协议分为静态路由和动态路由。
(1)路由选择协议概述
(2)因特网所采用的路由选择的主要特点:
(3)有关分层次网关协议:
分层次的目的就是为了可以在一个自治系统内部使用不同的协议,在自治系统外部使用不同的协议。
(4)常见的路由选择协议
9.有关路由器的结构:
路由器由路由选择部分和分组转发部分组成。
- 路由选择部分
- 处理路由报文,根据报文内容进而来更新自己的路由表(转发表是由路由表得到的,一般不严格区分二者,为了简化分析)
- 定期发送路由报文,告诉其他路由器自己的路由信息
- 分组处理部分
- 根据转发表转发报文:如果找不到匹配的条目,丢弃该分组。否则按照匹配的条目进行转发。
- 路由器各个端口应该具有输入缓冲区或者输出缓冲区。
什么是路由报文?
路由器之间用于交换路由信息的一个报文类型。
10.路由信息协议RIP
(1)概述
(2)基本工作原理
好的路由就是距离短的路由,不考虑带宽。
(3)基本工作过程
(4)路由条目更新规则
11.边界网关协议----BGP
1.在不同自治系统内,度量路由的“代价”(距离,带宽,费用等)可能不同。因此,对于自治系统之间的路由选择,使用“代价”作为度量来寻找最佳路由是不行的。
2.自治系统之间的路由选择必须考虑相关策略(政治,经济,安全等)
3.BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
12.ICMP协议
(1)概述
- 为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。
- 主机或路由器使用ICMP来发送差错报告报文和询问报文。
- ICMP报文被封装在IP数据报中发送。
(2)差错报告报文
有五种。
①终点不可达
如下图的例子,如果R1中没有H2的特定主机路由信息,默认路由,或者N3的路由信息,就会造成终点不可达。
②源点抑制
③时间超过
④参数问题
⑤改变路由(重定向)
(3)ICMP询问报文
(4)ICMP两个应用
①ping (Packet InterNet Group)分组网间探测
- 用来测试主机或者路由器之间的连通性
- 应用层直接使用ICMP协议,没有通过运输层的TCP或者UDP协议
- 使用ICMP回送请求和回答报文
②跟踪路由 traceroute命令
- 用来测试IP数据报从源主机到目的主机在传输过程中经过了哪些路由器
- 实现方式:
如果H1想要知道到达H2所要经过的路由信息,H1会首先发送ICMP报文,该报文封装在IP数据报中,并将TTL的值设置为1。R1收到之后,将此报文的TTL的值减一变为0。并向源主机发送ICMP报文(时间超过报文)。然后H1在发送TTL=2的报文,以此类推。
13.虚拟专用网VPN
(1)什么是VPN?
利用公用的因特网作为本机构个专用网之间的通信载体,这样的专用网又叫做虚拟专用网。
(2)为什么使用VPN?
因为IPv4地址有限,目前处于紧缺的状态。所以一个机构能申请到的IPv4地址也是远远少于这个机构局域网中的主机的数量的。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,也就是说,这些地址只能在本局域网中使用,不能作为共有地址被其他网络访问。下面三个地址是无需申请,可自由分配的专用地址。
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
(3)VPN原理
如下图所示,一个公司的两个部门,一个在北京,另一个在上海。给两个部门分配的IP地址如下图,私有地址只能在机构内部通信,而不能用于于因特网中的主机通信。 所以,部门A和部门B至少各需要一个全球可用的公有IP地址。然后通过给内部的IP数据报进行加密,进而来实现类似于机构内部网络之间进行通信。
14.网络地址转换NAT
(1)概述
Network Address Translation
- 虽然因特网采用了无分类编址方式来减缓IPv4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4地址空间即将面临耗尽的危险仍然没有被解除。
- 1994年提出了一种网络地址转换NAT的方法再次缓解了IPv4地址空间即将耗尽的问题。
- NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
(2)原理
①使用NAT路由器
该转换方法存在一个问题:如果NAT路由器具有N个全球IP地址,那么至多只能有N个内网主机能够同时和因特网上的主机通信。
②使用NAPT路由器
由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换。这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和IP地址一起进行转换的技术叫作网络地址与端口号转换NAPT(Network Address and Port Translation)。
第五章 运输层
1.什么是端口?
不同的系统使用不同的方法来区分计算机上的应用进程,比如Linux中使用pid,但是怎么使用统一的方式来表示进程?那就是端口。
2.分用和复用
3.TCP粘包及解决方案
4.假如TCP客户端发生故障怎么办?
为了不让服务器白白浪费资源,服务器会用一个保活计时器,每当收到客户端发来的数据,保活计时器就会重新计时。如果超过保活计时器的计时,客户端仍然没有数据发送过来,服务端就给客户端发送探测报文,如果连续十次都没有回复,服务器就认为客户端关闭了。
5.两次握手可以吗?
不可以。如果使用两次握手的话,当客户端发起连接,收到一次确认后就建立连接。而服务端只要收到客户端发来的请求就变成了建立连接的状态。但是如果客户端第一次发送的请求由于网络延迟没有到达服务端,而且客户端又重新传了一次,立刻到达。这时候,客户端和服务器端交互完数据就断开连接。但是这时候,之前那个由于网络延迟的报文段到达了服务端,服务端又进入了建立连接的阶段。
6.TIME_WAIT的意义
(1)可靠的终止TCP连接
(2)让网络中的报文都能到达并丢弃。
TCP概述
TCP,Transmission Control Protocol(传输控制协议)是一种面向连接,可靠的,基于字节流服务的传输层的通信协议。
面向连接
:TCP和UDP不同,TCP是面向连接的,关于面向连接,是指通信的双方要先建立连接,然后才能进行数据的读写。这是字节流服务的特点,通信双方的线路是存储在路由器中的。相当于一个“虚电路”。
可靠
:TCP通过应答确认和超时重传的机制保证通信是可靠的。TCP是把数据交给IP层,从IP层的角度看,如果网络环境不好,就会出现丢包的情况,这是无法避免的,IP层只是尽自己最大的努力吧数据传输过去,TCP对此也无能为力,只能通过自身的算法来弥补网络环境不好造成的不足。
TCP报文结构
序号
:和确认号两者共同保证TCP的可靠性。序号是建立在传送的字节流之上,而不是建立在传送的报文段之上。通俗的讲就是序号是以字节为单位进行编号,每个字节对应一个字节流编号,这个工作由TCP协议底层完成,我们用户是感受不到的。一个报文段的序号是该报文段首字节的字节流编号。
假设主机A的一个进程想通过一条TCP连接向主机B上的一个进程发送一个数据流,主机A中的TCP将隐式地对数据流中的每一个字节编号。假定数据流由一个包含500 000字节的文件组成,其MSS(最大报文段长度)为1000字节,数据流的首字节编号是0,如下图所示:
该TCP将为该数据流构建500个报文段,给第一个报文段分配序号0,第二个报文段分配序号1000,以此类推,每一个序号被填入到相应TCP报文段首部的序号字段中
确认号
:TCP是全双工的,即主机A在向主机B发送数据的同时,也许也在接收来自主机B的数据。从主机B到达的每个报文段中都有一个序号用于从B流向A的数据。主机A填充进报文段的确认号是主机A期望从主机B收到的下一字节的序号。
例子1:假设主机A已经收到了来自主机B的编号为0-535的所有字节,同时假设它打算发送一个报文段给主机B,主机A等待主机B的数据流中字节536及其后的所有字节,所以主机A会在它发往主机B的报文段的确认号字段中填上536。(即seq + 1)。
例子2:假设主机A已收到主机B的包含字节0-535字节的报文段,以及另一个包含字节900-1000的报文段。由于某种原因,主机A还没有收到字节536-899的报文段。在这个例子里,主机A为了重新构建主机B的数据流,仍在等待字节536(和其后的字节)。因此,A到B的下一个报文段将在确认号字段中包含536。因为TCP只确认该流中到第一个丢失字节为止的字节,所以TCP提供的是累积确认。
主机A虽然收到了字节900-1000的报文段,但是并不会在下一个发往主机B的报文段的确认号字段中填1001,因为535后面的字节还没有得到确认,而收到的900-1000字节的报文段属于失序到达,对于失序到达的报文段的处理方法由TCP编程人员去具体实现,有两个基本选择:一是丢弃失序报文段,二是保留失序字节并等待缺少的字节以填补该间隔(这是实践中采用的方法)
标志位
:
SYN(请求建立连接–synchronous)
FIN (请求断开连接–finish)
RST(重新建立连接–reset 复位报文段)
ACK(确认 – acknowledgement)
URG(表示紧急指针域有效–urgent)
PSH(push操作)所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队
RST用来复位TCP连接。当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。
紧急标志位URG:取值为1时紧急指针字段有效;取值为0时紧急指针字段无效。紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度。
窗口大小
:用来流量控制,指示接收方愿意接受的字节数量。由接收端填充。
4位 头部长度
:标识该TCP头部有多少个32bit字(4字节)。因为4位最大能标识15,所以TCP头部最长是60字节。
16位校验和
:由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意,这个校验不仅包括TCP头部,也包括数据部分。这也是TCP可靠传输的一个重要保障。
16位紧急指针
:是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法。
TCP头部选项
:TCP头部的最后一个选项字段(options)是可变长的可选信息。这部分最多包含40字节,因为TCP头部最长是60字节
TCP连接的建立与释放
三次握手
1.三次握手的过程
(1)概述:是在底层自动实现的,用户并不会参与,对用户是透明的,但是我们可以通过tcpdump抓包观察这个过程。客户端执行connect(),三次握手开始,connect返回成功,三次握手完成,客户端与服务器端建立连接。connect执行失败,三次握手建立失败。
(2)具体过程
第一次握手
- 客户端发送SYN报文(TCP协议规定SYN=1的报文称为SYN报文,不能携带数据),选择一个初始的序列号为x,这时候client进入SYN_SENT状态。
第二次握手
- server端接收到client发送的SYN报文,如果同意建立连接,回复一个报文(ACK=1,SYN=1 seq=y,ack=x+1),这个报文也不能携带数据. 这时候,服务端从LISTEN状态转变成了SYN_RECV状态。
第三次握手
- TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
三次握手若果完成,客户端的connect成功返回,服务端把连接从未连接状态队列中放到listen的已完成队列中,accept函数从已完成队列中取出已完成的连接,返回描述符。
listen方法
用来创建监听队列,监听队列有两种,一种是存放未完成三次握手的连接,一种是存放已经完成三次握手的连接。listen的第二个参数就是指定已完成三次握手的队列的长度(在linux系统上,在unix系统上可能是两个队列的长度之和)。
accept()
处理存放在listen创建的监听队列中已完成三次握手的连接,每次处理一个连接,accept返回该连接对应的套接字的描述符。如果该队列为空,则accept阻塞。accept是否阻塞取决于监听队列(已完成三次握手的队列)是否为空。也就是说,三次握手完成了,才能执行accept();
2.TCP连接三次握手可以是两次吗?
不可以,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。
如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
三次握手可以想象两个人在打电话
- A:喂,能听到吗?
- B:听得到,你能听到吗?
- A : 能听到
3.三次握手的抓包
发送数据的抓包
我们只能看到TCP一般的操作,应答回复是底层自动实现的,我们看不到,所以相对于UDP来说,TCP性能下降了,但是可靠性很高。
四次挥手
1.四次挥手的过程
(1)图示:
(2)一般情况下服务器端不主动关闭,当客户端执行close(),此时,客户端发送FIN报文给服务器(序列号为u),服务器接收到此报文之后给客户端进行回应(ack=u+1),然后服务端执行close©,向客户端发送FIN报文(seq=w),客户端收到报文后,回复给服务器ACK报文(ack=w+1).
(3)具体过程
-
客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(
等于前面已经传送过来的数据的最后一个字节的序号加1
),此时,客户端进入FIN_WAIT_1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号
。 -
服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE_WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE_WAIT状态持续的时间。
客户端收到服务器的确认请求后,此时,客户端就进入FIN_WAIT_2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
- 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST_ACK(最后确认)状态,等待客户端的确认。
- 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME_WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。
2. 为什么客户端最后还要等待2MSL?
第一
,可靠的终止TCP连接。保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。
第二
,保证迟来的报文有足够的时间识别并丢弃。防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。通俗来说就是,因为服务器在发送FIN报文之前还有可能有数据的传送,但是这个报文由于网络原因还没有到达,如果没有TIME_WAIT状态的话,可能客户端(相同的IP和端口)被立即重新启动,当报文到达的时候又会被接收,但是这个报文并不是应该这个客户端接受,应该是上次被关闭的客户端接受。
MSL
:是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文(segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各层中的称呼》一文,而ip头中有一个TTL域,TTL是time to live的缩写,中文可以译为“生存时间”,这个生存时间是由源主机设置初始值但不是存的具体时间,而是存储了一个ip数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。
3.四次挥手的抓包
状态转移图
三次握手期间可能会收到什么样的攻击?
SYN洪泛攻击
概述
:服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。SYN 攻击是一种典型的 DoS/DDoS 攻击。
例如
检测
:检测 SYN 攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。在 Linux/Unix 上可以使用系统自带的 netstat 命令来检测 SYN 攻击。
netstat -n -p TCP | grep SYN_RECV 1
常见的防御 SYN 攻击的方法有如下几种:
缩短超时(SYN Timeout)时间
增加最大半连接数
过滤网关防护
SYN cookies技术
引用一篇大佬文章:SYN洪泛攻击
TCP可靠性传输
应答确认
是指每次发送端给接收端发送一段数据m1,接收端收到数据之后会给客户端回复一个ACK报文,表明数据已经收到。在发送方未收到m1的确认信息之前,m1应该保留。直到收到确认信息才能丢弃。
超时重传
超时重传是指当发送端发送数据给接收端的时候会设置一个定时器,当超过定时器的时间,仍然没有接收到来自接收端的应答回复,这时候发送端就认为发送的数据没有到达接收端,将会重新发送数据给接收端。
关于没有接收到数据有两种情况:①发送的数据确实没有到达接收端 ②发送的数据到达了接收端,但是接收端回复的ack报文没有到达发送端,这种情况当接收端再次接到同样的报文的时候会丢弃重复的报文。
超时重传最核心的是确定超时重传的时间,这个时间不能过长,因为会导致访问变慢,但也不能过短,因为报文还没传输完成就认为没有到达,重新发送,引起不必要的重传即时间必须大于往返时间(RTT)。
快速重传
在超时重传中,重点是定时器溢出超时了才认为发送的数据包丢失,快速重传机制,实现了另外的一种丢包评定标准,即如果我连续收到3次dup ACK,发送方就认为这个seq的包丢失了,立刻进行重传,这样如果接收端回复及时的话,基本就是在重传定时器到期之前,提高了重传的效率。
在传输过程中会出现out-of-order的现象,但是在滑动窗口中会有严格的顺序控制,假设有4,5,6三个待接收的数据包,先收到了5,6,协议栈是不会回复对5,6包的确认,而是根据TCP协议的规定,当接收方收到乱序片段时,需要重复发送ACK, 在这个地方会发送报文4 seq的ACK,表明需要报文4没有被接收到,如果此后收到的是报文7,那么仍然要回报文4 seq的ACK,如果连续发送3个 dup ACK,接收端认为这个片段已经丢失,进行快速重传
。也就是tcp回复的确认号是我下次想接收到的序号。
乱序重排
TCP具有乱序重排的功能。当发送端想接收端发送数据的时候,可能某一条线路堵塞导致先发送的数据可能后到达,对于传输层来说,可能报文顺序乱了,但是传输层会根据报文序号排序,再交给应用层。
流量控制
一般来说,我们希望数据传输的更快一些,不会一次只发一个字节,但是如果太快的话,接收方可能没有足够的时间接收数据,造成数据的丢失。所谓流量控制就是让发送方不要发送的太快,让接收方也有足够的时间接收。TCP利用滑动窗口实现流量控制。
在 TCP 的报头中有一个字段叫做接收通告窗口,这个字段由接收端填充,是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。所以发送端就会有一个发送窗口,这个发送窗口的大小是由接收端填充的接收通告窗口的大小决定的,并且窗口的位置会随着发送端数据的发送和接收到接收端对数据的确认而不断的向右滑动,将之称为滑动窗口。
流程:
死锁
死锁的解决
TCP为每一个连接设置一个持续计时器,如果TCP的一端收到另一端的0窗口报文,就是启动持续计时器,让持续计时器时间到的时候,会向另一方发送一个探测报文(携带一字节数据),另一方如果收到之后,会回复自己的窗口状态,如果窗口仍然为0,那么继续启动持续计时器,如果不是0,那么死锁的僵局就可以打破了。
TCP规定即使接收窗口为0,也要接受确认报文段,零窗口探测报文段,携带有紧急数据的报文段。
rwnd:receive Window 接收窗口
注意点:
TCP拥塞控制
拥塞控制概念
拥塞控制也是通过窗口的大小来控制的,前面的滑动窗口rwnd是怕发送方把接收方缓存塞满,拥塞窗口cwnd是怕把网络塞满。(congestion window )
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞(congestion)。
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
图示:
理想状态下的拥塞控制是输入负载等于吞吐量。
TCP拥塞控制算法
- 慢开始算法
- 拥塞避免算法
- 快重传算法
- 快恢复算法
介绍算法之前,我们假定这些条件:
慢开始和拥塞避免
慢开始算法是将拥塞窗口的值指数级增长
拥塞避免算法是将拥塞窗口的值递增增长
图示:
快重传算法
快恢复算法
四种算法的描述:
第六章 应用层
DHCP协议
1.概述
我们都知道,如果给主机人工配置信息可能会导致错误并且十分麻烦,我们可以将这个工作交给一个软件来做。如果我们想要获取IP地址等信息,就向运行着这个软件的主机发送我们的请求,然后主机给我们我们需要的配置信息,这样就可以了。
DHCP(Dynamic Host Configuration Protocol)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。(百度百科)
如果你在局域网中,分配的ip就是局域网ip,地址段包括一下几个部分:
10.0.0.0~10.255.255.255/8
172.16.0.0~172.31.255.255/16
192.168.0.0~192.168.255.255/24
如果是在公网,那么分配的IP地址肯定就是除了以上私有地址以外的地址了:
1.0.0.0~223.255.255.255之间(除去保留地址)就是了!
2.DHCP的作用
3.DHCP中继代理
我们知道,如果在一个局域网中发送广播信息,路由器不会转发。但是我们又不想设置太多的DHCP服务器,所以我们可以将路由器设置为中继服务器,由它来转发广播报文给DHCP服务器。
DNS
电子邮件
为什么我们使用QQ邮箱能发送给使用谷歌邮箱的用户?
因为我们我们使用的客户端软件发送给腾讯的服务器,腾讯的服务器中保存着我们的邮件,然后将我们的邮件发送给谷歌的服务器,当我们的朋友打开客户端的时候,就可以访问谷歌的服务器,然后找到我们给他发送的邮件。
HTTP协议
在浏览器中输入url回车之后会发生什么
域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户
URL简介
http概述
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
http本身是无连接的
,它只是使用了面向连接的运输层的TCP协议,保证了数据的可靠传输。虽然http使用了tcp连接,但是通信的双方在交换http报文之前不必建立连接。
http是无状态的
,也就是说,同一个客户第二次访问服务器上的统一个页面的时候,服务器的操作是一样的。这样做的优点是,不需要维护客户端的信息,简化了服务器的设计,让服务器可以支持大量的连接。
http连接方式
1.非持久连接:close
http/1.0采用非持久连接。每次浏览器请求一个文件,都要与服务器建立TCP连接,当受到响应之后立即关闭连接。
缺点:每次请求一个文档都会有两倍的RTT开销。以前对于那些静态页面还好,现如今网页内容很丰富,如果网页上有很多连接,呢没打开一个连接就要有2RTT时间的开销。
浏览器会维护很多资源。
2.持久连接:keep-Alive
HTTP/1.1的持续连接有两种工作方式:非流水线方式,流水线方式。
非流水线方式
特点是,用户在未收到上一条响应之前不会发送下一条请求。因为服务器在发送完一个对象后,TCP连接就处于了空闲状态,浪费了服务器的资源。
流水线方式
的特点是,在用户收到http响应报文之前,就能够发送下一条报文。是TCP链接中的空闲减少,大大的挑高了效率。
http报文格式
http有两种报文格式:请求报文和响应报文。
1.请求报文
首行使用了相对的URL地址是因为,下面的首部行写明的主机的域名host。
GET 和 POST方法的区别
:post方法用来获取传输实体的主体,虽然有时候get方法也可以获得传输实体的主体,但是一般不使用get,get主要用来请求URL指定的文档资源。
OPETIONS
:可以用来查询针对请求URL指定的资源支持的方法;
CONNECT
方法要求在通信的时候与代理服务器建立隧道,实现用隧道协议进行通信。主要使用SSL.TSL协议把信内容加密后经过网络隧道进行传输。
格式:CONNECT 代理服务器名:端口号 协议版本
2.响应报文
每一个请求报文发出之后都能收到一个响应报文,响应报文也是三部分组成。
短语
是指解释状态码的短语。
状态码的含义:
在服务器上存放用户的信息——Cookie
cookie介绍
早期的上网需求很简单,浏览一些静态的网页,所以http被设计成是无状态的,但是现在有些时候我们却需要知道用户的一些状态信息,比如购物网站需要维护购物车里的信息,保存登录的账号和密码等操作。要做到这一点,可以再HTTP中使用cookie。
cookie愿意是小甜饼的意思,在这里指的是服务器和客户传递的信息。很多网站现在已经使用了cookie。Cookie提供了一种机制使得万维网服务器能够“记住”用户,而无需用户主动提供用户标识信息。也就说,Cookie是一种对无状态的HTTP进行状态化的技术。
工作过程
:
我们以这张图来看,当客户A浏览某个使用cookie的网站的时候,该网站的服务器就会维A产生一个惟一的识别码,并以此作为索引在网站的后端服务器的数据库中建立一个项目。接着再给A的响应报文中添加一个Set-cookie
的首部行。例如:
Set-cookie: 12345678
当A收到这个响应报文后,其浏览器就会在他管理特定的Cookie文件中添加一行,其中航包括这个服务器主机的主机名和Set-cookie后面给出的是捏吗。当A继续浏览这个网页的时候,每发送一个请求报文,其浏览器就会从Cookie文件中取出这个网站的识别码,并放到HTTP请求报文的Cookie首部行中,例如:
Cookie:12345678
于是,这个网站就能够跟踪用户A在该网站的活动。其实服务器并不知道用户A的真实姓名和其他信息,但是服务器可以知道用户A在神秘时候访问了什么页面。如果A是在网上购物,那么服务器可以为他维护一个列表记录加入购物车中的商品。
代理服务器
如果原始服务器的内容更新了怎么版?
是这样处理的,代理服务器通常会为每个响应的对象设置有效日期字段(Expired)和修改时间字段(Last-Modified)来表示对象的状态。
当判断这个对象没有过期,就返回这个对象给客户。
当判断这个对象过期了,就会重新想原始服务器请求资源,如果发现资源并没有改变,就重新设置上面的两个字段。如果过期了就更新对象。
一个题目