每个前端都要了解点网络知识

网络 网络管理
UDP 是面向无连接的协议,它只会把数据传递给接收端,但不会关注接收端是否已经正确接收了数据,所以有时候 UDP 会被认为是不可靠的数据报协议。

一、OSI 参考模型 与 TCP/IP 五层模型

 

每个前端都要了解点网络知识

我们主要关注于 TCP/IP 五层模型的应用层和传输层就足够了。

应用层:

  • 作用:为应用程序提供服务。
  • 常见协议:HTTP、HTTPS、FTP、POP3、SMTP等。

传输层:

  • 作用:实现应用程序之间的数据传输。
  • 协议:UDP、TCP

二、UDP 与 TCP

1. UDP

UDP 是面向无连接的协议,它只会把数据传递给接收端,但不会关注接收端是否已经正确接收了数据,所以有时候 UDP 会被认为是不可靠的数据报协议。但这种特性反而适合多播,实时的视频和音频传输。

优点:

  • 无需建立连接(减少了延迟)
  • 实现简单(效率高)
  • 头部开销小( 8 字节)
  • 没有拥塞控制(更好的控制发送时间和速率)

缺点:

  • 没有建立连接(数据想发就发,不可靠)
  • 没有拥塞控制(网络条件不好时会导致丢包)

2. TCP

TCP 是面向有连接的协议,在使用 TCP 协议 传输数据之前一定需要在发送方和接收方之间建立连接。建立连接三次握手,断开连接四次挥手~

(1) 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 状态。此时连接建立成功。

这个过程可以用以下三句形象表示:

  • (客户端):我想建立连接了,服务端你准备好没有呀?
  • (服务端):我准备好了,你准备好没有?
  • (客户端):我也准备好了,开始吧~

(2) TCP 关闭连接四次挥手

每个前端都要了解点网络知识

这个过程可以用以下四句句形象表示:

  • (客户端):我想关闭连接了。
  • (服务端):我知道了。
  • (服务端):我现在准备关闭连接了,ok 吗?
  • (客户端):ok,你关闭吧。

3. UDP 与 TCP 的区别

  • UDP 协议是面向无连接的,它不能保证数据有序且不丢失的传到对端,但是 UDP 比 TCP 更高效。
  • TCP 协议是面向有连接的,建立和断开连接都需要握手,在传输数据的过程中,通过滑动窗口(流量控制)、拥塞处理(慢开始,拥塞避免,快速重传,快速恢复),能够正确处理丢包问题,保证接收方能够收到数据,与此同时还能够有效利用网络带宽。

三、HTTP

HTTP (HyperText Transfer Protocol) 超文本传输协议 是一个基于 TCP (传输层) 的应用层协议,是客户端与服务端之间请求和响应的标准。

主要特点:

  • 简单快速:客户端向服务器请求服务时,只需请求方法和请求路径。
  • 无状态:客户端再次向服务器请求服务时,服务器并不知道客户端之前是否请求过。
  • 无连接:每次请求都会建立一个 TCP 连接,请求处理完成后连接断开。

HTTP 报文:

每个前端都要了解点网络知识

(1)请求行:GET https://www.baidu.com/ HTTP/1.1 由请求方法、URL、协议版本组成

(2)响应行:

  • HTTP/1.1 200 OK
  • 协议版本、状态码、状态信息组成

HTTP 请求方法:

请求方法分为很多种,最常用的也就是 GET 和 POST 了。虽然请求方法很多,但更多的是为了传达语义。更多的方法的语义描述可以阅读 文档 。

四、GET 和 POST 的区别

GET:

  • 能缓存、请求长度限制、 有历史记录
  • GET 多用于 无副作用(不修改资源)、幂等(请求次数与资源无关)的场景。

POST:

  • POST 相对 GET 安全一点点,因为 GET 请求发送的数据包含在 URL 里。

两者详细对比:

  1. ![GET与POST](https://inknight.cn/pic/note/... 
  2.  

状态码:状态码表示了响应的状态,可以让我们知道这一次的请求是成功还是失败,如果失败,是什么原因导致的。

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
责任编辑:赵宁宁 来源: 今日头条
相关推荐

2022-10-26 07:21:15

网络视频开发

2023-07-11 07:53:51

CSS效果图像

2023-12-15 08:07:37

响应式布局官网

2010-03-18 13:48:14

Linux新手

2021-05-05 11:32:36

MySQL数据库索引

2009-06-24 10:45:42

Linux

2012-04-01 09:10:17

WEB设计师前端

2019-05-21 16:19:46

前端性能优化图片

2023-03-02 11:52:00

自定义自动配置

2021-04-27 22:27:19

手机安卓苹果

2020-04-23 11:03:09

前端语言开发

2017-06-26 15:32:59

前端编译原理语言知识

2022-09-14 10:00:12

前端自动化测试

2014-07-07 09:44:05

前端前端渲染

2016-10-18 14:17:35

数据开发商业智能

2022-08-15 06:53:22

网络攻击网络安全

2022-12-07 10:44:52

2015-08-11 08:41:58

游戏数据游戏开发

2022-03-10 10:39:00

LinuxSedAwk

2019-05-27 23:27:27

点赞
收藏

51CTO技术栈公众号