分层与相关协议

osi-model.png

DHCP:动态主机配置协议 Dynamic Host Configuration Protocol

自动获得分配的IP与子网掩码。

DNS:域名系统 Domain Name System

将域名与IP一一映射的数据库。

HTTP:超文本传输协议 Hypertext Transfer Protocol

基于Client/Server模式,面向连接。

TCP:传输控制协议 Transmission Control Protocol

  • 面向连接,可靠通信;
  • 一对一;
  • 头大(20字节);
  • 有流量、拥塞控制;
  • 面向字节流。

    UDP:用户数据报协议 User Datagram Protocol

  • 无连接,快速;

  • 一对一,一对多,多对多;
  • 头小(8字节);
  • 网络拥堵不影响发送速率;
  • 面向报文。

    ICMP:控制报文协议 Internet Control Message Protocol

    主机、路由器之间传递控制消息,由IP提供服务。

    IGMP:组管理协议 Internet Group Management Protocol

    主机、组播路由器之间传递分组消息,由IP提供服务。

    ARP:地址解析协议 Address Resolution Protocol

    根据IP地址获取MAC地址。

    RARP: 反向地址转换协议 Reverse Address Resolution Protocol

    根据MAC地址获取IP地址。

    TCP相关

    TCP连接建立与断开

    连接建立:三次握手

    handshake.png
  1. Client发起建立连接请求[SYN],序列号seq=x,发送完进入**SYN_SEND**状态;
  2. Server收到请求后,发送对应ack=x+1的应答[ACK]seq=y的建立连接请求[SYN],发送完进入SYN_RCVD状态;
  3. Client收到请求后,发送对应ack=y+1的应答[ACK]并进入ESTABLISHED状态;
  4. Server收到请求后,进入ESTABLISHED状态,TCP连接建立完成。

    连接断开:四次挥手

    handwave.png

  5. Client发送断开连接请求[FIN],序列号seq=x,发送完进入FIN_WAIT_1状态;

  6. Server收到请求后,发送对应ack=x+1的应答[ACK],发送完进入CLOSE_WAIT_1状态,等待之前连接中传输中的数据传输完成;
  7. Client收到请求后,进入FIN_WAIT_2状态,等待服务器发送关闭连接的请求;
  8. Server传输完数据打算关闭连接时,发送断开连接请求[FIN],序列号seq=y,发送完进入LAST_ACK状态等待Client的通知;
  9. Client收到请求后,发送对应ack=y+1的应答[ACK],发送完进入TIME_WAIT状态,等待Server可能继续发送的数据;
  10. Server收到请求后,关闭连接并进入CLOSED状态;
  11. Client在等待固定时间后,如果没收到Server的其他数据,说明Server已成功关闭连接,自己也进入CLOSED状态。

    TCP协议为何建立连接

    为了可靠连接,需要维持一个状态,比如同步发送、接收窗口的大小,包的序号等;
    连接的确定需要靠(IP:Port)这样的元组格式。

    TCP的粘包问题

  • 前提:由于TCP存在包的拆分(数据超过最大限制MTU Maximum Transmission Unit后会分为多个传输单元,最大的报文传输大小为MSS Maximum Segment SizeMTU - header大小 = MSS),拆分后的数据发送到buffer中,buffer满了再发送(接收方也有一个buffer);
  • 原因:
    • 写入的数据大于buffer大小,发生拆包;
    • 报文长度 - header大小 > MSS,发生拆包;
    • 写入的数据小于buffer大小,多次数据放到一个buffer等它满了再发送,发生粘包;
    • 接收者未及时读取buffer,发生粘包。

      TCP协议的应用层相关

      ping命令过程

  1. 根据域名在DNS服务器查找IP地址;
  2. 通过Ping程序发送ICMP包;
  3. 同一网段的情况下,调用IP层的ARP协议请求广播(不同网段的情况下,交给路由器处理),查找目标主机的MAC地址;
  4. 目标主机ARP协议收到请求后,将本机MAC地址填充发送ARP应答回到请求发送方;
  5. 请求发送方发送ICMP数据到目标主机;
  6. 目标主机响应ICMP包
  7. 请求主机收到目标主机的ICMP响应包

    UDP相关

    作为一个无连接协议,不建立连接,不保证可靠交付,传输速度受限于数据生成的速度和网络带宽;
    可以同时向多个其他机器发送相同的消息;
    包头很小,不受拥塞控制;
    交付给IP层后,数据不会被拆分或合并。

    HTTP相关

    HTTP请求头

    HTTP与HTTPS

  • HTTPS协议需要申请证书(由数字证书认证机构CA颁发),不能在同一IP地址上绑定多个域名;
  • HTTPS工作流程:
    1. 建立TCP连接;
    2. Client验证Server的数字证书;
    3. 协商加密算法、密钥;
    4. SSL安全加密隧道协商完成;
    5. 网页以加密方式传输,对称加密保证加密,hash算法保证不被篡改数据。 |
      | HTTP | HTTPS | | —- | —- | —- | | 安全性 | 明文传输 | 对称加密+hash | | 速度 | 快,只有TCP建立连接的3个包 | 慢,除了TCP连接包外还有SSL握手的9个包 | | 端口 | 80 | 443 |

反向代理 Reverse Proxy

  • 含义
    反向代理是指使用代理服务器接受请求,并将该请求转发给内部服务器,并将内部服务器的结果返回给发起请求的客户端,代理服务器对外表现为一台服务器。
  • 负载均衡
    将外部请求动态转发给内部服务器达到负载均衡的目的。
  • 缺点
    代理服务器需要建立两个连接(对外客户端和对内服务器),可能会成为瓶颈。

    输入URL到返回网页的过程

  1. DNS域名解析获取IP地址;
  2. Client到Server建立TCP连接;
  3. Client发送HTTP请求;
  4. Server处理请求并返回HTTP报文;
  5. 浏览器解析渲染页面。