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:服务端错误
  • 相关阅读:
    hdu 5645 DZY Loves Balls
    idea2016的使用心得 --- 太棒了
    20170410 --- Linux备课资料 --- 压缩与解压缩
    20170410 --- Linux备课资料 --- vim的使用
    mysql20170410练习代码+笔记
    你说你有多坑?----超市项目错误总结
    说好的不熬夜呢???!!!! -- 超市项目
    那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
    今天思考一个问题 --- 自己的强项是什么??
    sleep()和wait()的区别 --- 快入睡了,突然想起一个知识点,搞完就睡
  • 原文地址:https://www.cnblogs.com/darknessplus/p/10415422.html
Copyright © 2011-2022 走看看