网络相关知识

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)

TCP3次握手

浏览器拿到域名对应的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状态。

三次握手成功后,开始传输数据。

一个完整的三次握手也就是 请求---应答---再次确认

连接创建成功后,就要开始下一步,传输数据。

 

HTTP请求相应处理

一、创建TCP链接:

接收或拒绝链接请求

发送请求报文:报文由请求头,首部行,实体主体

二、接收请求:

接收客户端发来的请求报文中的信息对某资源的一次请求的过程

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. 客户端进程发出链接释放报文,而且中止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即便不携带数据,也要消耗一个序号。
  2. 服务器收到链接释放报文,发出确认报文,ACK=1,ack=u+1,而且带上本身的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,可是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
  3. 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送链接释放报文(在这以前还须要接受服务器发送的最后的数据)。
  4. 服务器将最后的数据发送完毕后,就向客户端发送链接释放报文,FIN=1,ack=u+1,因为在半关闭状态,服务器极可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  5. 客户端收到服务器的链接释放报文后,必须发出确认,ACK=1,ack=w+1,而本身的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP链接尚未释放,必须通过(最长报文段寿命)的时间后当客户端撤销相应的TCB后,才进入CLOSED状态。
  6. 服务器只要收到了客户端发出的确认,当即进入CLOSED状态。一样,撤销TCB后,就结束了此次的TCP链接。能够看到,服务器结束TCP链接的时间要比客户端早一些。

 

1.为何创建链接协议是三次握手,而关闭链接倒是四次握手呢?

这是由于服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它能够把ACK和SYN(ACK起应答做用,而SYN起同步做用)放在一个报文里来发送。但关闭链接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你全部的数据都所有发送给对方了,因此你能够未必会立刻会关闭SOCKET,也即你可能还须要发送一些数据给对方以后,再发送FIN报文给对方来表示你赞成如今能够关闭链接了,因此它这里的ACK报文和FIN报文多数状况下都是分开发送的.

2.为何须要三次握手?

若是客户端迟迟没有收到服务器返回确认报文,这时会放弃链接,从新启动一条链接请求,但问题是,
服务器不知道客户端没有收到,因此他会收到两个链接,浪费链接开销。若是每次都是这样,就会浪费多个链接开销。

为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误。

相关文章
相关标签/搜索