计算机网路之前端相关

计算机网络

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

OSI模型

开放式系统互联通信参考模型,由国际标准化组织提出,OSI将计算机网络体系结构划分为以下七层:

应用层:应用程序和网络之间的接口表示层:处理数据格式、压缩、加密等会话层:控制应用程序之间会话能力,区分不同的进程网络层:负责将数据进行可靠或者不可靠传递,建立端口到端口的通信传输层:定义IP地址,定义路由功能,建立主机到主机的通信数据链路层:数据链路层将比特封装成数据帧并传递物理层:网络连接介质,如网线、光缆,数据在其中以比特为单位传输

TCP/IP模型

OSI是完备的参考标准,在实际中使用的是TCP/IP模型,简化了网络体系结构,提升了效率。

应用层:HTTP、FTP、SMTP、SSH传输层:TCP、UDP网络层:IP网络接入层:对应OSI中的数据链路层与物理层

HTTP

超文本传输协议,属于应用层的协议,通过TCP连接来发送HTTP请求。它是WEB上进行数据交换的基础,是一种client-server协议。不仅被用来传输超文本文档,还用来传输图片、视频或者向服务器发送数据请求等等。

无连接:无连接就是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。无状态:HTTP协议是无状态协议,HTTP服务器不会保存关于客户的任何信息。

发展阶段

0.9:一个仅限于交换文字信息的无序协议1.0:(1982年)对每一次请求/响应建立并拆除一次连接,特点是简单、易于管理1.1:持久连接、新增range头域(支持断点续传)、引入更多缓存控制策略(ETag, If-Match)、新增host字段以支持指定服务器域名、更多的请求方法(PUT、HEAD、OPTIONS)2.0:多路复用、二进制传输格式、Header压缩、服务器推送3.0:基于UDP协议实现了类似于TCP的多路复用数据流、传输可靠性等功能,这套功能被称为QUIC协议。解决了2.0因为底层使用TCP而带来的缺陷。

HTTP/2.0多路复用:

实现原理

引入了一个二进制分帧层,客户端和服务端进行传输时,数据会先经过二进制分帧层处理,转化为一个个带有请求ID的帧,这些帧在传输完成后根据ID组合成对应的数据。

解决的问题TCP慢启动多条TCP连接竞争带宽HTTP/1.1队头阻塞

HTTPS

HTTPS在HTTP的基础上加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。

使用443端口,HTTP使用80需要申请证书经过SSL加密的协议,传输更安全;而HTTP是超文本传输协议,明文传输更耗时,除了TCP握手还有SSL握手

HTTP请求头和响应头

HTTP Request Header 常见的:

Accept:浏览器能够处理的内容类型Accept-Charset:浏览器能够显示的字符集Accept-Encoding:浏览器能够处理的压缩编码Accept-Language:浏览器当前设置的语言Connection:浏览器与服务器之间连接的类型(keep-alive/close)Cookie:当前页面设置的任何CookieHost:发出请求的页面所在的域Referer:发出请求的页面的URLUser-Agent:浏览器的用户代理字符串

HTTP Response Header 常见的:

Date:表示消息发送的时间,时间的描述格式由rfc822定义server:服务器名称Connection:浏览器与服务器之间连接的类型Cache-Control:控制HTTP缓存Content-Type:表示后面的文档属于什么MIME类型:application/x-www-form-urlencoded、multipart/form-data、application/json、text/xml

一个HTTP请求报文由请求行(request line)、请求头(header)、空行和请求数据4个部分组成,响应报文和请求报文结构类似

HTTP常见状态码

200 OK 请求成功3xx 重定向301 Moved Permanently 永久重定向302 Found 临时重定向304 Not Modified 命中缓存,只返回头部信息400 Bad Request 请求语法错误401 Unauthorized 未授权,需要登录403 Forbidden 禁止访问404 Not Found 服务器无法找到请求资源500 Internal Server Error 服务器抱错501 Not Implemented 未实现,无法处理502 Bad Gateway 上游服务器无效响应503 Service Unavailable 当前无法接受请求504 Gateway Timeout 上游服务器响应超时

HTTP请求方法

GET: 向服务器获取数据POST:将实体提交到指定的资源,通常会造成服务器资源的修改PUT:上传文件,更新数据DELETE:删除服务器上的对象HEAD:获取报文首部,与GET相比,不返回报文主体部分OPTIONS:询问支持的请求方法,用来跨域请求CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信TRACE: 回显服务器收到的请求,主要⽤于测试或诊断

GET请求和POST请求的一般区别:

GET请求参数放在URL上,POST请求参数放在请求体里,并支持更多的数据类型GET请求参数长度有限制,POST请求参数长度可以非常大POST请求相较于GET请求安全一点点,因为GET请求的参数在URL上,且有历史记录GET请求能缓存,POST不能

GET和POST的根本区别在于:GET请求是幂等性的,而POST请求不是

幂等性,指的是对某一资源进行一次或多次请求都具有相同的副作用。例如搜索就是一个幂等的操作,而删除、新增则不是一个幂等操作。

访问一个网站的过程

解析URL缓存判断DNS解析获取MAC地址TCP三次握手如果使用HTTPS协议,还有HTTPS握手返回数据页面渲染TCP四次挥手

HTTP1.1规定了默认保持长连接,数据传输完成了保持TCP连接不断开,等待在同域名下继续用这个通道传输数据。如果需要关闭,需要客户端发送Connection:close首部字段。

URL完整组成部分

协议+主机名+端口号+pathname+文件名+search+hash

DNS

域名系统 (Domain Name System),DNS协议是应用层协议,提供的主机名到IP地址的转换服务。

DNS占用53号端口,同时使用TCP和UDP协议:

在区域传输的时候使用TCP协议

在域名解析的时候使用UDP协议

DNS完整的查询过程

首先会在浏览器的缓存中查找对应的IP地址,如果查找到直接返回,若找不到继续下一步将请求发送给本地DNS服务器,在本地域名服务器缓存中查询,如果查找到,就直接将查找结果返回,若找不到继续下一步本地DNS服务器向根域名服务器发送请求,根域名服务器会返回一个所查询域的顶级域名服务器地址本地DNS服务器向顶级域名服务器发送请求,接受请求的服务器查询自己的缓存,如果有记录,就返回查询结果,如果没有就返回相关的下一级的权威域名服务器的地址本地DNS服务器向权威域名服务器发送请求,域名服务器返回对应的结果本地DNS服务器将返回结果保存在缓存中,便于下次使用本地DNS服务器将返回结果返回给浏览器

WebSocket

WebSocket是HTML5提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

WebSocket 的出现就解决了半双工通信的弊端。它最大的特点是:服务器可以向客户端主动推动消息,客户端也可以主动向服务器推送消息。

WebSocket 特点的如下:

支持双向通信,实时性更强可以发送文本,也可以发送二进制数据建立在TCP协议之上,服务端的实现比较容易数据格式比较轻量,性能开销小,通信高效没有同源限制,客户端可以与任意服务器通信协议标识符是ws(如果加密,则为wss),服务器网址就是 URL与HTTP协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用HTTP协议,因此握手时不容易屏蔽,能通过各种HTTP代理服务器。

结语

TCP与UDP属于传输层协议,IP属于网络层协议,我们前端主要关注应用层协议(重点学习HTTP协议)即可,就不详细介绍他们了。