参考文章


网络协议

1. 七层网络协议

  1. 应用层:DNS、HTTP、HTTPS、DHCP、RTMP、P2P、GTP、RPC 等。
  2. 表示层:
  3. 会话层:
  4. 传输层:UDP、TCP 等。
  5. 网络层:IP、ICMP、OSPF、BGP、IPSec、GRE 等。
  6. 链路层:也叫MAC层,有ARP、VLAN、STP 等协议。
  7. 物理层:网络跳线。

    一般为5层,依次为上面序号的1、4、5、6、7。

2. HTTP和HTTPS

2.1 介绍

HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),是计算机世界里两点之间,传输文字,图片,音频,视频等超文本数据的约定和规范。
HTTPS 全称 Hypertext Transfer Protocol Secure,比HTTP多了一个secure (安全性)的概念,实际上,HTTPS并非新协议,而是 HTTP + TLS/SSL 协议组合而成

2.2 二者的区别

  1. HTTP未经安全加密,传输数据易被监听,窃取和伪造;而HTTPS是安全协议,通过 密钥交换算法 - 签名算法 - 对称加密算法 - 摘要算法 等解决。
  2. HTTP默认端口80;HTTPS默认443。

    2.3 HTTP GET 和 POST 区别

  • GET 用于请求服务器资源;POST 提交信息给服务器,等服务器响应。
  • GET 方法不安全,请求参数URL可见;POST参数在请求体body,用户不可见。
  • GET 请求URL会有长度限制问题,POST没有。
  • GET 请求会被cache,而POST不会(可手动设置)。
  • GET 的前进/回退操作无害,而POST会再次提交表单请求。
  • GET 请求产生一个TCP数据包,POST两个。
  • GET 请求会把header和data一起发出,服务器响应200;而POST是先发header,服务器响应100 continue,再发data,服务器响应200;

    2.4 无状态协议

    浏览器对于事务的处理没有记忆能力。(用户请求网页后关了浏览器再开再访问该网站,服务器不知道客户关了一次)
    HTTP就是一种无状态协议。
    登录一个网站记住密码是Cookie完成的。
    Cookie的生命周期:
  1. 客户端请求
  2. 服务端返回认证信息,开辟Session空间,并生成sessionid,通过响应头 Set-Cookie:JSESSIONID=XXX命令
  3. 客户端收到,在本机设置JSESSIONID=XXX的Cookie信息,Cookie 过期时间为浏览器会话结束。
  4. 客户端请求同一个网站时,请求头都会带上该Cookie信息(包含sessionid),服务器获得Cookie,取得JSESSIONID,得到sessionid。

JWT机制和Cookie的区别

  • JWT 的Cookie存在客户端,本地验证后会生成token在session中发给服务器。
  • JWT 支持跨域认证,Cookie只能在同域名或其二级域名下有效。

    3. TCP和UDP

    3.1 介绍

    TCP 全称 Transmission Control Protocol,传输控制协议。它能帮助你确定计算机连接到Internet以及它们之间的传输,通过三次握手建立TCP连接。
    TCP 主要特点

  • 确保连接的建立和数据包的发送

  • 支持错误重传
  • 支持拥塞控制,网络拥堵下延迟发送
  • 提供错误校验和甄别有害数据包

UDP 全称 User Datagram Protocol,用户数据报协议。不需要握手,通信速度更快。
UDP 主要特点

  • 数据包可以丢失
  • 低延迟
  • 能发送大量数据包
  • 可以DNS查找,DNS是建立在UDP之上的应用层协议

    3.2 二者的区别

  1. TCP 面向连接,UDP 无连接的。
  2. TCP 对系统要求多,UDP 少。
  3. TCP 面向字节流,发送的是一个流;UDP 基于数据报,一个一个发包。
  4. TCP 有状态,网络不好会调整延迟发送;UDP 无状态,不管情况,闷头发送。
  5. UDP 数据结构相对简单。
  6. TCP 头部20字节,UDP 头部8字节。
  7. TCP 会特定顺序重排序数据包,UDP 不会。
  8. TCP 可靠交付,UDP 不能保证数据一定到。

    3.3 应用场景

    TCP
  • 文件传输
  • 接收邮件
  • 远程登录

UDP

  • QQ聊天
  • 直播
  • 网络语音电话
  • 广播通信

    3.4 TCP 三次握手

    | 消息类型 | 描述 | | —- | —- | | SYN | 全称Synchronize Sequence Numbers,同步序列编号,用来初始化和建立连接的消息 | | ACK | Acknowledge character, 确认字符,帮助对方确认收到的SYN消息 | | SYN-ACK | 本地的SYN消息和较早的ACK数据包 | | FIN | 释放发送报文(希望断开连接) |

计算机网络协议 - 图1

  1. 建立连接时,客户端发送syn包(syn=x)到服务器,并进入 SYN_SENT 状态,等待服务器确认
  2. 服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个syn包(syn=y),即SYN+ACK包,此时服务器进入 SYN_RECV 状态
  3. 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发完客户端和服务器进入 ESTABLISHED (TCP连接成功)状态,完成三次握手。

    3.5 TCP 四次挥手

    计算机网络协议 - 图2

    常见面试题

    本章相关常见面试题:

    1. 为什么TCP协议需要三次握手?

    2. 为什么TCP挥手需要四次?