计算机网络(1)

TCP、IP、HTTP

TCP/IP

资源来自:图解网络介绍 | 小林coding (xiaolincoding.com)
应用:HTTP、FTP、Telnet、DNS、SMTP

传输:TCP TCP 段(流量控制、超时重传、拥塞控制)和 UDP。端口

​ TCP三次握手建立连接的过程中,经通信双方协商确定的。我们都知道链路层使用以太网的话,IP层的MTU是1500 byte,这样去掉IP数据报首部(20 byte),在去掉TCP首部(20 byte)后为1460 byte,此时在默认情况下TCP“选项”字段的MSS值为1460 byte = 1500 - 20 - 20。

网络: IP 协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据「下一个目的地」选择路径。寻址更像在导航,路由更像在操作方向盘

网际接口:在 IP 头部的前面加上 MAC 头部,ARP 协议获取对方的 MAC 地址。

网络.png

数据封装.png

键入网址到网页

DNS解析

协议栈封装

TCP

IP

MAC

网卡:末尾的 FCS(帧校验序列)网卡本身具有 MAC 地址,

交换机FCS 校验,交换机的端口不具有 MAC 地址

路由器路由器是基于 IP 设计的,俗称三层网络设备,路由器的各个端口都具有 MAC 地址和 IP 地址;

服务器和客户机:扒数据包的皮!就好像你收到快递,能不兴奋吗?

网络模型

OSI 网络模型

  • 应用层,负责给应用程序提供统一的接口;
  • 表示层,负责把数据转换成兼容另一个系统能识别的格式;
  • 会话层,负责建立、管理和终止表示层实体之间的通信会话;
  • 传输层,负责端到端的数据传输;
  • 网络层,负责数据的路由、转发、分片;
  • 数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;
  • 物理层,负责在物理网络中传输数据帧;

TCP/IP 网络模型共有 4 层,分别是应用层、传输层、网络层和网络接口层,每一层负责的职能如下:

  • 应用层,负责向用户提供一组应用程序,比如 HTTP、DNS、FTP 等;
  • 传输层,负责端到端的通信,比如 TCP、UDP 等;
  • 网络层,负责网络包的封装、分片、路由、转发,比如 IP、ICMP 等;
  • 网络接口层,负责网络包在物理网络中的传输,比如网络包的封帧、 MAC 寻址、差错检测,以及通过网卡传输网络帧等;

HTTP 是什么?

HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。

HTTP 协议是一个双向协议

GET 和 POST 有什么区别?

GET 的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器会对 URL 的长度有限制(HTTP协议本身对 URL长度并没有做任何规定)。

POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 请求携带数据的位置一般是写在报文 body 中, body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制。

GET 和 POST 方法都是安全和幂等的吗?

一般而言

GET 方法就是安全且幂等的,因为它是「只读」操作,

POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全

  • 可以用 GET 方法实现新增或删除数据的请求,这样实现的 GET 方法自然就不是安全和幂等。
  • 可以用 POST 方法实现查询数据的请求,这样实现的 POST 方法自然就是安全和幂等。

HTTP 缓存技术

强制缓存(from disk cache)

协商缓存协商缓存就是与服务端协商之后,通过协商结果来判断是否使用本地缓存

HTTPS 解决了 HTTP 的哪些问题?

HTTP 由于是明文传输,所以安全上存在以下三个风险:

  • 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
  • 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
  • 冒充风险,比如冒充淘宝网站,用户钱容易没。

    SSL/TLS

  • 信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
  • 校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾广告。
  • 身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。

SSL/TLS 协议建立的详细流程:

首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。

服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello

客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。

服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。

HTTPS 协议本身到目前为止还是没有任何漏洞的,即使你成功进行中间人攻击,本质上是利用了客户端的漏洞(用户点击继续访问或者被恶意导入伪造的根证书),并不是 HTTPS 不够安全

HTTPS 双向认证来避免这种问题。

一般我们的 HTTPS 是单向认证,客户端只会验证了服务端的身份,但是服务端并不会验证客户端的身份。

HTTP/1.1如何优化?

  • 尽量避免发送 HTTP 请求; 缓存技术:强制缓存(from disk cache),协商缓存
  • 在需要发送 HTTP 请求时,考虑如何减少请求次数

    • 减少重定向请求次数
    • 合并请求;减少了重复发送的 HTTP 头部。--将图片的二进制数据用 base64 编码后,以 URL 的形式嵌入到 HTML 文件,跟随 HTML 文件一并发送.
    • 延迟发送请求;按需获取
  • 如何减少 HTTP 响应的数据大小

    • 无损压缩
    • 有损压缩;考虑使用 WebP 格式的图片

TCP 和 UDP 区别:

1. 连接

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP 是不需要连接,即刻传输数据。

2. 服务对象

  • TCP 是一对一的两点服务,即一条连接只有两个端点。
  • UDP 支持一对一、一对多、多对 多的交互通信

3. 可靠性

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。

4. 拥塞控制、流量控制

  • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
  • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

5. 首部开销

  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

6. 传输方式

  • TCP 是流式传输,没有边界,但保证顺序和可靠。
  • UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

7. 分片不同

  • TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
  • UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。
该文章的评论已关闭