HTTP与TCP/IP

感兴趣的可以去阅读《图解HTTP》一书,本博文主要参考该书并且加入一些面试的知识点。

1.使用HTTP协议访问web

在这里插入图片描述

WWW(World Wide Web,万维网)是 Web 浏览器当年用来浏览超文本的客户端应用 程序时的名称。现在则用来表示这一系列的集合,也可简称为 Web。3 项 WWW 构建技术,分别是:把 SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记语言的 HTML(HyperText Markup Language,超文本标记语言); 作为文档传递协议的 HTTP ;指定文档所在地址的 URL(Uniform Resource Locator,统一资源定位符)。

Web 页面当然不能凭空显示出来。根据 Web 浏览器地址栏中指定的 URL,Web 浏览器从 Web 服务器端获取文件资源(resource)等信息,从而显示出 Web 页面。Web 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。而协议是指规则的约定。可以说,Web 是建立在 HTTP 协议上通信的。

HTTP 正式作为标准被公布是在 1996 年的 5 月,版本被命名为 HTTP/1.0,1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 协议版本。

2.网络基础TCP/IP

通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作的。而 HTTP 属于它内部的一个子集。TCP/IP 是指 TCP 和 IP 这两种协议。还有一种说法认为,TCP/ IP 是在 IP 协议的通信过程中,使用到的协议族的统称。

2.1 TCP/IP的分层管理

TCP/IP 协议族按层次分别分为以下4层:应用层、传输层、网络层和数据链路层。一说到分层管理,我们会麻绳想到七层,四层和五层,那么OSI的七层协议和TCP/IP的四层协议以及五层协议的关系是什么?(这里我们进行说明)。
在这里插入图片描述

OSI(Open System Interconnection)七层协议是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,是法律上的国际标准,是完整的网络模型,该分层模型的优点是每一层的功能都很详细,具有通用性,适合描述各种网络,同时它的缺点也很明显,就是层次过多导致过于复杂,技术不成熟且实现困难。而TCP/IP主要针对互联网通信问题,它是在先有协议之后才建立的模型,虽然是不太完整的网络模型,但是比较精简有效,因此它占领大多数市场。综合OSI七层模型和TCP/IP四层模型的优点产生了五层协议的体系结构,既简洁又能将概念阐述清楚。

TCP/IP层次化的好处第一点就是分层后遇到变动只需要替换变动层,有效性提升。比如,如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需把变动的层替换掉就可以了。把各层之间的接口部分规划好之后,每个层次内部的设计就能够自由改动了。 第二点就是层次化之后,设计变得相对简单了。比如说处于应用层的应用可以只考虑分派给自己的任务,而不需要弄清对方在地球上哪个地方、对方的传输路线是怎样的、是否能确保传输送达等问题。

这里我们先介绍一下TCP/IP协议族各层的作用,感兴趣的可以了解一下其他模型,基本都是相通的,是上三层和下四层。

(1)应用层

应用层决定了向用户提供应用服务时通信和交互的规则。 TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(File Transfer Protocol,文件传输协议)和 DNS(Domain Name System,域名系统)服务就是其中两类。 HTTP 协议也处于该层。我们把应⽤层交互的数据单元称为报⽂。

(2)传输层

传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。 由于⼀台主机可同时运⾏多个线程,因此传输层有复⽤和分⽤的功能。所谓复⽤就是指多个应⽤层进程可同时使⽤下⾯传输层的服务,分⽤和复⽤相反,是传输层把收到的信息分别交付上⾯应⽤层中的相应进程。在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报协议)。(后面会有关于TCP和UDP的区别)

(3)网络层(又名网络互连层)

网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。 该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择合适的⽹间路由和交换结点,确保数据及时传送。在发送数据时,⽹络层把传输层产⽣的报⽂段或⽤户数据报封装成分组和包进⾏传送。在 TCP/IP 体系结构中,由于⽹络层使⽤ IP 协议,因此分组也叫 IP 数据报 ,简称数据报。由于互联⽹使⽤的⽹络层协议是⽆连接的⽹际协议(Intert Protocol)和许多路由选择协议,因此互联⽹的⽹络层也叫做⽹际层或IP层。

(4)链路层(又名数据链路层,网络接口层)

链路层用来处理连接网络的硬件部分。 包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。

2.2 TCP/IP通信传输流

利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。 我们用 HTTP 举例来说明,首先作为发送端的客户端在应用层 (HTTP协议)发出一个想看某个Web页面的 HTTP 请求。 接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。 在网络层(IP协议),增加作为通信目的地的 MAC 地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP 请求。
在这里插入图片描述发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该 层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层 时会把对应的首部消去。
在这里插入图片描述

3.IP、TCP 和 DNS协议

下面我们分别针对在 TCP/IP 协议族中与 HTTP 密不可分的3个协议 (IP、TCP 和 DNS)进行说明。

3.1 负责传输的 IP 协议

IP(Internet Protocol)网际协议位于网络层。 几乎所有使用网络的系统都会用到IP协议。IP协议的作用:把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)。IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。

IP间的通信:使用 ARP 协议凭借 MAC 地址进行通信。 在网络上,通信的双方在同一局域网 (LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转 才能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,根据通信方 的 IP 地址就可以反查出对应的 MAC 地址。

路由选择机制: 在到达通信目标前的中转过程中,计算机和路由器等网络设备只能获悉很粗略的传输路线。有点像快递公司的送货过程。想要寄快递的人,只要将自己的货物送到集散中心,就可以知道快递公司是否肯收件发货,该快递公司的集散中心检查货物的送达地址,明确下站该送往哪个区域的集散中心。接着,那个区域的集散中心自会判断是否能送到对方的家中。 但是无论哪台计算机、哪台网络设备,都无法全面掌握互联网中的传输细节。
在这里插入图片描述

3.2 确保可靠性的 TCP 协议

TCP(Transmission Control Protocol)位于传输层,提供可靠的字节流服务。 TCP 协议为了更容易传送大数据会将其分割成以报文段(segment)为单位的数据包进行管理,而且 TCP 协议能够确认数据最终是否送达到对方,保证了传输的可靠性。

为了准确无误地将数据送达目标处,TCP 协议采用了三次握手 (three-way handshaking)策略。

3.2.1 TCP三次握手

(1)三次握手的过程?
用 TCP 协议把数据包送出去后,TCP 不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和 ACK(acknowledgement)。发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后, 回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发 送端再回传一个带 ACK 标志的数据包,代表“握手”结束。 若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发 送相同的数据包。

在这里插入图片描述

(2)为什么三次握手?
三次握⼿的⽬的是建⽴可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,⽽三次握
⼿最主要的⽬的就是双⽅确认⾃⼰与对⽅的发送与接收是正常的。
第⼀次握⼿:Client 什么都不能确认;Server 确认了对⽅发送正常,⾃⼰接收正常;
第⼆次握⼿:Client 确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;Server 确认了:对⽅发送正常,⾃⼰接收正常;
第三次握⼿:Client 确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;Server 确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;
所以三次握⼿就能确认双发收发功能都正常,缺⼀不可。

(3)为什么要传回 SYN?
接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号
了。SYN 是 TCP/IP 建⽴连接时使⽤的握⼿信号。在客户机和服务器之间建⽴正常的 TCP ⽹络
连接时,客户机⾸先发出⼀个 SYN 消息,服务器使⽤ SYN-ACK 应答表示接收到了这个消
息,最后客户机再以 ACK消息响应。这样在客户机和服务器之间才能建⽴起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

(4)传了 SYN,为什么还要传 ACK?
双⽅通信⽆误必须是两者互相发送信息都⽆误。传了 SYN,证明发送⽅到接收⽅的通道没有问
题,但是接收⽅到发送⽅的通道还需要 ACK 信号来进⾏验证。

3.2.2 TCP四次挥手

断开⼀个 TCP 连接则需要“四次挥⼿”。

(1)四次挥手的过程?
客户端-发送⼀个 FIN,⽤来关闭客户端到服务器的数据传送;
服务器-收到这个 FIN,它发回⼀ 个 ACK,确认序号为收到的序号加1 。和 SYN ⼀样,⼀个
FIN 将占⽤⼀个序号;
服务器-关闭与客户端的连接,发送⼀个FIN给客户端;
客户端-发回 ACK 报⽂确认,并将确认序号设置为收到序号加1。

(2)为什么要四次挥手?
任何⼀⽅都可以在数据传送结束后发出连接释放的通知,待对⽅确认后进⼊半关闭状态。当另⼀
⽅也没有数据再发送的时候,则发出连接释放通知,对⽅确认后就完全关闭了TCP连接。
比如:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B可能还会有要说的话,A 不能要求 B 跟着⾃⼰的节奏结束通话,于是 B 可能⼜巴拉巴拉说了⼀通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。

(https://blog.csdn.net/qzcsu/article/details/72861891)

3.2.3 TCP和UDP协议的区别

TCP和UDP都作为传输层的协议,但是它们有一定的区别。

  • UDP 在传送数据之前不需要先建⽴连接,远地主机在收到 UDP 报⽂后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是⼀种最有效的⼯作⽅式(⼀般⽤于即时通信),⽐如: QQ 语⾳、 QQ 视频 、直播等等。
  • TCP 提供⾯向连接的服务。在传送数据之前必须先建⽴连接,数据传送结束后要释放连接。TCP 不提供⼴播或多播服务。由于 TCP 要提供可靠的,⾯向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握⼿来建⽴连接,⽽且在数据传递时,有确认、窗⼝、重传、拥塞控制机制,在数据传完后,还会断开连接⽤来节约系统资源),这⼀难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的⾸部增⼤很多,还要占⽤许多处理机资源。TCP ⼀般⽤于⽂件传输、发送和接收邮件、远程登录等场景。

具体的如下表:
在这里插入图片描述

3.2.4 TCP 协议如何保证可靠传输

(1)校验和
(2)序列号
(3)确认应答
(4)超时重传
(5)连接管理
(6)流量控制
(7)拥塞控制

(1) 校验和

校验和是个端到端的检验和,⽬的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报⽂段和不确认收到此报⽂段。

  • 计算方式:在数据传输的过程中,将发送的数据段都当做一个16位的整数。将这些整数加起来。并且前面的进位不能丢弃,补在后面,最后取反,得到校验和。
  • 发送方:在发送数据之前计算检验和,并进行校验和的填充。
  • 接收方:收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方的进行比对。
(2)序列号和确认应答

序列号: TCP传输时将每个字节的数据都进行了编号,就是序列号。序列号的作用不仅仅是应答的作用,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。这也是TCP传输可靠性的保证之一。

确认应答:TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。

(3)超时重传

超时重传 是当 TCP 发出⼀个段后,它启动⼀个定时器,等待⽬的端确认收到这个报⽂段。
如果不能及时收到⼀个确认,将重发这个报⽂段。

(4)连接管理

连接管理 就是三次握手与四次挥手的过程,在前面详细讲过这个过程,这里不再赘述。保证可靠的连接,是保证可靠性的前提。

(5) 流量控制

接收端在接收到数据后,对其进行处理。如果发送端的发送速度太快,导致接收端的缓冲区很快被填满,此时如果发送端仍旧发送数据,那么接下来发送的数据就会丢包,继而导致丢包的一系列连锁反应,超时重传等。而TCP根据接收端对数据的处理能力,控制发送⽅发送速率,保证接收⽅来得及接收,这个机制就是 流量控制

TCP 利⽤滑动窗⼝实现流量控制。 在TCP协议的报头信息当中,有一个16位字段的窗口大小。在介绍这个窗口大小时我们知道,窗口大小的内容实际上是接收端接收数据缓冲区的剩余大小。这个数字越大,证明接收端接收缓冲区的剩余空间越大,网络的吞吐量越大。接收端会在确认应答发送ACK报文时,将自己的即时窗口大小填入,并跟随ACK报文一起发送过去。而发送方根据ACK报文里的窗口大小的值的改变进而改变自己的发送速度。如果接收到窗口大小的值为0,那么发送方将停止发送数据。并定期的向接收端发送窗口探测数据段,让接收端把窗口大小告诉发送端。

(6)拥塞控制

TCP传输的过程中,发送端开始发送数据的时候,如果刚开始就发送大量的数据,那么就可能造成拥塞,拥堵就会导致丢包,丢包就会导致超时重传,影响传输效率。而拥塞控制机制正是为了解决网络拥塞的问题。拥塞控制所要做的都有⼀个前提,就是⽹络能够承受现有的⽹络负荷。拥塞控制是⼀个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低⽹络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

为了进⾏拥塞控制,TCP 发送⽅要维持⼀个 拥塞窗⼝(cwnd) 的状态变量。拥塞控制窗⼝的⼤⼩取决于⽹络的拥塞程度,并且动态变化。发送⽅让⾃⼰的发送窗⼝取为拥塞窗⼝和接收⽅的接受窗⼝中⼩的⼀个。

TCP的拥塞控制采⽤了四种算法,即慢开始、拥塞避免、快重传和快恢复。在⽹络层也可以使路由器采⽤适当的分组丢弃策略(如主动队列管理 AQM),以减少⽹络拥塞的发⽣。

(1)慢开始
慢开始算法的思路是当主机开始发送数据时,如果⽴即把⼤量数据字节注⼊到⽹络,那么可能会引起⽹络阻塞,因为现在还不知道⽹络的符合情况。经验表明,᫾好的⽅法是先探测⼀下,即由⼩到⼤逐渐增⼤发送窗⼝,也就是由⼩到⼤逐渐增⼤拥塞窗⼝数值。cwnd初始值为1,每经过⼀个传播轮次,cwnd加倍。

(2)拥塞避免
拥塞避免算法的思路是让拥塞窗⼝cwnd缓慢增⼤,即每经过⼀个往返时间RTT就把发送放的cwnd加1。

(3)快重传与快恢复
在TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是⼀种拥塞控制算法,它能快速恢复丢失的数据包。没有FRR,如果数据包丢失了,TCP 将会使⽤定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到⼀个不按顺序的数据段,它会⽴即给发送机发送⼀个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并⽴即重传这些丢失的数据段。有了FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地⼯作。当有多个数据信息包在某⼀段很短的时间内丢失时,它则不能很有效地⼯作。

3.3 负责域名解析的 DNS 服务

DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的 协议。它提供域名到 IP 地址之间的解析服务。 计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。用户通常使用主机名或域名来访问对方的计算机,而不是直接通过 IP 地址访问。因为与 IP 地址的一组纯数字相比,用字母配合数字的表 示形式来指定计算机名更符合人类的记忆习惯。但要让计算机去理解名称,相对而言就变得困难了。因为计算机更擅 长处理一长串数字。 为了解决上述的问题,DNS 服务应运而生。DNS 协议提供通过域名 查找 IP 地址,或逆向从 IP 地址反查域名的服务。

在这里插入图片描述

3.4 各种协议与 HTTP 协议的关系

在这里插入图片描述

4.URI 和 URL

URI(Uniform Resource Identifier,统一资源标识符)
URL(Uniform Resource Locator,统一资源定位符)

  • URI 就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。例如:采用 HTTP 协议时,协议方案就是 http。除此之外,还有 ftp、mailto、telnet、file 等。URI 用字符串标识某一互联网资源。
  • URL表示资源的地点即互联网上所处的位置,正是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址。可见 URL是 URI 的子集,URL是⼀种具体的URI,它不仅唯⼀标识资源,⽽且还提供了定位该资源的信息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值