1.当用户输入url后,期间发生的事情?html
1)若是地址是一个IP地址,会直接找该IP对应的网络计算机。若是不是IP地址,则经过DNS(域名系统)将该地址解析成IP地址,再去网络上找对应的计算机。DNS服务器自己也IP,你的网络设置包含DNS服务器的IP。
注:DNS解析完成,查找对应的网络计算机时,可能电脑直接询问的DNS服务器可能没有对应的IP,那当前DNS服务器就会向它的上级服务器询问,上级服务器也可能没有,就依次一层层向上找,最高查找到根节点,找到或者一直找不到为止。
2)若是地址不包含端口号,协议的默认端口号为80。若是指定了端口好,那么使用指定的端口号。
3)IP和端口号都肯定后,发起请求,链接对应的网络计算机和对应的端口。
4)根据http协议要求,须要把大量的请求信息放在请求头上,发送给对应的服务器。包括请求的资源路径、请求者身份等信息。
5)服务器响应请求,将数据返回给浏览器。浏览器接受到html类型的代码,开始渲染页面,放遇到内嵌资源地址时,再次向浏览器发送请求来获取这些资源。(若是资源路径指示的资源不存在,服务器就会返回404错误。)
6)将渲染好的页面显示出来,并开始响应用户的操做。
web
域名解析 --> TCP3次握手 --> 发起http请求 --> 服务器响应http请求并传输数据 –> 浏览器解析并渲染呈现给用户 –> TCP4次挥手浏览器
2.OSI七层模型:缓存
1.物理层 :链接线缆的标准服务器
2.数据链路层 :加mac地址的标记(网卡的物理地址) 802.3,802.2网络
3.网络层:源ip地址,目的ip地址 ip多线程
4.传输层 : 源端口,目的端口 tcop/udp编码
5.会话层 :通讯状态 操做系统url
6.表示层 : 编码方式 ASCII操作系统
7.应用层 : http协议就是应用层的一种协议
3.域名解析:从 www.toutiao.com 到 202.108.250.213 的转换工做称为域名解析,域名解析须要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器
当用户在浏览器输入https://www.cnblogs.com/时,浏览器会对此域名或主机进行解析,获得对应的IP地址,那么它时怎么进行域名解析的呢?
一、首先先去本机hosts文件查找此FQDN没有没定义的指向所在的IP地址条目,若是找到,就结束解析
二、若是没有找到,回去浏览器器自己DNS缓存里去寻找,找打结束解析
三、没有找到,会去本机配置的首选DNS服务器查询,通常这是三大运营商提供的,经过UTP53端口发起请求,这个请求是递归查询,DNS服务器收到请求后,会查询自身缓存,找到条目而且没有过时,就返回给用户,结束解析。若是没有找到,它会去找根服务器,全球13个根服务器(根服务器地址本机DNS服务器内置),询问根服务器(你知不知道一个域名叫“www.cnblogs.com”的IP地址),根回复说,(我不知道此域名的IP地址,但我知道com域的IP地址,你去询问它吧),因而运行商提供的DNS服务器就去询问com这个域,(你知不知道一个叫“www.cnblogs.com”域名IP地址),com域回答你说,(我不知道此域名的IP地址,但我知道“cnblogs.com域的IP地址,你去问他吧“),这是运行商DNS服务器,对cnblogs.com域发起请求询问,(你知不知道一个叫”www.cnblogs.com“域的IP地址,它一查,发现此域,就是它负责的,就会对你说,此域是我负责的,它的IP是X.X.X.X这时运行商DNS服务器拿到地址,就会返回客户主机内核,内核再返回给浏览器,到此解析结束,进行下一步。
域名等级:主机名.次级域名.顶级域名.根域名(www.example.com.root)
浏览器拿到域名对应的IP后,会拿一个随机端口向WEB服务程序80端口发起TCP请求连接
第一次握手:创建链接,客户端将SYN标记为1,seq标记为x,并将SYN包发送到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到SYN,知道客户端要创建连接,同时向客户端也发送一个SYN包(SYN=1)和一个ACK包(ACK=1),随机产生一个数seq=y,ack=x+1(客户端的seq值x加1),来确认客户端的SYN,并进入SYN_RECV;
第三次握手:客户端收到服务器发来的SYN+ACK后,确认ack值,并回复服务器端一个ACK确认,发送完毕后,双方进入ESTABLISHED状态。
三次握手成功后,开始传输数据。
一个完整的三次握手也就是 请求---应答---再次确认
连接创建成功后,就要开始下一步,传输数据。
接收或拒绝链接请求
发送请求报文:报文由请求头,首部行,实体主体
接收客户端发来的请求报文中的信息对某资源的一次请求的过程
Web访问响应模型(Web I/O)
1)单进程I/O模型:
启动一个进程处理用户请求,并且一次只处理一个,多个请求被串行响应
2)多进程I/O模型:
并行启动多个进程,每一个进程响应一个链接请求
3)复用I/O结构:
启动一个进程,同时响应N个链接请求
实现方法: 多线程模型和事件驱动
多线程模型: 一个进程生成N个线程,每线程响应一个链接请求
事件驱动: 一个进程处理N个请求
4)复用的多进程I/O模型:
启动M个进程,每一个进程响应N个链接请求,同时接收M*N个请求。
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理。HTTP经常使用请求方式,Method
GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS。
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
资源放在服务端特定的目录下
备注:经过MAC地址和端口号肯定具体的应用程序
向客户端回复报文
最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务
1.为何创建链接协议是三次握手,而关闭链接倒是四次握手呢?
这是由于服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它能够把ACK和SYN(ACK起应答做用,而SYN起同步做用)放在一个报文里来发送。但关闭链接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你全部的数据都所有发送给对方了,因此你能够未必会立刻会关闭SOCKET,也即你可能还须要发送一些数据给对方以后,再发送FIN报文给对方来表示你赞成如今能够关闭链接了,因此它这里的ACK报文和FIN报文多数状况下都是分开发送的.
2.为何须要三次握手?
若是客户端迟迟没有收到服务器返回确认报文,这时会放弃链接,从新启动一条链接请求,但问题是,
服务器不知道客户端没有收到,因此他会收到两个链接,浪费链接开销。若是每次都是这样,就会浪费多个链接开销。
为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误。