一、计算机网络的定义和分类
定义:
-
简单定义:一些互连、自治、的计算机集合。
-
较好定义:计算机网络主要是由一些通用的、可编程的硬件互连而成,而这些硬件并非专门用来实现某一特定目的。
分类
- 按交换技术分类
- 按使用者分类
- 按传输介质分类
- 按覆盖范围分类
- 按拓扑结构分类
二、网络分层结构及其必要性
五层体系结构:
TCP/IP 四层模型
上面与五层体系结构大致相同,只有最后一层的网际接口层对应五层的物理层和数据链路层
七层结构:
- 应用层:网络服务与最终用户的一个接口,常见的协议有:HTTP FTP SMTP SNMP DNS.
- 表示层:数据的表示、安全、压缩。,确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
- 会话层:建立、管理、终止会话,对应主机进程,指本地主机与远程主机正在进行的会话.
- 传输层:定义传输数据的协议端口号,以及流控和差错校验,协议有TCP UDP.
- 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP IGMP IP等.
- 数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。
- 物理层:建立、维护、断开物理连接。
三、物理层(为解决使用何种信号来传输比特的问题)
物理层的传输媒体
- 导引型传输媒体:同轴电缆、双绞线、光纤、电力线
- 非导引型传输媒体:无线电波、微波、红外线、可见光
传输方式(物理层比特的传输方式)
- 串行传输:一个比特一个比特依次发送,发送端和接受端之间只需要一条数据传输线路即可
- 并行传输:n个比特n个比特依次发送,发送端和接受端之间需要n条数据传输线路
- 同步传输:以稳定的比特流的形式传输,字节之间没有间隔。(以多个字节为传输单位)
- 异步传输:以单个字节为独立的传输单位。字节之间有间隔(不固定)
- 单工通信:通信双方只能一个方向传输数据。
- 半双工通信:通信双方可以双向传输数据,但不能同时进行。
- 全双工通信:通信双方可以同时双向传输数据。
四、数据链路层(解决分组在一个网络上传输)
封装成帧
- 概念:封装成帧指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
- 帧格式(两种举例):
(1)帧头和帧尾作用之一是帧定界(使接受方的数据链路层能够从物理层交付的比特流中提取出帧),可以通过加转义符提高容错率。
(2) - 透明传输:指数据链路层对上层交付的传输数据没有限制,就好像数据链路层不存在一样。
(1)面向字节的物理链路使用字符填充(转义字符)的方法实现透明传输
(2)面向比特的物理链路使用比特填充(在连续的比特1后面加比特0,接受方再剔除)的方法实现透明传输
差错检测
- 引出:比特传输过程中,出现比特差错(1变0或0变1)
- 以太网V2的MAC帧中的FCS字段是为了使接收方的数据链路层检验比特在传输过程中是否产生了误码。PPP帧的FCS也是如此
- 差错检测方法一:奇偶校验、
- 差错检测方法二:循环冗余校验CRC
可靠传输
- 概念:想办法实现发送端发送什么,接收端收到什么。
- 不可靠传输服务:仅仅丢弃有误码的帧,其它什么也不做
- 可靠传输实现的三种机制:
(1)停止等待协议
(2)回退N帧协议
(3)选择重传协议
点对点协议PPP
媒体接入控制
- 概念:共享信道要着重考虑的一个问题就是如何协调多个发送和接受站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)
MAC地址、IP地址、ARP协议
- MAC地址
(1)概念:当多个主机连接在同一个广播信道上,要想实现两个主机间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址。在每个主机发送的帧中必须携带发送主机地址和接收主机的地址。这类地址是用于媒体接入控制,因此这类地址被称为MAC地址。
(2)注意:它也被称为物理地址(固定在网卡上)。MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。 - IP地址(网络层的范畴)
(1)概念:IP地址是因特网上的主机和路由器所使用的地址,用于标识两部分信息:
网络编号:标识因特网上某一网络
主机编号:标识同一网络上的不同主机
(2)从网络体系结构看IP地址和MAC地址:
图中网络层首部含有源IP地址和目的IP地址,链路层首部含有源MAC地址和目的MAC地址。
(3)注意:数据包在跨网络的转发过程中IP地址不变,而MAC地址改变。
(4)IP地址和MAC地址区别:
1. IP地址可以标识网络,而MAC地址不能。
2. IP地址属于网络层,MAC地址属于数据链路层。
3. IP地址是可变的,MAC地址是不可变的。
4. IP地址用于实现不同网络之间的通信,而MAC地址用于实现本地网络中的通信。
区别的理解思路:IP地址可以被路由器转发到不同的网络中,实现不同网络之间的通信,而MAC地址只能在本地网络中使用,不能跨越不同的网络。在网络通信中,路由器会根据IP地址进行转发,而在本地网络中,交换机会根据MAC地址进行转发。 - ARP协议(地址解析协议ARP)
(1)功能:通过主机的IP地址找到对应的MAC地址。
(2)原理如下:
第一步,主机B知道C的IP地址,想要给C发送数据包,但是在封装MAC帧时(数据链路层),不知道C的MAC地址(目的MAC地址),故无法填写目的MAC地址。
第二步,实际上,每个主机都有ARP高速缓存表,所以主机B会在自己的ARP高速表中查找C对应的MAC地址。
第三步,主机B没有找到,就以广播形式发送ARP请求报文的广播帧(封装在MAC帧中,目的地址为FF-FF-FF-FF-FF-FF).
第四步,主机A收到后,发现询问的IP地址不是自己,就不予理会。主机C收到后,发现询问的IP地址是自己,首先把主机B的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给B发送ARP响应单播帧(封装在MAC帧中,目的地址为B第MAC地址)告诉主机B,主机C的MAC地址是什么。
第五步,主机A收到后,单播帧的目的地址与自己MAC地址不对应,则不予理会。主机C收到该单播帧后,发现目的地址与自己的MAC地址对应,则接受该单播帧,将C的主机IP地址和MAC地址记录到自己的ARP高速缓存表中。现在,主机B可以给主机C发送想要发送的数据包了。
五、网络层(为解决分组在网络上传输问题)
IPV4地址
- 分类编制的IPV4地址
- 无分类编制的IPV4地址
- 划分子网的IPV4地址(下面只记录该类地址笔记)
(1)引出:当某单位的网络逐渐扩大,需要将原来的网络划分成三个独立的网络。此时若为新增网络申请新的网络号会带来以下弊端(时间和费用代价;增加路由器中记录;浪费原有剩余的大量IP)因此可以根据IPV4地址的主机号部分借用一些位来区分不同子网,例如可以借用主机号部分(8位-一段或者16位-两段等)(一个段为一个字节)的某些位来是主机号部分有两个作用,一个是区分不同子网,另一个是区分同一子网中的不同主机。
(2)子网掩码:子网掩码根据自身的值和IPV4地址相与,得到(子)网络号部分(网络地址)。因此它满足网络号的前三个字节的每个位都为 1。若要划分子网,则它的主机号部分占用的位也要为 1,这样一来就能根据已知的IPV4地址和给出的子网掩码来对IPV4进行子网划分。
IP数据报的发送和转发过程
- 引出:不同网络之间的通信,需要路由器进行中转,间接交付。同一网络中的通信,需要交换机中转,直接交付。
- 举例:
(1)第一步,主机A要给主机D发送IP数据包(主机A知道主机D的IP地址),主机A将自己IP地址与自己的子网掩码相与得到所在网络IP地址,主机A将F的IP地址与自己的子网掩码相与,得到目的网络地址,与自己所在网络地址不相同。因此,主机A要把IP数据包发给路由器,使它帮其转发。(间接交付)
(2)第二步,一个网络上的各主机都有默认网关(路由器),因此主机A会将IP数据包发送给默认网关。
(3)第三步,默认网关对IP数据报进行转发。流程为:首先检测IP数据报首部是否出错,若出错,丢弃并通知源主机。然后根据IP数据报的目的IP地址在路由表中查找匹配的条目;若找到则发给条目中的下一跳,否则,丢弃并通知源主机。(判断是否匹配?根据目的IP地址和路由表中的记录的地址掩码相与,判断得到的网络地址是否和该条记录对应的目的网络地址相同,若相同,则路由器就转发到该条记录的下一跳)。这样,主机D就可以收到路由器转发来的IP数据包
注意:需要设计很好的数据结构来提高路由表的记录的查找速度
IPV4数据报的首部格式
待
网际控制报文协议ICMP
功能:
ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。 比如我们日常使用得比较多的ping,就是基于ICMP的。
- 终点不可达
- 源点抑制
- 时间超过
- 参数问题
- 改变路由(重定向)
六、运输层
运输层端口号、复用、分用
-
运输层端口号
这个图片,说明了计算机上的进程用进程标识符PID来区分,但是因为不同操作系统的进程标识符PID不一样,则要找到统一的方法来区分主机自身应用层的应用进程进行标识(通过端口实现)。 -
发送方的复用和接受方的分用
-
有哪些协议在运输层使用TCP协议或者UDP协议?
TCP和UDP的对比
TCP的流量控制
- 概念:让发送方的发送速率不要太快,要让接收方来得及接受
- 实现方法:利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
- 具体实现:TCP会话的双方都各自维护一个发送窗口和一个接收窗口。接收窗口大小取决于应用、系统、硬件的限制。发送窗口则取决于对端通告的接收窗口。接收方发送的确认报文中的window字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将接收方的确认报文window字段设置为 0,则发送方不能发送数据。
TCP的拥塞控制
-
概念: 某个网络中的输入负载过多,网络性能变坏,这种情况叫做拥塞。
-
cwnd、swnd、ssthresh变量
-
TCP的拥塞控制(慢开始、拥塞避免、快重传、快恢复)
(1)慢开始:把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。每经过一个传输轮次,拥塞窗口 cwnd 就加倍。 为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
(2)拥塞避免:让拥塞窗口cwnd缓慢地增大,每经过一个传输轮次,就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长。
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认,引起超时重传),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。
(3)快重传:当某个发送方发送的报文丢失,要使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
这样一来,发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,发送方不会发现超时重传,不会误认为拥塞。上图中可以看到,超时重传时间RTO大于立即重传所需时间。
(4)快恢复:发送方收到三个重复确认后,知道只是丢失了个别的报文段,于是不启动慢开始算法,而是执行快恢复算法。具体过程为:1. 发送方将开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;2. 然后开始执行拥塞避免算法。(也有的快恢复算法是在快恢复开始时候,把cwnd值增大一些,cwnd=ssthresh+3)
cwnd:发送方维护的一个变量,取决于网络的拥塞程度动态变化。(没出现网络拥塞就增大,出现了就减少)。
swnd:发送方将拥塞窗口作为发送窗口swnd,即 swnd = cwnd
ssthresh:慢开始门限。
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
判断网络拥塞:是否引起发送方的超时重传
TCP可靠传输的实现(通过流量控制和拥塞控制)
TCP连接的建立(三次握手)
步骤如下:
- 一开始,TCP服务器进程首先创建传输控制块,用来存储TCP连接中的重要信息。之后,TCP服务器进入监听状态。
- TCP客户进程首先创建传输控制块,然后主动向TCP服务器发送连接请求报文段,并进入同步已发送状态。(SYN=1表示该报文段为请求建立连接的的报文段;seq=x表示TCP客户进程所选择的初始序号)
- TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态(SYN=1表示该报文段为同意建立连接的报文段;ACK=1表示确认接受客户端发送的报文段;seq=y表示TCP服务器进程所选择的初始序号,ack=x+1表示对TCP客户进程所选择的初始序号的确认)。
- TCP客户端向TCP服务器进程发送一个普通的TCP确认报文段,并进入连接已建立的状态。(ACK=1表示确认接受TCP服务端发送的报文段;seq=x+1表示TCP客户进程已经消耗一个序号,这是下一个要消耗的序号;ack=y+1表示对TCP服务器进程所选择的初始序号的确认)(注意:该条报文段没有SYN字段,若该报文段不携带数据,则下一次,客户端发送报文段时候,序号仍然为seq=x+1)
- TCP服务器进程收到报文段后,进入连接已建立状态。现在,两个进程之间可以基于已建立好的TCP连接进行可靠传输。
注意:TCP规定SYN=1的报文段,不能携带数据,但要携带一个序号
TCP连接的释放(四次挥手)
步骤如下:
- TCP客户进程的应用进程通知其主动关闭TCP连接。TCP客户进程会发送TCP连接释放报文段,并进入终止等待1状态(FIN=1表示该报文段为请求释放连接报文段;ACK=1表示确认TCP服务端发送的报文段;seq=u表示TCP客户进程之前已传送过的最后一个报文段的序号加一;ack=v表示TCP客户进程之前已收到的最后一个TCP服务器报文段的序号加一)
- TCP服务器进程收到后,发送一个TCP确认报文段,并进入关闭等待状态。(ACK=1表示确认TCP服务端发送的报文段;seq=v表示TCP服务器进程之前发送的数据的最后一个字节加一;ack=u+1表示对之前TCP客户进程发送的报文段的确认)
- TCP服务器进程通知TCP客户进程,此时,从TCP客户进程到TCP服务器进程方向的连接就释放了。
- TCP客户进程收到TCP确认报文段后,进入终止等待2状态。
- 若使用TCP服务器进程的TCP客户进程没有数据要发送了,应用进程就通知TCP服务器进程释放连接,为被动关闭连接。TCP服务器进程发送TCP连接释放报文段并进入最后确认状态。
- TCP客户进程收到后,发送TCP确认报文段,进入时间等待状态。
- TCP服务器进程收到后,进入关闭状态。
- 等待2MSL后(可根据实际情况改变),TCP客户进程进入关闭状态。
注意:(1)FIN=1的报文段即使不携带数据,也要消耗掉一个序号;
(2)最后一个报文段的序号加一 可以这样说 —— 已发送的或者已收到的数据的最后一个字节加一,这也是最新的序号,这个最新序号(ack、seq)用于确认或者发送报文段。
TCP报文段的首部格式
七、应用层(通过主机间通过应用进程间的交互来实现特定网络应用)
动态主机配置协议DHCP
域名系统DNS
- 域名格式:··· . 三级域名 . 二级域名 . 顶级域名
- 域名空间:
- DNS服务器:
(1)功能:实现域名到IP地址的转换
(2)分类:本地域名服务器、根域名服务器、顶级域名服务器、权限域名服务器 - 域名解析的过程(输入域名之后,按下回车键后的第一步 —— 解析域名,获得IP):
一共有两种查询方式:递归查询 和 迭代查询
(1)递归查询
(2)迭代查询
注意:由于递归查询对于被查询的域名服务器负担太大,通常采用以下模式:从请求主机到本地域名服务器的查询是迭代查询,而其余的查询是迭代查询。 - DNS缓存
(1)引出:为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
(2)适用对象:在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。
(3)注意:由于域名到IP地址的映射关系并不是永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并删除超过合理时间的项。
万维网WWW
-
万维网:是运行在因特网上的一个分布式应用
-
URL和URI:资源定位符(找到该资源) 和 资源标识符(识别该资源)。URL构成如下:
-
万维网的文档:由html、css、js、xxx.img等等构成的文档,且它位于万维网的服务器中。在各个浏览器中,由各个浏览器的内核引擎进行渲染。
-
HTTP协议(超文本传输协议)
(1)引出:怎样向万维网服务器请求万维网文档,万维网怎样把文档传送给浏览器?这也说明了为什么叫做超文本传输协议(用于传输超文本——万维网文档的一种协议规则) -
HTTP1.0
(1)特点:采用非持续连接方式,即每请求一个资源就会释放TCP连接。再次请求资源时候,需要再次三次握手(第三次可携带HTTP请求报文)建立TCP连接,然后四次挥手释放连接。
(2)时间代价大:每请求一个文档就要有两倍的RTT的开销。浏览器可以通过建立多个并行的TCP连接同时请求多个对象,但是这样会大量占用万维网的资源。 -
HTTP1.1
(1)特点:采用持续连接方式。在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同个浏览器和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。(这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同-个服务器上就行。)
(2)注意:为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样就节省了很多个RTT时间,提高了下载文档的效率。 -
HTTP的报文格式
注意:HTTP是面向文本的,其报文中的每一个字段都是一些ASCII码串, 并且每个字段的长度都是不确定的。
(1)请求报文格式
(2)响应报文格式
8. Cookie
(1)引出
(2)Cookie实现原理
9. Web缓存
(1)概念:Web缓存是一种常见的代理服务器应用,它可以缓存客户端请求的Web资源,如HTML页面、图片、视频等,以减少客户端和服务器之间的网络流量和延迟。
(2)具体实现:当客户端请求某个Web资源时,代理服务器会先检查本地缓存中是否有该资源的副本,如果有,则直接返回给客户端,否则代理服务器会向服务器请求该资源,并将其缓存到本地,然后返回客户端。
(3)注意:若原始服务器中的某文档已被更改,这就会导致代理服务器中的文档和原始服务起中的文档不一致了。实际上,原始服务器会为响应的文档设置一个修改时间字段,和过期时间字段。所以,当主机去代理服务器请求该文档时,会判断该文档是否过期,若未过期,若已过期,代理服务器向原始服务器发送一个带有首部字段为if-modified-since(取值为该文档的修改日期)的首部行。原始服务器就可判断代理服务器中存储的该文档是否与自己存储的文档一致。若一致,给代理服务器发送不包含实体主体的响应,状态码为304,短语为 Not modified,代理服务器会重新更新该文档的有效日期。若不一致,给代理服务器发送封装有该文档的响应报文。此后,代理服务器将更新后的该文档封装在响应报文中发回给客户端主机。