前端计算机基础——计算机网络知识总结

693 阅读24分钟

本篇基于谢希仁编著的《计算机网络(第7版电子工业出版社)》以及网上前人经验所得,计网知识较多,本篇仅总结了比较常见的知识(根据本人所了解持续更新),望大佬指正。

概述

组成

从工作方式看:边缘部分(所有连接在互联网上的主机组成,用户直接使用)和核心部分(大量网络和链接这些网络的路由器组成,为边缘部分提供服务)

边缘部分

端系统通信方式:客户-服务器方式(c/s)和对等方式(p2p)

核心部分

路由器是实现分组交换的关键构建,任务是转发收到的分组

三种交换

  • 电路交换:整个报文的比特流连续的从源点直达终点,好像在一个管道中传送。
  • 报文交换:整个报文先传输到相邻的结点,全部存储下来后查找转发表,转发到下一个结点。
  • 分组交换:单个分组(报文的一部分)传送到相邻结点,传送到相邻结点,存储下来后查找转发表,转发到下一个结点

类别

作用范围

  • 广域网WAN
  • 城域网MAN
  • 局域网LAN
  • 个人区域网PAN

使用者

  • 公用网
  • 专用网

性能指标

速率

连接在计算机网络上的主机在数字信道上传送数据位数的速率,也称为data rate或bit rate 单位是单位是b/s,kb/s,Mb/s,Gb/s.

带宽

数据通信领域中,数字信道所传送的最高数据率,单位是b/s,kb/s,Mb/s,Gb/s.

吞吐量

即在单位时间内通过某个网络的数据量,单位b/s,Mb/s,等.

时延

  • 发送时延:发送时延=数据块长度(比特)/信道带宽(比特/秒)
  • 传播时延:传播时延=信道长度(米)/信号在信道上的传播速率(米/秒)
  • 处理时延:网络结点存储转发处理时间
  • 排队时延:等待时间

时延带宽积

时延带宽积=传播时延*带宽

往返时间

RTT(Round-Trip Time) 从发送方发送数据开始,到发送方收到接收方确认

利用率

信道利用率:有数据通过时间/(有+无)数据通过时间 网络利用率:信道利用率加权平均值

物理层

作用

物理层的作用是要尽可能的屏蔽掉计算机网络中的硬件设备和传输媒体的差异。物理层的主要任务就是确定与传输媒体的接口有关的特性:

  • (1)机械特性:指明接口所用接线器的形状和尺寸、引脚的数目和排列、固定和锁定装置等。平时常见的各种规格的接插件都有严格的标准化的规定。
  • (2) 电器特性:指明在接口电缆的各条线上出现的电压范围。
  • (3) 功能特性:指明某条线上出现的某一电平的电压表示何种意义。
  • (4) 过程特性:指明对于不同功能的各种可能事件出现的顺序

数据通信系统

源系统(源点和发送器),传输系统和目的系统(接收器和终点)

通信

单向通信,双向交替通信,双向同时通信

信道复用

频分复用,时分复用,统计时分复用,码分复用,波分复用

数据链路层

信道

点对点信道(帧,ppp协议),广播信道

三个基本问题

封装成帧(前后添加首部和尾部,从首部开始发送),透明传输(字节填充或字符填充:使数据中可能出现的控制字符在接收端不被解释为控制字符,插入转义字符)和差错检测(循环冗余检验CRC)

以太网MAC层的硬件地址

MAC地址就是适配器地址或适配标识符

网络层

网际协议IP

配套协议

  • 地址解析协议ARP
  • 网际控制报文协议ICMP
  • 网际组管理协议IGMP

路由选择协议

  • 内部网关协议(IGP):把一个自治系统内部路由交换信息所用的任何信息统称为内部网关协议。目前因特网常用的有RIP(距离向量法)、OSPF(最短路径优先)和IGRP。
  • 外部网关协议(EGP):两个自治系统间传递网络可达性信息所用的协议称为外部网关协议。

运输层

概述

运输层向应用层提供通信服务,运输层为应用进程之间提供端到端的逻辑通信

UDP协议

复用和分用功能以及差错检测功能。无连接,不可靠,面向报文,没有拥塞控制,支持一对一、一对多、多对一、和多对多的交互通信、首部开销小(8字节:源端口,目的端口,长度,检验和。分别两个字节)。

TCP协议

面向链接,一条只能有两个端点——点对点,可靠,全双工通信,面向字节流(TCP数据单元是报文)

TCP首部

  • 源端口,目的端口各自两个字节
  • 序号4字节
  • 确认号4字节
  • 数偏移4位
  • 保留6位
  • 紧急URG(URGent) 当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快发送(相当于高优先级的数据),而不要按原来的排队顺序来传送。例如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现了一些问题,需要取消该程序的运行,因此用户从键盘发出中断命令。如果不使用紧急数据,那么这两个字符将存储在接收TCP的缓存末尾。只有在所有的数据被处理完毕后这两个字符才被交付接收方的应用进程。这样做就浪费了很多时间。
  • 当URG置为1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍然是普通数据。这时要与首部中紧急指针(Urgent Pointer)字段配合使用。
  • 确认ACK(ACKnowledgment) 仅当ACK = 1时确认号字段才有效,当ACK = 0时确认号无效。TCP规定,在连接建立后所有的传送的报文段都必须把ACK置为1。
  • 推送 PSH(PuSH) 当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应。在这种情况下,TCP就可以使用推送(push)操作。这时,发送方TCP把PSH置为1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付接收应用进程。而不用再等到整个缓存都填满了后再向上交付。
  • 复位RST(ReSeT) 当RST=1时,表名TCP连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。RST置为1还用来拒绝一个非法的报文段或拒绝打开一个连接。
  • 同步SYN(SYNchronization) 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1,因此SYN置为1就表示这是一个连接请求或连接接受报文。
  • 终止FIN(FINis,意思是“完”“终”) 用来释放一个连接。当FIN=1时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接。
  • 窗口2字节
  • 检验和2字节
  • 紧急指针2字节
  • 选项长度可变,最长可达4字节。当没有使用“选项”时,TCP的首部长度是20字节。
  • TCP首部

TCP三次握手

  • 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认
  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 TCP协议:三次握手过程详解

TCP四次挥手

  • 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  • 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  • 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手 TCP-三次握手和四次挥手简单理解

TCP的可靠运输

停止等待协议

A发送后必须暂时保留已发送分组的副本,分组和确认分组必须进行编号,超时计时器设置的重传时间必须比数据在分组传输的平均往返时间更长一些。优点:简单。缺点:信道利用率低

以字节为单位的滑动窗口

发送窗口以前的分组是已经发送并确认了的分组,发送窗口中包含了已经发送但未确认的分组和允许发送但还未发送的分组,发送窗口以后的分组是缓存中还不允许发送的分组。

  • A的发送窗口根据B的接收窗口设置,但A的发送窗口并不总是和B的接收窗口一样大。
  • TCP通常对不按序到达的数据是先临时存放在接收窗口,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
  • TCP要求接收方必须有累计确认的呃功能,可以减少传输开销,TCP规定确认推迟的时间不应该超过0.5秒

超时重传时间的选择

Karm提出:在计算加权平均RTTS时,只要报文段重传了, 就不采用其往返时间样本。 修正:报文段没重传一次,就把超时重传时间RTO增大一些

选择确认SACK

SACK文档没有指名发送方应当怎样响应SACK,因此大多数还是重传所有未被确认的数据块。

TCP的流量控制

利用滑动窗口实现流量控制

流量控制就是让发送方速率不要太快,接收方来得及接收

TCP的拥塞控制

拥塞

资源的需求超过了资源所能提供的可用部分

方法

  • 慢开始:由小到大逐渐增大发送窗口
  • 拥塞避免:拥塞窗口cwnd缓慢增大
  • 快重传:要求接收方在收到一个失序的报文段后就立即发出重复确认,不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期
  • 快恢复:慢开始只在TCP连接建立时和网络出现超时时才使用。当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半。但是接下去并不执行慢开始算法。考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。

应用层

概述

应用层是应用进程间的通信和交互规则,应用层交互的数据单元称为报文。

域名系统(DNS)

概述

实现网络设备名字到IP地址映射的网络服务,DNS监听的是TCP和UDP的53端口。【区域传输数据用TCP,查询用UDP】

域名结构

主机名(host).次级域名(SLD).顶级域名(TLD).根域名(root) DNS服务器通过分级查询每个域名的ip地址

分级查询

"根域名服务器"查到"顶级域名服务器"NS记录和A记录(IP地址)从"根域名服务器"查到"顶级域名服务器"的NS记录和A记录(IP地址) "顶级域名服务器"查到"次级域名服务器"NS记录和A记录(IP地址)从"顶级域名服务器"查到"次级域名服务器"的NS记录和A记录(IP地址) "次级域名服务器"查出"主机名"IP地址从"次级域名服务器"查出"主机名"的IP地址 NS记录为该等级域名的域名服务器

DNS的记录类型

  • A:地址记录:返回域名指向的IP地址
  • NS:域名服务器记录:返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。
  • MX:邮件记录:返回接收电子邮件的服务器地址
  • CNAME:规范命名记录:返回另一个域名,即当前查询的域名是另一个域名的跳转
  • PTR:逆向查询记录:只用于从IP地址查询域名,防止垃圾邮件

查询方式

递归和迭代:我们向本地 DNS 服务器发送请求的方式就是递归查询,本地 DNS 服务器向其他域名服务器请求的过程是迭代查询的过程

  • 主机先向本地域名服务器进行递归查询
  • 本地域名服务器采用迭代查询,向一个根域名服务器进行查询
  • 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址
  • 本地域名服务器向顶级域名服务器进行查询
  • 顶级域名服务器告诉本地域名服务器,下一步查询次级服务器的IP地址
  • 本地域名服务器向次级服务器进行查询
  • 次级服务器告诉本地域名服务器所查询的主机的IP地址
  • 本地域名服务器最后把查询结果告诉主机

DNS缓存

DNS缓存指DNS返回了正确的IP之后,系统就会将这个结果临时储存起来。并且它会为缓存设定一个失效时间 (例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑本地的DNS缓存中把结果交还给你,而不必再去询问DNS服务器,变相“加速”了网址的解析。

DNS工具

  • dig
  • host
  • nslookup
  • whois

详情

FTP

主要功能:减少或消除不同操作系统下处理文件的不兼容性。主进程接受新的请求,从属进程处理处理单个请求。FTP 使用 2 个端口:21 (命令端口)和 20 (数据端口)

FTP协议讲解

HTTP

概述

HTTP是一个基于TCP/IP通信协议来传递数据,默认端口号80,使用TCP但是本身是无连接的,并且是无状态的,这个特性简化了服务器的设计

报文

  • 请求报文-客户向服务器发送请求报文。请求报文的第一行叫做请求行,后面的行叫做首部行,首部行后还可以跟一个实体主体。请求行包含三个字段:方法字段、URL 字段和 HTTP 版本字段。
  • 响应报文-从服务器到客户的回答。响应报文的第一行叫做状态行,后面的行是首部行,最后是实体主体。状态行包含三个字段: HTTP 版本字段、状态码、短语。 首部行之后有一个空行,这个空行不能省略,它用来划分首部与实体。

状态码

  • 1xx:指示信息--表示请求已接收,继续处理
  • 2xx:成功--表示请求已被成功接收、理解、接受
  • 3xx:重定向--要完成请求必须进行更进一步的操作
  • 4xx:客户端错误--请求有语法错误或请求无法实现
  • 5xx:服务器端错误--服务器未能实现合法的请求

HTTP请求方法

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

  • GET 请求指定的页面信息,并返回实体主体。
  • HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
  • POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
  • PUT 从客户端向服务器传送的数据取代指定的文档的内容。
  • DELETE 请求服务器删除指定的页面。
  • CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  • OPTIONS 允许客户端查看服务器的性能。
  • TRACE 回显服务器收到的请求,主要用于测试或诊断。 关于HTTP协议,一篇就够了

HTTP工作原理

用户从输入url到显示页面这个过程发生了什么

  • DNS解析改url的域名对应的IP地址
  • TCP连接
  • 发送HTTP请求(三次握手)
  • 服务器处理请求并返回HTTP报文
  • 浏览器解析渲染页面
  • 连接结束

HTTP缓存机制

强缓存:在缓存数据未失效的情况下,可以直接使用缓存数据 协商缓存:浏览器发送请求到服务器,服务器判断是否使用本地缓存

get和post区别

  • GET把参数包含在URL中,POST通过request body传递参数
  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET产生的URL地址可以被Bookmark,而POST不可以。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求在URL中传送的参数是有长度限制的,而POST么有。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息 GET和POST两种基本请求的区别

HTTP1.1

  • HTTP 1.1包含了太多细节和可选的部分,这让它变得过于庞大。
  • 过多的可选项,客户端和服务器的互用性(interoperability)问题就被暴露了出来
  • 未能充分利用TCP
  • 队头阻塞会导致持久连接在达到最大数量时,剩余的资源需要等待其他资源请求完成后才能发起请求。 Spriting,内联(Inlining),拼接(Concatenation),分片(Sharding)都是为了解决这些问题

HTTP2

  • 二进制:http2是一个二进制协议
  • 二进制格式:HPACK,HTTP/2头部压缩,顾名思义它是一个专为http2头部设计的压缩格式
  • 重置 - 后悔药:在http2里面,我们可以通过发送RST_STREAM帧来实现这种需求,从而避免浪费带宽和中断已有的连接。
  • 服务器推送:当一个客户端请求资源X,而服务器知道它很可能也需要资源Z的情况下,服务器可以在客户端发送请求前,主动将资源Z推送给客户端
  • 流量控制:http2上面每个流都拥有自己的公示的流量窗口,它可以限制另一端发送数据
  • 允许多路复用 HTTP2讲解

HTTP3

基于 UDP 协议的 QUIC 协议.

  • HTTPS是类似于TCP握手的工作方式,先工作在HTTP1上,通过HTTP1传递交换得到秘钥,然后切换到HTTPS上工作。
  • HTTP2是基于TLS的,所以HTTP2的工作方式和HTTPS也是同样的过程,需要握手建立TLS连接,只是TLS连接完成后,发送一个HTTP2的连接确认消息,确认后,客户端服务器使用HTTP2进行连接通讯。
  • HTTP3首先要建立好HTTP2连接,然后发送HTTP2扩展帧,这个帧包含IP和端口,浏览器收到扩展帧,使用该IP和端口,使用QUIC建立连接,如果成功,断开HTTP2,升级为HTTP3 HTTP协议-HTTP3

HTTPS

概述

HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SS

与HTTP区别

  • https协议需要到CA申请证书。
  • http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

SSL/TLS

握手过程

  • 客户端向服务器发起请求,请求中包含使用的协议版本号、生成的一个随机数、以及客户端支持的加密方法。
  • 服务器端接收到请求后,确认双方使用的加密方法、并给出服务器的证书、以及一个服务器生成的随机数。
  • 客户端确认服务器证书有效后,生成一个新的随机数,并使用数字证书中的公钥,加密这个随机数,然后发给服 务器。并且还会提供一个前面所有内容的 hash 的值,用来供服务器检验。
  • 服务器使用自己的私钥,来解密客户端发送过来的随机数。并提供前面所有内容的 hash 值来供客户端检验。
  • 客户端和服务器端根据约定的加密方法使用前面的三个随机数,生成对话秘钥,以后的对话过程都使用这个秘钥 来加密信息。

加密

  • 对称加密(也叫私钥加密):指加密和解密使用相同密钥的加密算法
  • 非对称加密算法:需要两个密钥:公开密钥(publickey)和私有密钥(privatekey);并且加密密钥和解密密钥是成对出现的。非对称加密算法在加密和解密过程使用了不同的密钥
  • 摘要算法:数字摘要是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。“数字摘要“是https能确保数据完整性和防篡改的根本原因。
  • 数字签名技术:就是对“非对称密钥加解密”和“数字摘要“两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
  • 数字证书:避免公匙被纂改,避免目标主机就是从事窃取用户信息这种不正当行为 Https协议详解

其他

CDN原理

采用各种缓存服务器,将这些缓存服务器分不到用户访问相对集中的地区或网络,用户访问网站时,利用全局负载技术将访问指向距离最近的正常的缓存服务器上,由缓存服务器直接响应

websocket和ajax

  • Ajax需要客户端发起请求,websocket服务器和客户端可以互相实时推送消息
  • Ajax的特点在于异步交互,动态更新web页面,因此Ajax的适用范围是交互较多,频繁读取数据的web应用:用Ajax进行表单数据验证,按需取数据,自动更新页面
  • websocket的应用场景:社交类应用,股票基金类应用的价格,基于位置的应用,在线教育类应用 关于Ajax和websocket,你应该知道的事儿

OSI七层模型和TCP/IP四层模型

  • 应用层,表示层,会话层,运输层,网络层,数据链路层,物理层
  • 应用层,运输层,网际层,网络接口层

跨域

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

  • jsonp:利用了 script 不受同源策略的限制。缺点:只能 get 方式,易受到 XSS攻击
  • 修改 document.domain 跨子域: document.domain = 'test.com'。缺点:同一一级域名;相同协议;相同端口
  • 代理跨域请求:前端向发送请求,经过代理,请求需要的服务器资源,缺点:需要额外的代理服务器
  • Html5 postMessage 方法:允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本、多窗口、跨域消息传递,缺点:浏览器版本要求,部分浏览器要配置放开跨域限制
  • Html5 websocket 协议:该协议可以做到浏览器与服务器全双工通信,允许跨域请求,缺点:浏览器一定版本要求,服务器需要支持 websocket 协议
  • document.xxx + iframe:通过 iframe 是浏览器非同源标签,加载内容中转,传到当前页面的属性中,缺点:页面的属性值有大小限制
  • CORS(Cross-Origin Resource Sharing):当使用XMLHttpRequest发送请求时,如果浏览器发现违反了同源策略就会自动加上一个请求头 origin;后端在接受到请求后确定响应后会在后端在接受到请求后确定响应后会在 Response Headers 中加入一个属性 Access-Control-Allow-Origin;浏览器判断响应中的 Access-Control-Allow-Origin 值是否和当前的地址相同,匹配成功后才继续响应处理,否则报错缺点:忽略 cookie,浏览器版本有一定要求
  • 什么是跨域?跨域解决方法
  • 什么是跨域?如何实现(详解)

token

  • 客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
  • Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
  • Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
  • Token的使用:用设备号/设备mac地址作为Token,用session值作为Token

什么是token