zoukankan      html  css  js  c++  java
  • 计算机网络

    五层协议

    从下往上依次是:

    • 物理层
    • 数据链路层
    • 网络层
      IP、ARP、ICMP等协议
    • 传输层
      TCP、UDP协议
    • 应用层
      HTTP、FTP、SMTP、DNS协议

    网络层

    主要是IP协议

    传输层

    TCP与UDP区别

    TCP:面向连接、可靠传输、面向字节流、流量控制、拥塞控制、一对一
    UDP:无连接、最大努力交付、面向报文、一(多)对一(多)

    TCP报文

    TCP报文的首部包含:

    • 源端口、目的端口
    • 序号seq
    • 确认号ack
    • 确认ACK
    • 同步SYN
    • 终止FIN

    TCP连接建立

    三次握手

    为什么三次?
    双方确认两方都能收发,建立可靠传输通道(本质)
    假设A向B请求建立TCP连接,
    第一次握手的结果:A不能下结论;B确定A发送正常
    第二次握手的结果:A确定自己发送和接收正常,且B的发送、接收都正常;B确定A发送正常,且自己接收正常
    第三次握手的结果:A确定自己发送和接收正常,且B的发送、接收都正常;B确定A的发送、接收正常,且自己的发送和接收都正常

    TCP连接释放

    四次挥手

    为什么四次挥手?
    前两次是客户端告诉服务端自己不会再发送数据,只会接收数据,客户端收到确认后,TCP连接处于半关闭状态。此时接收端仍可以向客户端发送数据。
    后两次是服务端告诉客户端自己不会再发送数据了,服务端收到确认后,服务端正式关闭TCP连接;客户端在发送完最后一个确认报文之后还要等待2MSL时间,称为TIME_WAIT

    为什么TIME_WAIT?

    • 确保最后一个报文被对方收到,如果对方没有收到,对方会超时重传,客户端趁此时间响应
    • 保证此TCP连接内的所有报文在网络里消失,不会影响下一个连接

    TCP可靠传输的实现

    • 字节编号
    • 流量控制
    • 拥塞控制
    • 停止等待协议+超时重传

    流量控制

    TCp报文里有一个字段是窗口值wnd,在确认报文里设置这个窗口值,告诉发送方自己还能接收多少数据,控制发送方发送速率

    拥塞控制

    避免过多的数据注入到网络里
    TCP进行拥塞控制的算法有四种:慢开始、拥塞避免、快重传、快恢复

    慢开始

    cwnd=1,每经过一个传输轮次,将cwnd加倍,因此cwnd会呈指数增长,由于增长速度太快,会设置一个慢开始门限ssthresh,当cwnd==ssthresh时,进入拥塞避免阶段

    拥塞避免

    此阶段cwnd的增长是线性的,每经过一个传输轮次cwnd+1

    在慢开始和拥塞避免阶段都可能会遇到网络拥堵,因此会出现超时现象,此时的处理方法是将慢开始门限ssthresh设置为当前cwnd的一半,并重新回到慢开始阶段。

    快重传

    快重传机制是针对报文丢失的情况,快重传机制要求对接收到的数据立即发出确认,而不是等到自己要发送数据才捎带确认。
    因此有了快重传机制,如果出现了报文丢失的情况,接收方会反复发出对缺失报文的前一个报文的确认,当发送方接收到3个重复确认时,意识到报文丢失了,进入快恢复阶段

    快恢复

    快恢复是针对快重传机制的,是处理报文丢失的情况,而报文丢失并不是网络拥塞引起的,因此快恢复阶段不会像超时那样回到慢开始阶段,而是设置ssthresh=cwnd/2,cwnd=ssthresh,也就是开始了拥塞避免阶段

    应用层

    HTTP协议

    请求、响应报文

    HTTP报文分为三部分:开始行、首部行、实体

    请求报文的开始行包括请求方法、请求url等信息,响应报文的开始行包括状态码等信息

    首部行包括了用户代理、接收的语言/编码方式、缓存、连接保持、cookie等信息

    实体就是HTTP报文数据段

    GET、POST报文

    HTTP1.0/1.1/2.0

    HTTPS

    HTTPS=HTTP+数据加密+证书认证+完整性保护
    HTTPS是披着SSL或者TLS外衣的HTTP协议,由SSL或者TLS提供安全机制,SSL/TLS工作在传输层。
    HTTP协议将数据交友SSL/TLS加密,然后再交给TCP进行传输

    url到显示页面过程

    简短:

    • DNS解析?
    • TCP连接
    • HTTP请求
    • HTTP响应
    • 浏览器解析、渲染页面
    • 连接结束

    常见错误码

    • 2xx:成功
    • 3xx:重定向
    • 4xx:客户端错误
    • 5xx:服务端错误
  • 相关阅读:
    PythonのTkinter基本原理
    使用 Word (VBA) 分割长图到多页
    如何使用 Shebang Line (Python 虚拟环境)
    将常用的 VBScript 脚本放到任务栏 (Pin VBScript to Taskbar)
    关于 VBScript 中的 CreateObject
    Windows Scripting Host (WSH) 是什么?
    Component Object Model (COM) 是什么?
    IOS 打开中文 html 文件,显示乱码的问题
    科技发展时间线(Technology Timeline)
    列置换密码
  • 原文地址:https://www.cnblogs.com/darknessplus/p/10415422.html
Copyright © 2011-2022 走看看