计算机网络-拥塞控制/HTTP/URL

2023-05-16

滑动窗口和流量控制

  TCP利用滑动窗口实现流量控制,流量控制就是为了控制发送方发送速率,保证接收方来得及接收接收方发送的确认报文中的窗口字段可以来控制发送方窗口大小,从而影响发送方的发送速率,将窗口字段设置为0,则发送方不能发送数据。流量控制是端到端的问题。

拥塞控制

  在某段时间内,对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况叫拥塞。拥塞控制就是为了防止过多的数据注入网络,使得网络中的路由器或者链路不致过载。前提是网络能够承受现有的网络负荷。拥塞控制是全局问题,涉及所有的主机所有的路由器以及降低网络传输性能有关的所有因素。

  为了进行拥塞控制,发送方要维持一个拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞程度,且动态变化。发送方的发送窗口取拥塞窗口和接收方的接收窗口中较小的一个。

  • 慢开始:当主机开始发送数据时,如果立即把大量数据注入网络,那么可能引起网络阻塞,因为还不知道网络的负荷情况。应该先探测一下,由小到大增大发送窗口,由小到大的逐渐增大拥塞窗口数值cwnd,初始值为1,每经过传输一轮,拥塞窗口值加倍
  • 拥塞避免:为了防止拥塞窗口值过大,引起网络拥塞,需要设置一个慢开始门限ssthresh,当cwnd达到门限开始使用拥塞避免算法,即没经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,让拥塞窗口缓慢增大。当网络出现超时,调整门限ssthresh = cwnd/2,cwnd=1,重新进入慢开始阶段
  • 快重传、快恢复:快重传算法规定:发送方只要一连收到三个重复确认,就知道接收方没有收到该报文段,应当立即重传,这样就不会出现超时,发送方也不会人为出现了网络拥塞。**发送只要直到只是丢失了个别报文段,就不启动慢开始,执行快恢复,门限值ssthresh = cwnd/2,cwnd=ssthresh ,并开始执行拥塞避免算法。**有了快重传和快恢复,能快速恢复丢失的数据包,如果 接收到了一个不按顺序的数据段,接收方会立即发送一个重复确认,发送方收到三个重复确认,会假定确认件指出的数据丢失了,并立即重传丢失的数据段。当有单独的数据报丢失时,快重传和快恢复才能最有效的工作,当有多个数据信息报某一段很短的时间丢失,则不能有效的工作。如果没有快重传和快恢复,数据包丢失,TCP会使用定时器来要求传输暂停。

在浏览器中输入URL,到显示主页的过程

URL(Uniform Resource Locator)-统一资源定位符,用于定位互联网上的资源

<协议>://<主机>:<端口>/<路径>

  1. DNS通过域名解析IP地址
  2. 浏览器向服务器发送HTTP请求
    • TCP三次握手
    • 发送HTTP请求报文
    • 服务器处理请求并返回HTTP报文
  3. 浏览器解析渲染页面
  4. 四次回收断开TCP连接

状态码

  • 1xx:信息,服务器收到请求,需要请求者继续执行操作
  • 2xx:成功,操作成功并处理
  • 3xx:重定向,需要进一步操作以完成请求
  • 4xx:客户端错误,请求包含语法错误或者无法完成请求
  • 5xx:服务器错误,服务器处理请求的过程发生错误

HTTP的长连接,短连接

  在HTTP/1.0默认使用短连接,客户端和服务器没进行一次HTTP操作,就建立一次连接,任务结束就断开连接。当客户端访问的某个页面中包含其他Web资源,如图片、js文件等,每遇到一个这样的资源,就得重新建立一个HTTP会话。而从HTTP/1.1开始,默认使用长连接,保持连接特性,响应头的一行代码:

Connection:keep-alive

当一个网页打开后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,再次访问,会继续使用这条已经建立的连接。当然保持连接是有一定时限的,可以在不同的服务器软件设定,实现长连接需要客户端和服务器都支持长连接。HTTP协议的长连接和短连接实质上是TCP协议的长连接和短连接,HTTP本身是无连接的。

HTTP是不保存状态的协议

  HTTP是无状态的,同一个客户端第二次访问同一个服务器上的页面时,服务器响应和第一次相同,服务器并不记得这个客户。Session机制的存在就是为了解决这个问题,主要作用就是通过服务端记录用户状态。服务端给特定的用户创建特定的Session就可以标识跟踪该用户,一定时间后该Session销毁。通常采用内存和数据库进行保存Session,通常情况下,为Cookie中附加一个Session ID来跟踪

Cookie被尽用怎么办

  常用的就是利用URL重写把Session ID直接附加在URL路径的后面

Cookie的作用是什么,和Session的区别

  都是用来跟踪浏览器用户身份的会话方式。

  • Cookie:一般用来保存用户信息。比如:保存用户登录信息,下载访问时可以自动填写一些登录信息,在Cookie中存放了一个Token,下次登录根据Token值来查找用户即可。数据保存在客户端。
  • Session:主要作用是通过服务端来记录用户状态。服务端给特定的用户创建特定的Session就可以标识跟踪。数据保存在服务端,安全性更高

HTTP1.0和HTTP1.1的主要区别

  1. 长连接:在HTTP/1.0默认使用短连接,客户端和服务器没进行一次HTTP操作,就建立一次连接,任务结束就断开连接。每一次建立或者断开都要三次握手和四次挥手的开销。而从HTTP/1.1开始,默认使用长连接,保持连接特性。HTTP1.1的持续链接包括非流水线和流水线方式,流水线方式:客户收到HTTP响应报文之前就能发送新的报文请求,非流水线方式:收到前一个响应后才能发送下一个请求。
  2. 错误状态码:HTTP1.1新增24个错误状态响应码
  3. 缓存处理:HTTP1.0主要使用header的if-Modified-Since,Expire来作为缓存判断的标准。HTTP1.1则引入了缓存控制策略:Entity tag , If-Unmodified-Since, If-Match , If-None-Match等缓存头来控制缓存策略
  4. 带宽优化及网络连接的使用:HTTP1.0只需要某个对象的一部分,而却传来了整个对象,带宽浪费,HTTP1.1引入了range头域,只请求资源的某部分,状态码206

URL和URI的区别

  • URI(Uniform Resource Identifier):统一资源标识符,可以唯一标识一个资源
  • URL(Uniform Resource Locator): 统一资源定位符,可以提供该资源路径,它是一种具体URI,可以用来标识一个资源,还指明了如何找到这个资源。URI像是身份证号,URL像是家庭住址,URL不仅唯一标识资源,还提供定位该资源的信息。

HTTP和HTTPS的区别

  1. 端口:HTTP的URL默认端口80,HTTPS的URL默认端口443
  2. 安全性和资源消耗:HTTP运行在TCP之上,传输的都是明文,客户端和服务器无法验证对方身份。HTTPS运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有的传输都是经过加密,采用对称加密,但是对称加密的密钥用服务器的证书进行非对称加密,所有HTTP的安全性不如HTTPS高,但是更耗资源。
    • 对称加密:密钥只有一个,加密解密都是一个密码,加密速度快,如DES、AES等。
    • 非对称加密:密钥成对出现(根据公钥无法推知私钥,相反也不行),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度慢。如RSA、DSA等。

参考:JavaGuide的pdf整理
《计算机网络》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机网络-拥塞控制/HTTP/URL 的相关文章

  • HTTP 重定向图像可以吗?

    返回图片资源时返回301 302 303代码可以吗 我过去曾这样做过 而且似乎有效 这是好的做法吗 它与大多数浏览器兼容吗 是的 您可以重定向图像 浏览器将遵循重定向 但出于性能原因 您通常希望将重定向保持在最低限度 因为每个重定向都需要单
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • 具有 URL 样式格式的 NSTextField

    我一直在尝试让 NSTextField 识别 URL 并且一般来说我的代码可以工作 我按照苹果的说明进行操作这一页 http developer apple com library mac qa qa1487 关于如何使用 hyperlin
  • 在 Ubuntu 12.04 上的 Apache 上配置 SVN 服务器

    我正在尝试通过 HTTP 访问现有的 Subversion 服务器 我的dav svn conf文件看起来像
  • Angular4如何使用flatMap链接forkJoin

    我所处的情况是 我需要进行 5 个可以并行执行的 http 调用 在这五个调用之后需要执行另一个 http 调用 我在前 5 个中使用了 forkJoin 但我不知道如何链接 flatMap 或其他函数 forkJoin firstObse
  • 如何获取 Flask 中当前的基本 URI? [复制]

    这个问题在这里已经有答案了 在下面的代码中 我想将 URL 存储在变量中以检查发生 URL 错误的错误 app route flights methods GET def get flight flight data mongo db fl
  • org.apache.http 软件包在 API 级别 23 中被删除。替代方案是什么?

    在更新到最新的 android API 级别 23 Marshmallow 后 通过 build gradle 添加以下更改后 所有 org apache http 类都不起作用 android compileSdkVersion 23 b
  • HTTP 和 HTTPS iframe

    我正在创建一个小部件 我想允许其他人使用它 这iframe通过 HTTP 加载 但我想允许用户通过 HTTPS 登录 即通过 SSL 发送登录请求 同源策略中允许这样做吗 即 场景是用户可以将我的 JavaScript 集成到他们的网站 小
  • 带有查询参数的渲染 url

    无法找到简单问题的解决方案 答案应该是显而易见的 如何在 hamlet 模板中使用查询参数渲染 url I e ItemsR 将生成http localhost 3000 items我如何生成类似的东西http localhost 3000
  • HTTP部分上传、断点续传的标准方法

    我正在开发 http 客户端 服务器框架 并寻找处理部分上传的正确方法 与使用带有 Range 标头的 GET 方法进行下载相同 但是 HTTP PUT 并不打算恢复 据我所知 PATCH 方法不接受 Range 标头 有没有办法通过 HT
  • 有没有办法使用 ASP.NET 在用户离开页面时始终运行某些服务器端代码?

    我想知道当用户离开 ASP NET 中的页面时是否有任何方法可以始终运行一些服务器端代码 页面卸载事件不好 因为如果有人单击链接 则不会调用该事件 理想情况下 即使用户关闭浏览器 我也希望代码能够运行 我怀疑我所问的问题是不可能的 但问一下
  • 编写每个处理程序中间件

    我希望从处理程序中提取一些重复的逻辑 并将其放入一些每个处理程序的中间件中 特别是 CSRF 检查 检查现有会话值 即身份验证或预览页面 等 我读了关于此的几篇文章 http justinas org writing http middle
  • 浏览器显示 clojure 环中不存在 access-control-allow-origin 标头

    我通过客户端浏览器向服务器发出请求 如下所示https example com bar https example com bar 但出现错误 Access to XMLHttpRequest at https example com ba
  • Java中使用正则表达式确定字符串是否为URL [重复]

    这个问题在这里已经有答案了 可能的重复 检查字符串是否为有效 URL 的最佳正则表达式是什么 https stackoverflow com questions 161738 what is the best regular express
  • 如何在android中创建nanohttpd服务器?

    其实我也查过一些问题 然后去github上找了一下 但我是新来的 我无法理解这个例子 我想在android中创建http服务器 这样我就可以在PC浏览器中访问它 我有一个类扩展 nanohttpd 的实例 但服务器无法工作 不知道为什么 我
  • Django 检索 GET 列表

    我是 Django 新手 我有一个 URL 列表 例如 example com item test item for test url 我知道如何在视图中检索该值 a request GET getlist item 我的问题是 如何在模板
  • GET 和 POST 方法有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 什么时候用POST 什么时候用GET https stackoverflow com questions 46585 when do you use post and when do you use
  • 正确的 HTTP 重定向状态代码是什么?

    我在我的网站上实现了友好的 URL 我可以通过 URL 以两种方式访问 产品和类别 http www example com home electronics tablets http www example com home electr
  • ExoPlayer2 - 如何使 HTTP 301 重定向工作?

    我开始使用 ExoPlayer 来传输一些音频 一切都很顺利 直到我遇到一个带有 301 永久移动 重定向的 URL ExoPlayer2 默认情况下不处理该问题 我已经看过这个线程 https github com google ExoP
  • 动态img(或视频)标签根本不加载资源,HTTP请求处于“待处理”状态

    我尝试使用以下方法在 Web 应用程序上加载资源时遇到一些问题img or videoHTML 标签 我在我的应用程序中使用 Angular 并动态设置src的参数img标签 使用ng src src 指示 没有那么多图像和资源需要加载 在

随机推荐

  • Ubuntu下嵌入式arm板Qt环境搭建

    参考 xff1a https blog csdn net lpp0900320123 article details 24876159 系统环境 xff1a 主机操作系统 xff1a ubuntu14 04 主机编译器 xff1a gcc4
  • FreeRDP在windows上的编译和使用

    FreeRDP 是 Windows下远程桌面协议 xff08 RDP xff09 的一种实现 xff0c 类似于微软自带的mstsc xff0c 可以实现windows上的远程连接 xff0c 特别是对于在ubuntu或者在Mac下 xff
  • Ubuntu-GPU

    查看CUDA的版本 xff1a nvcc V 显示GPU的信息 xff1a nvidia smi 查看GPU的运行 xff1a xff08 每 0 1s 显示一次显存的情况 xff09 watch n 0 1 nvidia smi
  • 面向对象程序设计语言和面向过程程序设计

    面向对象程序设计语言和面向过程程序设计语言的区别由哪些 xff1f 面向对象的特点是 xff1a 封装 xff0c 继承 xff0c 多态 xff0c 其中多态又分为重载和重写 xff0c 面向对象的编程思想更接近现实的事物 面向对象的优点
  • Anaconda安装在D盘后无法在CMD窗口执行python命令

    Anaconda安装在D盘后无法在CMD窗口执行python命令以及库的安装办法 解决办法 xff1a 1 添加环境变量 我的电脑 右键属性 高级系统设置 环境变量 双击变量PATH 将Anaconda和Scripts的路径加入即可 xff
  • Ubuntu18.04配置多用户远程桌面控制display 0问题解决

    Ubuntu18 04配置xrdp多用户远程桌面控制 display 0问题解决 找了网上的所有方法都没有解决 xff0c 重新安装xrdp好了一会儿还会出现display 0情况 xff0c 偶然一次配置了ssh xff0c 然后就好了
  • Windows后台运行并启动Frpc客户端界面

    Windows后台运行并启动Frpc客户端界面 frp搭建内网穿透可以看我另外一篇 1 frps服务端配置 common bind port 61 3000 vhost http port 61 4000 vhost https port
  • 树莓派4安装Debian10

    原因 虽然树莓派自家的Raspberry Pi OS也是Debian10 xff0c 但是作为有些强迫症的程序员 xff0c 我还是选择安装官方发布的Debian10 其实安装很简单 xff0c 直接写入内存卡就行了 xff0c 但是不能s
  • Framework中的连接管理机制--4G和wifi之间的切换流程(转)

    https blog csdn net u010961631 article details 48629601 上一节 Wifi服务框架介绍 介绍了WIFI的大致框架 xff0c 本文主要介绍连接管理中的几个重要角色 xff0c 包括 xf
  • pandas学习笔记:pandas.Dataframe.rename()函数用法

    pandas学习笔记 xff1a pandas Dataframe rename 函数用法 pandas Dataframe rename 函数主要是用来修改Dataframe数据的行名和列名 主要用到的参数有 columns xff1a
  • mac os 查看日历_从命令行查看Mac日历

    mac os 查看日历 As someone that loves using UI tools I do pride myself in learning how to accomplish the same feats from com
  • Sql基础教程

    sql基础教程 第一章 数据库与sql1 1 数据库是什么DBMS的种类 1 2 数据库的结构表的结构 1 3 SQL 概要SQL语句及其种类SQL的基本书写规则 1 4 表的创建数据库的创建表的创建命名规则数据类型约束的设置 1 5 表的
  • Jetson TX2更换软件源(转)

    感谢博客 xff1a 点击打开链接 TX2的软件源为国外服务器 xff0c 网速会很慢 xff0c 需要换国内的ARM源 1 备份 etc lib路径下的source list文件 xff0c 然后在终端 xff08 按ctrl 43 al
  • c语言中求数组长度(*的作用,定义指针变量与取值)

    最近在学习c语言 xff0c 在c语言中少了很多库函数 xff0c 就比如我在求数组长度的时候 xff0c len 不能用了 xff0c 这在python中是自带的函数 即使在c 43 43 中 xff0c 求字符串长度时也能用str le
  • 个人使用ubuntu18相关配置

    root登陆 1 首先获得临时的root权限 xff0c 因为后面的一些操作需要root权限才可以 xff0c 打开终端输入以下命令 sudo s 之后直接输入当前账户的密码 xff0c 就可以获得临时的root权限 2 先创建root账户
  • Manjaro内存不足解决记录

    1 Linux虚拟机 最近在家闲得没事做 xff0c 就使用VMware装了一个linux虚拟机 xff0c 虽然之前装过许多linux发行版的虚拟机 xff0c 也装过win10 43 Deepin双系统 xff0c 但是从来没具体了解过
  • String/StringBuilder/StringBuffer

    String StringBuilder StringBuffer 1 可变性 String 字符串常量 xff0c 字符串是不可变的 源码中 xff1a span class token keyword private span span
  • 计算机网络-网络结构

    计算机网络 三种网络结构 OSI xff1a 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 TCP IP xff1a 网络接口层 网际层 传输层 应用层 五层 xff1a 物理层 数据链路层 网络层 传输层 应用层 应用层 它
  • 计算机网络-三次握手/四次挥手/可靠传输/ARQ协议

    计算机网络 TCP三次握手 同步SYN 确认ACK 发送端 SYN标志的数据报 seq 61 x gt 接收端 xff08 SYN 61 1 xff09 发送端 lt SYN ACK标志的数据报 seq 61 y ack 61 x 43 1
  • 计算机网络-拥塞控制/HTTP/URL

    滑动窗口和流量控制 TCP利用滑动窗口实现流量控制 xff0c 流量控制就是为了控制发送方发送速率 xff0c 保证接收方来得及接收 接收方发送的确认报文中的窗口字段可以来控制发送方窗口大小 xff0c 从而影响发送方的发送速率 xff0c