图解HTTP 第一章 了解 Web 及网络基础
第一章 了解 Web 及网络基础
1.1 使用HTTP协议访问Web
当我们在网页浏览器中的地址栏中输入URL时,Web页面是如何呈现的?
简单的说就是:
(1)从浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名找到服务器,而是通过IP地址找到对应的服务器,DNS将域名解析为IP地址;
(2)浏览器通过IP地址找到服务器,建立TCP连接,通过三次握手以同步客户端和服务端的序列号和确认号,并交换TCP窗口大小的信息;
(3)TCP三次握手结束后,开始发送HTTP请求;
(4)服务器处理请求,并返回HTTP响应报文;
(5)浏览器拿到响应文本HTML后,解析渲染页面;
(6)当数据传送完毕后,断开TCP连接。
1.2 HTTP的诞生
...
1.3 网络基础 TCP/IP
通常使用的网络(互联网)是在TCP/IP 协议族的基础上运作的。而HTTP属于它内部的一个子集。
1.3.1 TCP/IP 协议族
计算机与网络设备要互相通信,双方就必须基于相同的方法。我们把这种规则称为协议。
1.3.2 TCP/IP 的分层管理
TCP/IP协议族里最重要的一点就是分层。TCP/IP协议族按层次分别分为以下4层,==应用层,传输层,网络层和数据链路层==。
把TCP/IP分层是有好处的,如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需把变动的层替换掉即可。
TCP/IP协议族各层的作用如下:
应用层
应用层决定了用户提供应用服务时通信的活动。
TCP/IP协议族内预存了各类通用的应用服务。比如,FTP(文本传输协议)和DNS(域名系统)。
HTTP协议也处在该层。
传输层
传输层对上层应用层,提供处于网络链接中的两台计算机之间的数据传输。
在传输层有两个性质不同的协议:TCP(传输控制协议)和UDP(用户数据报协议)
网络层
网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。
与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。
链路层
用来处理连接网络的硬件部分。
1.3.3 TCP/IP 通信传输流
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时,就会把对应的首部消去。
这种把数据信息包装起来的做法称为封装。
1.4 与HTTP关系密切的协议:IP,TCP和DNS
1.4.1 负责传输的 IP 协议
按层次分,IP 网际协议位于网络层。可能会有人把“IP”和“IP地址”搞混,“IP” 其实是一种协议的名称。
IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址。
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本不会改变。
使用ARP协议凭借MAC地址进行通信
IP 间的通信依赖MAC地址。在网络上,通信双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时,会采用ARP协议。ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
没有人能够全面掌握互联网中的传输状况
无论哪台计算机,哪台网络设备,它们都无法掌握互联网中的细节。
1.4.2 确保可靠的 TCP 协议
TCP位于传输层,==提供可靠的字节流服务。==
所谓的字节流服务是指,为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传送给对方。
确保数据能到达目标
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手策略。用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标记------ SYN 和 ACK。
发送端首先发送一个带有SYN标记的数据包给对方。接收端收到后,回传一个带有SYN/ACK标记的数据包以示传达确认信息。最后,发送端再回传一个带ACK标记的数据包,代表“握手”结束。
ps:
刚开始客户端处于 closed 的状态,服务端处于 listen 状态。
第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN(c)。此时客户端处于 SYN_Send 状态。
第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。
第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised 状态。
服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方以建立起了链接。
为什么要进行三次握手?
第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
因此,需要三次握手才能确认双方的接收与发送能力是否正常。
1.5 负责域名解析的DNS服务
DNS服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。
用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址访问。因为与IP地址的一组纯数字相比,用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯。
但是要让计算机去理解名称,相对而言就变困难了。
为了解决上述问题,DNS服务应运而生。DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。
1.6 各种协议与HTTP协议的关系
1.7 URI 和 URL
URI(Uniform Resource Identifier) 统一资源标识符
URL(Uniform Resource Locator) 统一资源定位符
URL正是使用Web浏览器等访问Web页面时输入的网页地址。
1.7.1 统一资源标识符:URI
URI 就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。
采用HTTP协议时,协议方案就是http。除此之外,还有ftp,mailto,telnet,file等。
==URI 用字符串标识某一互联网资源,而 URL 表示资源的地址。可见 URL 是URI 的子集。==
URI:
1.7.2 URI 格式
表示指定的URI,要使用涵盖全部必要信息的绝对URI,绝对URL以及相对URL。相对URL,是指从浏览器中基本URI处指定的URL,形如:/image/logo.gif。
绝对URI的格式: