zoukankan      html  css  js  c++  java
  • 网络七层模型及TCP、UDP,一次HTTP请求都发生了什么

    一、七层网络模型
    • http协议运行在应用层
    二、TCP-UDP
    1. TCP、UDP协议的区别

    2. 一次Http 请求,这个过程都发生了什么

    3. TCP 协议如何保证可靠传输

    4. HTTP和HTTPS的区别

    5. TCP三次握手和四次挥手、

    6. 常见的状态码。

    2.1 TCP-UDP 区别

    • UDP及UDP使用场景
      传送数据之前不需要先建立连接,直接向目标机器发送数据。远地主机在收到 UDP 报文后,不需要给出任何确认。UDP 报文可能丢失,但是在视频流、直播流 等场景下 UDP 工作非常有效率(即时通信,不在乎数据丢失,和安全)如 视频 、直播等

    • TCP 及TCP 使用场景
      面向连接的服务。先连接再传数据,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的运输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。(信息安全比较重要的数据传输)

    2.2 一次Http请求都发生了什么
    1. 用户浏览器输入网址

    2. 浏览器拿到网址去请求IP

    3. 向目标IP 发送TCP连接 3次握手

    4. 服务器解析请求,并返回处理好的 html 页面(字符串)

    5. 浏览器按照规则解析渲染画面

    6. 连接结束

    第一点:无
     
    第二点:浏览器解析用户输入网址的过程顺序为:
    先检查本地是否有对应的IP地址,找到就返回。找不到向上一级DNS服务器请求,直到找到或 根节点。   浏览器缓存--> 系统缓存--> 路由器缓存--> ISP DNS缓存--> 从根域名服务器递归搜索 都没找到就返回错误
    第三点:三次握手
    ![](https://img2018.cnblogs.com/blog/1226829/201809/1226829-20180925161936312-1057726460.png)   第一次握手:发送端先发送一个带SYN (synchronize) 同步标志的数据包给 Server,在一定时间内等待接收回复   第二次握手:服务端接收到SYN数据包后,返回一个带 SYN/ACK (acknowledgement charactor) 确认字符 标志的数据包来表示确认收到消息。   第三次握手:接收方接收到Server的确认消息后,再发送一个带ACK标志的数据包给接收端,表示握手成功   注意:上述过程都有一个等待时间,如果在等待时间内Server、或者Client 没有回复,本次请求视作失败,再次请求。Server没有回复的原因可能是栈满了

    - 建立连接成功后,浏览器向WEB服务器发送一个HTTP请求

    三次握手的作用:

    • 目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
    1. 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常

    2. 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常,对方发送正常

    3. 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送接收正常

    • Server传回发送端所发送的 SYN 是为了告诉发送端,接收到的信息确实就是你发送的信号。

    • 双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到Server的通道没有问题,Server到发送方的通道就通过 ACK 信号来进行验证。

    第四步:ngimx + uwsgi (Django) 为列 (未完成)
    1. Nginx 部分(未完成)

    2. Django部分:
      根据请求的 URL。来到Django 的路由关系映射,
      然后通过一系列 Middleware 中间件(process_request(request,))如CSRF IP黑名单过滤,爬虫过滤等中间件验证
      来到url 对应的 Views 视图函数处理。根据请求内容。去数据库、Templates 拿到数据回来进行渲染,并返回 response 结果
      response 再次通过一系列中间件验证。(process_response(request, response))最后返回给Client

    第五步:浏览器渲染
    浏览器拿到结果按照HTML CSS JS 进行渲染
    第六步:四次挥手,断开连接
    ![](https://img2018.cnblogs.com/blog/1226829/201809/1226829-20180925164721902-246222397.png)
    • 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送

    • 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号

    • 服务器-关闭与客户端的连接,发送一个FIN给客户端

    • 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

  • 相关阅读:
    struts2学习笔记一struts2标签学习
    Struts2常用标签总结
    Strtus2标签<s:url>
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@d3ade7 ,项目启动错误
    【异常处理】com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@390508 --&nb
    MyEclipse怎么导入导出项目
    struts2的s:iterator 标签 详解
    CSS中的Position属性
    用Iterator实现遍历集合
    ArrayList的toArray
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9700383.html
Copyright © 2011-2022 走看看