计算机网络概论|青训营笔记
前言&课程介绍:
- 计算机网络目前已经像日常生活中的水电煤气设施一样,成为我们生活中不可或缺的一部分,逐渐成为虚拟世界与现实世界的沟通桥梁。
- 课程目标和收益:建立对计算机网络的初步认识,对计算机网络中的各种概念(网络分层、网络协议、网络应用等)有初步的理解,进而可以在后续的实际工作中能高效解决网络问题。
课程内容介绍:
- 通过一个示例建立对计算机网络的整体认识
- 建立对网络协议分层的认知
- 分析HTTP1、2、3的关系
- 介绍CDN运行的基本原理
- 了解网络安全的最基本原则
课程分析方法:
1、自底向上(用于构建对计算机网络的认知,从一个基础节点开始,不断增加复杂度,直到构建出一个完整的计算机网络):
- 从简单开始,逐渐复杂
- 将模块逐步拼凑成一个系统
2、自顶向下( 用于解释线程网络应用、协议的特性、工作原理等,从最高层次的实际需求开始,描述如何使用计算机网络系统构建一个满足实际需求的目标):
- 从复杂开始,逐渐变简单
- 从复杂的系统问题入手,拆分为模块问题
本节课会交替使用两种分析方法,更加深入地学习计算机网络内容。
蟹堡王帝国
顾客:客户端
分店:服务端
小区转发点:路由器
转发表格:网络协议
计算机网络基础
网络组成部分:
主机:客户端和服务端(提供信息和接收信息)
路由器(转发主机之间的信息)
网络协议(提供统一的格式,方便路由器和主机对信息编译字节码)
网络结构:网络的网络
比奇堡和小区网络:本地网络
比奇堡+北京和上海分店:三个本地网络节点的网络
全国通信网络:本地网络的网络
小区的网络与其蟹堡王连接的分店组成的一个区域性的网络叫区域网络(区域网络覆盖一个城市或城市群,比本地网络(LAN)的范围更大,但比广域网小。典型的应用场景包括连接同一城市内的多个企业办公楼、大学校园、政府机构等。区域网络通常使用高速光纤或其他高速传输介质,可以提供较高的数据传输速率。)
而这些分店和每个城市中作为主要转换点的分店所组成的网络又组成了一个城市范围内的网络一般叫做城域网(城域网是指覆盖一个学校、大学或企业园区范围内的计算机网络。城域网的规模介于本地网络和区域网络之间。城域网通常由多个相互连接的局域网组成,以实现资源共享、通信和数据传输。城域网可以使用有线和无线连接。 )
城域网所组成的网络一般称为广域网( 广域网覆盖一个很大的地理区域,如国家、地区甚至全球。广域网通过远程通信链路和中继设备连接多个本地网络、区域网络和城域网。典型的广域网应用包括互联网、电话公司的网络和大型企业的全球网络。 )
信息交换方式的两种方式:电路交换和分组交换
电路交换是一种点对点的连接方式,需要在通信前建立连接,然后在连接上进行数据传输。这种方式适用于需要长时间传输大量数据的场合。
优点:
-
通信时延小:因为通信线路为通信双方专用,数据直达 ,当连续传输大量数据时这一优点会非常明显
-
有序传输:因为通信双方只有一条专用的通信线路,数据仅在这一条线路上传输,不存在失序问题
-
没有冲突:因为不同的通信双方拥有不同的通信信道,不会出现争用信道的问题
-
适用范围广:电路交换既适用于传输模拟信号,也适用于传输数字信号
-
实时性强:主要得益于通信时延小
-
控制简单
缺点:
-
建立连接时间长:线路独占、使用效率低:电路交换连接一旦建立,物理通路就被通信双方独占,即使通信线路空闲也不能供其他用户使用
-
灵活性差:只要连接所建立的物理通路中的任何一点出现了故障,就必须要重新建立新的连接
-
难以规格化:电路交换对于不同类型、不同规格、不同速率的终端很难进行通信,也难以在通信过程中进行差错控制
分组交换则是将数据分成小块进行传输,每个分组都包含有目的地址和源地址等信息,可以独立传输。这种方式适用于传输小量数据和需要灵活控制带宽的场合。
优点:
-
无需建立连接:不需要建立连接,不存在连接建立时的时延,用户可以随时发送报文
-
动态分配线路:当发送方把报文传送给结点交换机时,结点交换机先存储整个报文,然后选择一条合适的空闲线路,再将报文发送出去
-
提高线路的可靠性:如果某条传输路径发生故障,会重新选择另外一条路径传输数据
-
提高线路利用率:通信双方并不是固定占用一条通信线路,而是在不同时间分段部分占用物理线路
-
提供多目标服务:一个报文可以同时发送给多个目的地址
缺点:
-
增加转发时延:因为分组在结点交换机上要经历存储转发的过程
-
需要传输额外的信息量:因为每个分组需要携带目标地址、源地址等信息
-
当分组交换采用数据报服务时,可能出现失序、丢失或重复分组,分组到达目的结点时,要对分组按编号进行排序等工作
-
当分组交换采用虚电路服务,虽然没有失序问题,但有呼叫建立、数据传输和虚电路释放三个过程要携带目标地址、源地址等信息
网络分层 :
-
快递公司(类比应用层)不关心包裹内容
-
卡车(类比传输层)不关心车厢里拉的是什么
-
高速公路(类比网络层)不关心开的什么车
网络分为五层,又称为TCP/IP五层模型,从低到高分别是物理层、数据链路层、网络层、传输层和应用层。
课程中重点关注以下三层:
· 网络层: 负责地址管理和路由选择,以确定数据包从源节点到目的节点的最佳路径。
· 传输层: 负责两个主机之间的数据传输,包括数据的分段、传输、重组和确认。传输层还负责处理流量控制和差错控制。
· 应用层: 负责应用程序间沟通。
协议的存在依赖于链接,协议要能够交换信息,否则协议无效,协议定义了两个或多个通信实体之间交换的报文格式和顺序,以及报文发送或接受一条报文或其他时间所采取的动作。
标头和载荷: 在计算机网络中,数据通常按照协议的格式进行封装和传输。一个数据包或帧通常被分为两部分:标头和载荷,两者共同实现数据在网络中的传输和处理。快递面单在计算机网络中成为标头(header),对于收件人和寄件人来说,寄件人和收件人的地址是标头,记录了包裹内的信息,而包裹内的东西被称为载荷(payload),代表了实际要送达的东西;而对快递公司的车辆来说,面单在寄件人收件人和地址上方的信息是标头,记录了这个包裹应去往哪个车哪个集散点,寄件人收件的地址中的包裹是载荷。总结来说标头是数据包或帧的开头部分,包含了用于处理和传输数据的控制信息。载荷是数据包或帧的主体部分,包含了实际要传输的数据。在数据传输过程中,数据包或帧会经过多个网络层次。每个层次都可能为数据添加自己的标头,形成嵌套的结构,这种嵌套结构有时被称为“封装”。
HTTP协议示例: http协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议,使用TCP/IP通信协议传输数据,面向对象简洁、快速、无连接、无状态。工作于B/S架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即web服务端发送请求(Request)。Web服务端根据接收到的请求数据后,向客户端发送响应信息(Response)。
这是http在wireshark上的解析,这是一个完整的链路层的帧,左边是解析后的结果,右边是这个链路层帧的原始数据,右边的左半部分是以十六进制形式展示的结果,右边的左半部分是以ASCII形式展示的结果。
第二行的NULL/lookback表示的是这个帧是本地帧,原地址目标地址都是本机,不需要通过别的交换机,链路层数据的定义对应的是最左边的四个字节即18 00 00 00,以十进制表示二十四,代表了这个链路层帧选的是IPv6。
第三层表示的是IP层,IP协议的头部定义右边的第五到第四十四个字节,这四十个字节包含了IP协议的版本,源IP地址和目的IP地址,载荷程度等信息。
第四行是TCP协议层,TCP头部总共有二十个字节,包含了源端口号和目的端口号,序列号,头部长度和载荷信息和载荷长度信息等。
第五行是http协议层。
Web中的网络
请求:
-
第一行也称起始行,包含三个要素:get、/、http1, 分别代表了请求方法(GET)、请求资源的路径(/index.html)和 HTTP 协议版本(HTTP/1.1)。
-
第二行是头部,使用冒号分割,左边是头部的名称(不区分大小写),右边是头部的值 Host 头部指定了请求的目标服务器域名。
-
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36。User-Agent 头部描述了发起请求的客户端(浏览器)的信息,包括操作系统、浏览器类型和版本等。
-
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8。Accept 头部表示客户端支持接收的 MIME 类型。在这个示例中,客户端支持接收 HTML、XHTML、XML 和 WebP 等格式的内容。
-
Accept-Language:en-US,en;q=0.5。Accept-Language 头部表示客户端支持的语言和优先级。在这个示例中,客户端优先支持美国英语,其次是其他英语。
-
Connection:keep-alive。Connection 头部表示连接的控制选项。在这个示例中,keep-alive 表示客户端希望保持连接,以便在多个请求之间复用 TCP 连接。
响应:
-
第一行成为状态行包含三个要素:HTTP/1.1 200 OK。分别表示 HTTP 协议版本(HTTP/1.1)、状态码(200)和状态描述(OK)。状态信息是可以自定义的;
-
Date:Mon, 23 May 2022 22:38:34 GMT。Date 头部表示响应生成的日期和时间;
HTTP链接模型:
HTTP协议是使用了典型的请求—响应模型,也就是说当客户端发起第一个请求时,需要等服务端先返回第一个请求完成响应,客户端才可以发起第二个请求,这种方式的网络利用率显然不高,这种通信模型导致了一个弊端是无法在一条链接上实现多路复用,在一个完整请求中间,插入另一个请求会导致http协议无法分辨这一部分内容是来自哪个请求的,请求的头部和响应的头部都有很多重复,这些头部会重复发送,无法压缩,无形中报文体积增大。
这张图展示了http1 和http1.1的链接模型、http管线模型(可以同时发送多个请求,服务器会按照请求的顺序依次处理,并按照顺序响应,但显示几乎没有客户端回应)
对于队头堵塞的问题,http1.1最常用的方案是同时建立多个http链接,将请求分散在多个http链接上,可以缓解此问题,但是建立多个http链接,成本巨大。
http1.1无法多路复用: 多路复用归功于,http/2中的帧和流。帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流,就是在一个TCP连接中,可以存在多条流,而http1中并没有这个标识,每次请求都会建立一次http连接。
http/2帧:
http/2将请求和响应数据分割为更小的帧,并对它们采用二进制编码,易于解析。
下图为帧的结构:
以下列data帧为例:
前三个字节表示载荷长度,即当前载荷长度为8192;
第四个字节表示类型,这个值是0,表示这是个data类型的帧;
第五个字节表示的是类型对应的标识位,比如最后一位是0,表示当前还未结束;
第六到第九字节:第一位是保留位,第2~32是流ID;
随后的8192 个字节表示载荷。
HTTP 2帧带来的额外好处:
-
调整相应传输的优先级
-
头部压缩
-
Sever Push
在TCP和TLS层面,要启动一个https链接,需要开启3 个RTT,TCP链接和TLS链接分别需要一个和两个RTT,TLS1.2及以下需要两个RTT,因此在真正进行报文交互之前,已经通过三个RTT,显然这个效率很低,这个延迟是TCP和HTTP固有的延迟,为了解决这种问题,HTTP/3引入了一个心得传输层协议——QUIC(QuickTimeUDP Internet Connections),其基于UDP而非TCP。
QUIC将TLP自称为自己的一部分,解决了原先TCP和TLP握手的问题,又吸取了流的概念,解决了互相独立的流,进而解决了http中队头堵塞的问题,HTTP3 不再是基于 TCP 建立的,而是通过 UDP 建立,在用户空间保证传输的可靠性,相比 TCP,UDP 之上的 QUIC 协议提高了连接建立的速度,降低了延迟。
影响浏览器性能——CDN:
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
CDN 用途:
(1)节省骨干网带宽,减少带宽需求量;
(2)提供服务器端加速,解决由于用户访问量大造成的服务器过载问题;
(3)服务商能使用Web Cache技术在本地缓存用户访问过的Web页面和对象,实现相同对象的访问无须占用主干的出口带宽,并提高用户访问因特网页面的相应时间的需求;
(4)能克服网站分布不均的问题,并且能降低网站自身建设和维护成本;
(5)降低“通信风暴”的影响,提高网络访问的稳定性。
注意:选择地理位置最近,不一定最好,每多一个路由器,都需要增加一次转发延迟,路由器接收需要时间,处理分子也需要时间,转化分组需要时间,显然选择距离较近的服务器,并不一定最好。
CDN 有两种基本的缓存策略:拉策略(Pull)和推策略(Push)。
拉策略也叫做就近访问策略,指的是 CDN 节点通过 HTTP 请求直接向源站请求数据,然后缓存到本地节点,当用户请求数据时,就直接从缓存的本地节点中获取数据。这种策略主要用于数据更新较少的情况,适用于流量较小、访问频率低的站点。
推策略也叫做预先访问策略,指的是将源站的数据推送到 CDN 节点,通过 HTTP 请求缓存到 CDN 节点,当用户请求数据时,直接从缓存的本地节点中获取数据。这种策略适用于数据更新频繁的情况(比如视频举例的热门新电影上线的时候,就可以使用推送策略,全国用户可以第一时间 获取新电影),可以有效地缓解源站的访问压力,提高用户访问速度。推送策略需要源站和 CDN 之间建立预先配置好的链接,源站通过这个链接将数据推送到 CDN 节点。
Websocket
WebSocket是一种持久化协议(websocket协议本质上是一个基于tcp的协议),它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的,WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。
-
有状态的持久连接
-
服务端可以主动推送消息
-
用VebSocket发送消息延迟比HTTP低
网络安全
三要素
-
机密性:攻击者无法获知通信内容
-
完整性:攻击者对内容进行篡改时能被发现
-
身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
网络安全:对称加密和非对称加密(区别就是用的一个还是一队)
- 对称加密:加密、解密用同样的密钥
- 非对称加密:加密、解密使用的密钥(公钥和私钥),而且公钥加密智能用私钥解密,私钥加密只能用公钥解密。
网络安全:密码散列函数(哈希函数)
-
输入:任意长度的内容
-
输出:固定长度的哈希值
-
性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
网络安全:机密性
-
加密需要加密算法和密钥等信息(统称为秘密信息)
-
网络是明文的,不安全
网络安全:完整性和身份验证
完整性和身份验证相互关联。
1、蟹老板向银行发起了转账请求
2、银行需要确认
(1)这个请求真的是蟹老板发起的
(2)目标账户和转账金额没有被篡改
如何实现机密性
-
已知网络是明文的
-
如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以
-
所以想要通过明文通信交换秘密信息,通信双方需要先有秘密信息,意思就是我们想要通过明文来交换密钥,就得有不会被攻击者知道的秘密信息
所以想要实现完整性,通信双方需要先有秘密信息
如何实现身份验证:
-
签名:用于鉴别身份和防止伪造
-
非对称加密性质:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
-
蟹老板用自己的私钥对信件进行加密,并发送给海绵宝宝
-
海绵宝宝使用蟹老板的公钥进行解密,获得原文
-
保证了机密性、完整性和身份验证