| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 前端计网知识嗷 -> 正文阅读 |
|
[网络协议]前端计网知识嗷 |
--- title:?计算机网络 date:?2021-07-31?18:40:02 categories: -?[计算机基础] tags:?前端?计网 ---
####?1.?计算机网络模型 -?实体:第n层中的活动元素称为n层实体,同一层的叫做对等实体 -?协议:为进行网络中的对等实体数据交换而建立的规则,标准或约定称为网络协议 -?接口:上层使用下层服务的入口 -?服务:下层为响铃上层提供的功能的调用 分层结构分为OSI参考模型和TCP/IP参考模型 ####?1.1?OSI参考模型 -?目的:为了支持异构网络系统的互联互通,分为7层结构 -?分层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 物理层,数据链路层,网络层负责数据通信,称为通信子网,会话层,表示层,应用层负责数据处理,称为资源子网 各层含义: -?应用层:提供给用户的与系统网络的界面(接口),功能:文件传输,访问和管理,电子邮件等服务,协议:FTP,SMTP,POP3,HTTP(s) -?表示层:在两个数据表示结构不同的通信系统间,处理系统的表示方法,功能:数据格式转换,数据加密和解密,压缩和解压 -?会话层:实现不同主机间的会话(包括面向用户连接的建立,维护和释放,管理和控制,保证可靠传输) -?传输层:负责主机中两个进程的通信,功能:为端到端提供可靠传输服务,流量控制,差错控制,服务质量管理,协议:TCP,UDP -?网络层:将传输层报文段封装成分组(数据报),选择路由,将分组交付目的主机,功能:为传输层提供服务,组包拆包,路由选择,协议:ICMP,ARP,RARP,IP,IGMP -?数据链路层:将网络层传下来的数据报封装成桢,功能:链路连接的建立,拆除和分离,桢定界和帧同步 -?物理层:透明地传输比特流,功能:为数据端设备提供传送数据的通路 通信过程: 发送数据(服务数据单元SDU),在应用层,加上协议控制信息(协议控制信息PCI)封装成一个包(协议控制单元PDU),然后把这个包发下去,下面每一层都要在上一层的基础上加上自己的协议控制信息(PCI)来进行打包,数据链路层还要在后面加上一个CRC(类似一个校验码,确保你的信息是没有问题的),然后以比特流的形式在物理层上进行传输,传到一些中间的一些设备(只要不是最终接收的端),他就不会把所有的包都拆出来,只会拆到网络层,就可以往下一个设备进行转发,直到到达接收的端的物理层,然后接收端就向上一层一层的拆包,最终拆成一开始的STU给用户呈现
######?1.2?TCP/IP四层协议 7层协议的物理层和数据链路层合并成了网络接口层,网络层更名为网际层,应用层和表示层和会话层合并成为应用层,TCP/IP的传输层可以传输报文段和数据报,OSI的传输层只能传输报文段,所以OSI是面向连接的
######?1.3?五层协议 我们现在使用的就是在TCP/IP和OSI的基础之上,设计出来的五层协议,只不过是把网络接口成又拆分成了物理层和数据链路层 我们现在广泛使用的还是TCP/IP协议,是现在的标准,而现在又设计出了五层协议,还没有被广泛使用,所以可能是未来的标准,而OSI已经是以前的标准了,不会他的设计还是值得我们学习 -?TCP/IP与OSI的对比 ??-?相同:都采取了分层结构,都基于独立的协议栈的概念,都可以解决异构网络的互联 ??-?不同:OSI精确定义了服务协议接口,通用性良好,设计经验不足,TCP/IP设计之初就支持异构互联,OSI传输层只有面向连接的通信
####?2.?TCP,UDP 都是网络模型中传输层的协议 ######?2.1TCP -?面向连接,客户端与服务器建立连接时要经历三次握手 -?提供可靠交付 -?全双工通信 -?面向字节流,流是指向流入或者流出进程的字节序列,虽然程序和TCP的交互式一次传一个数据块,但TCP把应用程序的数据看成是一串无结构的字节流,不保证数据块的大小对应,但能保证接收的和发送的字节流完全一样 ######?2.2?UDP -?面向无连接(不用创建连接) -?尽可能去交付,有可能会产生数据的丢包,不保证可靠交付 -?采用字节进行传输,每个数据报的大小限制在64k以内 -?没有拥塞控制 -?首部开销小,只有8个字节,tcp有20个 ######?2.3?可靠交付原理: 1.?停止等待 ???每次发送一个分组就会停下来等对方确认了在发下一个,流水线传输以提高传输效率 2.?超时重传 ???重传时机:-?数据包中途丢失?-?数据包顺利到达,但对方发送的ACK报文中途丢失-?数据包顺利到达,但对方异常未响应ACK或被对方丢弃 ???TCP每发送一个报文段,就对这个报文段设置一次定时器,只要计时器设置的重传时间到了,但还没收到确认,就重传这一报文端,这个就叫做[超时重传] 3.?连续ARQ协议 ???滑动窗口,位于发送窗口内的分组都可以连续发送出去,不需要等待对方确认,每收到一个确认,就把窗口往后滑动一个分组的位置,对按序到达的最后一个分组发送确认,到这个分组位置的所有分组都已经确认收到了 ######?2.4?三次握手和四次挥手 TCP建立连接的三次握手 -?第一次握手:客服端主动发起一次请求,发一个报文SYN为1,表示进行一个连接请求,一个序号seq?=?x,x是随机的 -?第二次握手:发出请求后,服务器给客户端一个响应,表示收到了,发一个报文SYN为1,ACK的值为1(确认有效),ack?=?x+1,和一个随机生成的seq?=?y回去 -?第三次握手:客户端收到了之后也要给客户端一个响应,发一个报文ACK为1,ack?=?y+1和一个seq?=?x+1回去 经过这三次握手,才说明连接建好了,才可以进行数据交互 TCP断开连接的四次挥手 -?第一次挥手:客户端主动发起一个关闭连接请求,发一个报文FIN?=?1,表示他要断开连接并且客户端会停止向服务器发数据,seq?=?u,u是随机生成的 -?第二次挥手:发出请求后,服务器给客服端发一个响应报文,表示收到了,ACK?=?1,ack?=?u+1,seq?=?v(由服务器生成的),这个时候处于半关闭状态,这个时候客服端不能向服务器发数据了,但是服务器还能给客户端发数据 -?第三次挥手:服务器再向客户端发送数据关闭连接,FIN?=?1,ACK?=?1?,ack?=?u+1,seq?=?w -?第四次挥手:客户端收到了给服务器发一个响应确认,ACK?=?1,ack?=?w+1,seq?=?u+1 等待一段时间,就已经关闭了
####?3.http协议 超文本传输协议,一种无状态的,基于TCP/IP的,以请求/响应方式运行的协议,它使用可扩展的语义和自描述消息格式,以基于网络的超文本信息系统灵活的互动 http是明文传输的,不安全,端口一般为80 ######?3.1?http1.1 -?长连接 ??http1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个http请求和响应,减少了建立和关闭连接的消耗和延迟,在http1.1中默认开启了Connection:keep-alive,一定程度上弥补了http1.0每次请求都要创建连接的缺点 -?host域 ??在http1.0中,认为每一台主机对应着一个ip地址,所以请求消息中的url没有传主机名,http1.1的请求消息和响应消息都应支持host头域,且请求消息中没有host头域就会报400 -?更多的错误处理:新增了24中状态码...(大多用不上) ######?3.2?http2.0 -?新的二进制格式 ??http1.x的解析式基于文本,文本格式解析存在天然的缺陷,而且文本的表现形式多种多样,考虑的场景就很多了,二进制就不同,只认0和1,所以http2.0的协议解析采用二进制格式,实现方便而且健壮 -?多路复用 ??同一个连接并发处理多个请求,http1.1的流水线处理时单线程处理,后面的要等前面的请求返回了,才能执行 -?头部数据压缩 ??http1.1中的header头部带着大量的信息,消息主体一般都会经过gzip压缩,但是头部是直接文本传输的,http2.0中使用HPACK算法对头部的数据进行压缩,通讯双方各自cache一份header?fields表,可以避免重复header的传输,又减小了需要传输的大小 -?服务端推送 ??服务端推送是一种客户端请求之前发送数据的机制,网页使用了许多资源,在http1.1中这些资源必须明明确确的请求,就会很慢,为了改善这种情况,http2.0引入了服务端推送,它允许服务端推送资源给浏览器,这样客户端就可以直接在本地加载这些资源,就不用去给服务器发请求 -?流控制 ??允许接收者主动减少发送数据量,比如通讯的时候,或者看视频的时候 ######?3.3?https https是以安全为目的的http通道,他是通过http加入ssl层,对数据进行加密处理来达到安全的目的 -?与http区别:ca证书是收费的,而且功能越强的证书越贵,SSL会延长页面的加载时间,据说会延长50%,https缓存方面不如http,且会占用更多的连接资源 加密方式:https是非对称加密?+?对称加密的结合,简单来说,就是加密传输数据的加密方式是对称加密的,传输这个对称加密密钥的加密方式是非对称加密的 加密过程:客户端请求服务器,服务器首先非对称加密,产生一个一把服务器公钥和私钥,然后把公钥传给用户(通常在ca证书里一起给客户)客户随机生成一个会话密钥,并用服务器的公钥加密后传输给服务器,服务器收到这个会话密钥后,用自己的私钥解密会话密钥,这样双方都拥有这个会话密钥了,通过这个会话密钥加密传输的数据 实际上,https也不是绝对安全的
####?4.?http状态码 -?100???继续,客户端应继续其请求 -?200???成功,一般是GET或者POST请求 -?204???无内容,服务器成功处理,但是没返回内容 -?301???永久重定向,请求的资源已经永久移动到新的位置 -?302???临时重定向,资源临时移动到别的位置 -?304???未修改,设计浏览器协商缓存 -?307???临时重定向,遵照浏览器标准不会把post请求改成get -?400???客户端请求语法错误,服务器无法理解 -?401???需要权限认证 -?403???禁止访问,服务器理解了客户端的请求,但是拒绝执行 -?404???找不到资源 -?500???服务器错误 -?502???作为网关或代理服务器代理请求时,从远程服务器接收到一个无效请求 -?503???服务器重载或服务器在维护
####?5.?http常用方法 -?GET???从服务器中检索信息,获取数据不对数据产生影响,GET方法是可以缓存的,可以从浏览器的历史记录中查到get请求,而且长度有限 -?POST????用于将数据发送到服务器以创建或更新资源,POST方法永远不会被缓存,对数据长度没有限制 -?HEAD???和GET方法相同,但没有响应体,仅传输状态行和标题部分,这对于回复响应头部编写的元数据非常有用,而无需传输整个内容 -?PUT????用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前资源 -?DELETE???用来删除指定的资源,他会删除URI给出的目标资源的所有当前内容 延申问题:GET方法,POST方法的区别 -?get参数通过url传输,post放在请求的body中 -?url长度一般都有限制,间接限制了get参数长度,而post的参数不在url上面,所以没有限制 -?get请求浏览器会主动缓存,请求参数会被完整的保留在浏览器历史记录上 -?get产生一个tcp数据包,post产生两个tcp数据包,因为一般来说POST会先发送头部,然后等待服务器响应返回100后,在发送数据(firefox只发一次) get,post本质上都是tcp连接下的,没有差别,只是http规定和浏览器的限制让他们有了区别
####?6.CDN原理 服务器都是有一个物理位置的,离你位置越远的地方访问你网站的速度就会越慢 CDN时Content?Delivery?Network,即内容分发网络,让每一个网站都能实现服务器自由,当我们想要打开某一个网站的时候,浏览器都会先发送网址到相应的DNS服务器进行解析,解析出对应的IP地址返回给浏览器,让他去IP地址的服务器上获取相应的文件,而CDN就是在这个DNS解析的过程中产生的作用,当你给某一个域名开通了CDN,要先给域名的DNS解析设置的后台,添加一条CDN专用的解析记录,这条解析记录会让域名被解析之后,指向一个CDN网络专用的处理DNS请求专用的服务器,这个专门的CDN网络的DNS服务器会给你的浏览器返回一台专门用来给各个请求设备分配合适的CDN服务器的IP地址,这种服务器叫做负载均衡服务器,然后你的设备或者你的浏览器就会去访问这台服务器,而这台服务器会根据你浏览器的网络地址,在网络中找一台最适合给你的设备发响应的服务器
####?7.?输入一个URL到地址栏,到这个页面展现出来中间发生了什么 -?域名解析,先找到对应服务器的ip地址,在这个过程中,会先找缓存(浏览器缓存?=>?系统缓存?=>?路由器缓存),都没有就查询DNS服务器 -?建立TCP连接,三次握手,保证浏览器和服务器都知道对方是否可以收发数据的能力 -?建立好TCP连接后,发送HTTP请求,服务器接收并响应,返回资源 -?浏览器解析渲染页面,同时设置一些缓存,浏览器首先会从文档中解析出两棵树,DOM树和CSSOM树,然后关联起来成一颗渲染树,在更具渲染树进行重排重绘 -?结束TCP连接,四次挥手,释放两个方向的连接,首先是浏览器发请求释放,服务器回应,释放了浏览器到服务器方向的连接,然后是服务器发请求,浏览器回应,释放服务器到浏览器方向的连接 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 17:27:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |