摘要:前端主要关注于应用层的协议,传输层的协议断舍离一下,就主要总结这两种协议了。是序号,是确认序号。根据服务端发来的返回一个包给服务端。服务端接收后进入状态。并在两端维护了索引表,用于记录出现过的,避免重复传输。
前端主要关注于应用层的 HTTP 协议,传输层的 TCP 协议,断舍离一下,就主要总结这两种协议了。OSI 参考模型 与 TCP/IP 五层模型
我们主要关注于 TCP/IP 五层模型 的 应用层 和 传输层 就足够了。
应用层:
作用:为应用程序提供服务。
常见协议:HTTP、HTTPS、FTP、POP3、SMTP等。
传输层:
作用:实现应用程序之间的数据传输。
协议:UDP、TCP
UDP 与 TCP UDPUDP 是面向无连接的协议,它只会把数据传递给接收端,但不会关注接收端是否已经正确接收了数据,所以有时候 UDP 会被认为是不可靠的数据报协议。但这种特性反而适合多播,实时的视频和音频传输。
优点:
无需建立连接(减少了延迟)
实现简单(效率高)
头部开销小( 8 字节)
没有拥塞控制(更好的控制发送时间和速率)
缺点:
没有建立连接(数据想发就发,不可靠)
没有拥塞控制(网络条件不好时会导致丢包)
TCPTCP 是面向有连接的协议,在使用 TCP 协议 传输数据之前一定需要在发送方和接收方之间建立连接。建立连接三次握手,断开连接四次挥手~TCP 建立连接三次握手
第一次握手:
客户端向服务端发送一个 SYN(Seq=X) 包,客户端进入 SYN-SENT 状态,等待服务端的 ACK(Ack=X+1)回复。
ps: Seq 是序号,Ack 是确认序号。
第二次握手:
服务端根据接收到客户端发来的 SYN(Seq=X) 包后返回一个 ACK(Ack=X+1) 以及 SYN(Seq=Y) 包给客户端,服务端进入 SYN-RECIVED 状态,等待客户端的 ACK(Ack=Y+1) 回复。
第三次握手:
客户端接收到 ACK(X+1) 后,进入 ESTABLISHED 状态。根据服务端发来的 SYN(Y) 返回一个 ACK(Y+1) 包给服务端。
服务端 接收 ACK(Y+1)后进入 ESTABLISHED 状态。此时连接建立成功。
TCP 关闭连接四次挥手这个过程可以用以下三句形象表示:
(客户端):我想建立连接了,服务端你准备好没有呀?
(服务端):我准备好了,你准备好没有?
(客户端):我也准备好了,开始吧~
UDP 与 TCP 的区别这个过程可以用以下四句句形象表示:
(客户端):我想关闭连接了。
(服务端):我知道了。
(服务端):我现在准备关闭连接了,ok 吗?
(客户端):ok,你关闭吧。
UDP 协议是面向无连接的,它不能保证数据有序且不丢失的传到对端,但是 UDP 比 TCP 更高效。
TCP 协议是面向有连接的,建立和断开连接都需要握手,在传输数据的过程中,通过滑动窗口(流量控制)、拥塞处理(慢开始,拥塞避免,快速重传,快速恢复),能够正确处理丢包问题,保证接收方能够收到数据,与此同时还能够有效利用网络带宽。
HTTPHTTP (HyperText Transfer Protocol) 超文本传输协议 是一个基于 TCP (传输层) 的应用层协议,是客户端与服务端之间请求和响应的标准。主要特点
简单快速
客户端向服务器请求服务时,只需请求方法和请求路径。
无状态
客户端再次向服务器请求服务时,服务器并不知道客户端之前是否请求过。
无连接
每次请求都会建立一个 TCP 连接,请求处理完成后连接断开。HTTP 报文
请求行:
GET https://www.baidu.com/ HTTP/1.1 由请求方法、URL、协议版本组成
响应行:
HTTP/1.1 200 OKHTTP 请求方法
协议版本、状态码、状态信息组成
请求方法分为很多种,最常用的也就是 GET 和 POST 了。虽然请求方法很多,但更多的是为了传达语义。更多的方法的语义描述可以阅读 文档 。
GET 和 POST 的区别GET
能缓存、请求长度限制、 有历史记录GET 多用于 无副作用(不修改资源)、幂等(请求次数与资源无关)的场景。
POST
POST 相对 GET 安全一点点,因为 GET 请求发送的数据包含在 URL 里。
两者详细对比:
![GET与POST](https://inknight.cn/pic/note/...
)
状态码表示了响应的状态,可以让我们知道这一次的请求是成功还是失败,如果失败,是什么原因导致的。
2XX 成功
200 OK ,请求成功并返回数据
204 No Content ,成功但无内容
206 Partial Content ,范围请求
3XX 重定向
301 永久重定向,表示资源已被分配了新的 URL
302 临时重定向,资源临时被分配新的 URL
304 资源未修改,可使用缓存
4XX 客户端错误
400 请求语法错误
401 要求身份认证
403 请求被服务器拒绝
404 资源不存在
5XX 服务器错误
500 服务器错误
503 服务器超负载或停机维护
HTTPS更安全的网络传输协议
需要安装证书(公钥)
经过 SSL/TLS 协议 加密,传输的内容是经过加密的
使用 443 端口
HTTP/2多路复用
在同一个 TCP 连接上传输所有的请求数据,避免 队头阻塞(浏览器限制同一个域名下的连接数)问题
Header 压缩
使用了 HPACK 压缩格式对传输的 header 进行编码,减少了 header 的大小。并在两端维护了索引表,用于记录出现过的 header ,避免 header 重复传输。
二进制传输
在之前的 HTTP 版本中,我们是通过文本的方式传输数据。在 HTTP/2 中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。
服务端推送
服务端可以在客户端的某个请求后,主动推送其他客户端在之后会用到的资源。省去了客户端重复请求的步骤,降低了延迟。
参考资料:
https://juejin.im/post/5c64d15d6fb9a049d37f9c20#heading-49
https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A?
http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-reading-this-is-enough/
https://juejin.im/book/5bdc715fe51d454e755f75ef/section/5bdc72b151882516f039fce3
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/109096.html
摘要:需要说明是的,这里说的专家不再关心细节,不代表成为专家后学不会细节,也不代表专家不了解细节。本文将从三个点去解释,为什么专家看上去越来越原理技术细节。试想一个不能理解业务要做什么的人,即便懂得再多技术细节,对业务也是没有价值的。1. 引言 本周的精读是有感而发。 笔者接触前端已有八年,观察了不少前端大牛的发展路径,发现成功的人都具有相似的经历: 初期技术热情极大 -> 大量标志性技术项目 -...
摘要:不过幸运的是所有面试的公司都给了,在这里总结下经验吧。这里推荐下我当时看的一篇的面经,木易杨老师写的大厂高级前端面试题汇总。 前言 本人毕业一年,最近陆续面试了头条、瓜子、360、猿辅导、中信银行、老虎等公司,由于最近比较寒冬而且招1-3年的并不多,再加上自己对公司规模和位置有一定要求,所以最后合适的也就这几家了。不过幸运的是所有面试的公司都给了offer,在这里总结下经验吧。掘金:h...
摘要:互联网的产品人员,可能整个职业生涯都要与技术人员打交道。还有开房信息泄露那次,是由于被黑客攻击。关于黑客攻击的问题,作为产品人员甚至普通的开发人员,都是没有办法的事情,要有极其专业的安全团队才可能应付。 我们常说,作为技术人员要有产品思维,从产品和运营的角度去思考技术方案。是的,我们也这样做了。然而,从我多年的需求沟通及项目协调的经验来看,产品人员其实也可以有一点技术思维。 所谓技术思...
摘要:第二十二期掘金团队请来了进阶解密作者刘望舒做了为期三天的活动活动已结束。我们在此精选了一些来自用户的提问及刘望舒的回答。提醒本期分布式微服务主题的正在进行,欢迎前去提问,传送门关于刘望舒进阶之光进阶解密的作者,安卓巴士等技术大会特邀讲师。第二十二期 AMA 掘金团队请来了《Android进阶解密》作者-- 刘望舒做了为期三天的 Ask Me Anything (AMA) 活动(活动已结束)。...
摘要:也就正式开始了我的前端之路。在这期间,我还购买并配置了自己的云服务器,自己的博客系统,自己的还学会了的基本操作。不必说的是高级程序设计豆瓣链接这本书,也就是大家常说的高程,基本上每个合格的前端程序员都要熟读很多很多次,每次读都会有新发现。 原创 西安前端交流会: 卡农 ovenzeze@qq.com 本文章同步发表在wdShare西安前端交流会网站、我的个人博客以及segmentF...
阅读 1177·2021-11-15 18:00
阅读 1753·2021-10-08 10:15
阅读 729·2021-09-04 16:48
阅读 2351·2021-09-04 16:48
阅读 1301·2019-08-29 18:40
阅读 840·2019-08-29 13:08
阅读 2975·2019-08-26 14:06
阅读 1095·2019-08-26 13:35