一次完整的HTTP事务是怎样一个过程?

当你在chrome浏览器输入www.baidu.com,回车那一瞬间,会发生什么?

大致发生的过程应该如下:

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

以下具体介绍一下域名解析 和 发起TCP的3次握手

域名解析

chrome先解析www.baidu.com这个域名对应的IP地址,那么如何获得并解析这个IP地址呢?

1、chrome搜索自身的DNS缓存,看其中有没有www.baidu.com对应的条目,如果有且没过期的话就解析至此结束,否则进行第二步。

2、chrome搜索操作系统的DNS缓存,如果找到www.baidu.com对应的条目且没过期的话就解析至此结束,否则进行第三步。

3、读取本地host文件(C:\Windows\System32\drivers\etc\host),如果有且没过期的话就解析至此结束,否则进行第四步。

4、chrome发起一个DNS的系统调用,会向本地配置的首选DNS服务器发起域名解析请求,接下来的事都是运营商来搞定的了,太复杂搞不懂。一般这时候,www.baidu.com对应的IP地址都会找到。

5、获取域名对应的IP地址后(无论哪一步骤获取到的),返回给Windows系统内核,内核又把结果返回给chrome,然后该进行一步的动作了。

发起TCP的3次握手

基础概念:
TCP(Transmission Control Protocol) 传输控制协议。

位码即tcp标志位,有一下几种标识:

  1. SYN(synchronous建立联机) 、
  2. ACK(acknowledgement 确认)、
  3. PSH(push传送) 、
  4. FIN(finish结束) 、
  5. RST(reset重置) 、
  6. URG(urgent紧急)、
  7. Sequence number(顺序号码)、
  8. Acknowledge number(确认号码)

很无奈,就得需要知道这些。

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 

完成三次握手,客户端与服务器开始传送数据.

通俗来讲,一个完整的三次握手也就是 请求-->应答-->再次确认


TCP 为什么需要3次握手?

举个例子:假设一个老外在故宫里面迷路了,看到了小明,于是就有下面的对话:

老外: Excuse me,Can you Speak English?
小明: yes 。
老外: OK,I want ...

在问路之前,老外先问小明是否会说英语,小明回答是的,这时老外才开始问路

两个计算机通信是靠协议(目前流行的TCP/IP协议)来实现,如果两个计算机使用的协议不一样,那是不能进行通信的,所以这个3次握手就相当于试探一下对方是否遵循TCP/IP协议,协商完成后发现大家都是遵纪守法的好公民,那就可以进行通信了,当然这样解读很不严谨,仅供理解。

有太多内容还没能够看懂,原文参考:http://blog.51cto.com/linux5588/1351007

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值