一、URL解析
1、地址解析
浏览器会根据你的输入来判断该输入是一条合法的URL,还是需要被搜索的关键词。并且根据你输入的内容进行自动完成、字符编码等操作。
2、其他操作
目前大部分浏览器都会强制客户端使用HTTPS协议以保证信息传输的安全性。同时还会进行一些额外的操作,比如安全检查、访问限制等。
3、缓存检查
浏览器会先检测是否缓存了目标URL的页面,如果有且缓存未过期,则直接展示缓存页面,无需再向服务器进行请求。
二、DNS解析
DNS解析是寻找所需要的资源的IP地址的过程。因为互联网中每一台连网的机器都有唯一IP作为标识,但是它是一串数字,记忆太过困难。所以就需要将网址和IP地址进行转换,也就是DNS解析。其具体步骤如下。
1、查询缓存
我们的浏览器、操作系统、路由器都会缓存一些URL对应的IP地址,统称为DNS高速缓存。这是为了加快DNS解析速度,使得不必每次都到根域名服务器中去查询。
2、递归解析
输入www.baidu.com网址后,首先在高速缓存中查找,没找到去根域名服务器查找,没有再去com顶级域名服务器查找,依次类推,直到找到IP地址,然后把它记录在本地告诉缓存中,供下次使用。
大致过程就是.-> .com ->baidu.com. -> www.baidu.com.
其中.代表根域名服务器。
3、DNS负载均衡
访问baidu.com的时候,每次响应的可能并非是同一个服务器(IP地址不同),一般大公司都有成百上千台服务器来支撑访问,DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡。
三、建立TCP连接
TCP/IP 分为四层,在发送数据时,每层都要对数据进行封装
TCP提供一种面向连接的,可靠的字节流服务,是一种可靠传输。接下来将会讲解TCP的首部、三次握手与四次挥手。
1、TCP的首部
TCP首部的格式如下
● 源端口:源端口和IP地址的作用是标识报文的发送地址和返回地址
● 目的端口:端口指明接收方计算机上的应用程序接口
○ TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接
● 序号:是TCP可靠传输的关键部分
○ 序号是该报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节都有一个序号
■ 比如一个报文段的序号为300,报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性
● 确认号:ack,用于指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到
○ 确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0
● 首部长度/数据偏移:占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远
● 保留:占6位,保留今后使用,但目前应都位0
● 控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能
○ URG:紧急。当URG=1时,表明紧急指针字段有效。告诉系统此报文段中有紧急数据
○ ACK:确认。当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1
○ PSH:推送。当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这时候就将PSH=1
○ RST:复位。当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接
○ SYN:同步,在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1
○ FIN:终止,用来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放
● 窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bits字段,因而窗口大小最大为65535
● 校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证
● 紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式
● 选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍
● 数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。
2、三次握手
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接