滑动窗口和流量控制
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)-统一资源定位符,用于定位互联网上的资源
<协议>://<主机>:<端口>/<路径>
- DNS通过域名解析IP地址
- 浏览器向服务器发送HTTP请求
- TCP三次握手
- 发送HTTP请求报文
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 四次回收断开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的主要区别
- 长连接:在HTTP/1.0默认使用短连接,客户端和服务器没进行一次HTTP操作,就建立一次连接,任务结束就断开连接。每一次建立或者断开都要三次握手和四次挥手的开销。而从HTTP/1.1开始,默认使用长连接,保持连接特性。HTTP1.1的持续链接包括非流水线和流水线方式,流水线方式:客户收到HTTP响应报文之前就能发送新的报文请求,非流水线方式:收到前一个响应后才能发送下一个请求。
- 错误状态码:HTTP1.1新增24个错误状态响应码
- 缓存处理:HTTP1.0主要使用header的if-Modified-Since,Expire来作为缓存判断的标准。HTTP1.1则引入了缓存控制策略:Entity tag , If-Unmodified-Since, If-Match , If-None-Match等缓存头来控制缓存策略
- 带宽优化及网络连接的使用:HTTP1.0只需要某个对象的一部分,而却传来了整个对象,带宽浪费,HTTP1.1引入了range头域,只请求资源的某部分,状态码206
URL和URI的区别
- URI(Uniform Resource Identifier):统一资源标识符,可以唯一标识一个资源
- URL(Uniform Resource Locator): 统一资源定位符,可以提供该资源路径,它是一种具体URI,可以用来标识一个资源,还指明了如何找到这个资源。URI像是身份证号,URL像是家庭住址,URL不仅唯一标识资源,还提供定位该资源的信息。
HTTP和HTTPS的区别
- 端口:HTTP的URL默认端口80,HTTPS的URL默认端口443
- 安全性和资源消耗:HTTP运行在TCP之上,传输的都是明文,客户端和服务器无法验证对方身份。HTTPS运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有的传输都是经过加密,采用对称加密,但是对称加密的密钥用服务器的证书进行非对称加密,所有HTTP的安全性不如HTTPS高,但是更耗资源。
- 对称加密:密钥只有一个,加密解密都是一个密码,加密速度快,如DES、AES等。
- 非对称加密:密钥成对出现(根据公钥无法推知私钥,相反也不行),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度慢。如RSA、DSA等。
参考:JavaGuide的pdf整理
《计算机网络》
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)