问题汇总

1.在浏览器输入一个网址回车后,发生了什么?

 

这是一道经典的面试题,这道题没有一个标准的答案,它涉及很多的知识点,面试官会通过这道题了解你对哪一方面的知识比较擅长,然后继续追问看看你的掌握程度。当然我写的这些也只是我的一些简单的理解,从前端的角度出发,我觉得首先回答必须包括几个基本的点,然后在根据你的理解深入回答。

 

  1、浏览器的地址栏输入URL并按下回车。

 

  2、浏览器查找当前URL是否存在缓存,并比较缓存是否过期。

 

  3、DNS解析URL对应的IP。

 

  4、根据IP建立TCP连接(三次握手)。

 

  5、HTTP发起请求。

 

  6、服务器处理请求,浏览器接收HTTP响应。

 

  7、渲染页面,构建DOM树。

 

  8、关闭TCP连接(四次挥手)。

 

  说完整个过程的几个关键点后我们再来展开的说一下。

 

  一、URL

 

  我们常见的RUL是这样的:http://www.baidu.com,这个域名由三部分组成:协议名、域名、端口号,这里端口是默认所以隐藏。除此之外URL还会包含一些路径、查询和其他片段,例如:http://www.tuicool.com/search?kw=%E4%。我们最常见的的协议是HTTP协议,除此之外还有加密的HTTPS协议、FTP协议、FILe协议等等。URL的中间部分为域名或者是IP,之后就是端口号了。通常端口号不常见是因为大部分的都是使用默认端口,如HTTP默认端口80,HTTPS默认端口443。说到这里可能有的面试官会问你同源策略,以及更深层次的跨域的问题,我今天就不在这里展开了。

 

  二、缓存

 

  说完URL我们说说浏览器缓存,HTTP缓存有多种规则,根据是否需要重新向服务器发起请求来分类,我将其分为强制缓存,对比缓存。

 

  强制缓存判断HTTP首部字段:cache-control,Expires。

 

  Expires是一个绝对时间,即服务器时间。浏览器检查当前时间,如果还没到失效时间就直接使用缓存文件。但是该方法存在一个问题:服务器时间与客户端时间可能不一致。因此该字段已经很少使用。

 

  cache-control中的max-age保存一个相对时间。例如Cache-Control: max-age = 484200,表示浏览器收到文件后,缓存在484200s内均有效。 如果同时存在cache-control和Expires,浏览器总是优先使用cache-control。

 

  对比缓存通过HTTP的last-modified,Etag字段进行判断。

 

  last-modified是第一次请求资源时,服务器返回的字段,表示最后一次更新的时间。下一次浏览器请求资源时就发送if-modified-since字段。服务器用本地Last-modified时间与if-modified-since时间比较,如果不一致则认为缓存已过期并返回新资源给浏览器;如果时间一致则发送304状态码,让浏览器继续使用缓存。

 

  Etag:资源的实体标识(哈希字符串),当资源内容更新时,Etag会改变。服务器会判断Etag是否发生变化,如果变化则返回新资源,否则返回304。

 

  

 

  三、DNS域名解析

 

  我们知道在地址栏输入的域名并不是最后资源所在的真实位置,域名只是与IP地址的一个映射。网络服务器的IP地址那么多,我们不可能去记一串串的数字,因此域名就产生了,域名解析的过程实际是将域名还原为IP地址的过程。

 

  首先浏览器先检查本地hosts文件是否有这个网址映射关系,如果有就调用这个IP地址映射,完成域名解析。

 

  如果没找到则会查找本地DNS解析器缓存,如果查找到则返回。

 

  如果还是没有找到则会查找本地DNS服务器,如果查找到则返回。

 

  最后迭代查询,按根域服务器 ->顶级域,.cn->第二层域,hb.cn ->子域,www.hb.cn的顺序找到IP地址。

 

  

 

  递归查询,按上一级DNS服务器->上上级->....逐级向上查询找到IP地址。

 

  

 

  四、TCP连接

 

  在通过第一步的DNS域名解析后,获取到了服务器的IP地址,在获取到IP地址后,便会开始建立一次连接,这是由TCP协议完成的,主要通过三次握手进行连接。

 

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

 

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

 

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

 

 

 

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

 

  

 

  五、浏览器向服务器发送HTTP请求

 

  完整的HTTP请求包含请求起始行、请求头部、请求主体三部分。

 

  

 

  六、浏览器接收响应

 

  服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,主要包括状态码,响应头,响应报文三个部分。

 

  状态码主要包括以下部分

 

  1xx:指示信息–表示请求已接收,继续处理。

 

  2xx:成功–表示请求已被成功接收、理解、接受。

 

  3xx:重定向–要完成请求必须进行更进一步的操作。

 

  4xx:客户端错误–请求有语法错误或请求无法实现。

 

  5xx:服务器端错误–服务器未能实现合法的请求。

 

  响应头主要由Cache-Control、 Connection、Date、Pragma等组成。

 

  响应体为服务器返回给浏览器的信息,主要由HTML,css,js,图片文件组成。

 

  七、页面渲染

 

  如果说响应的内容是HTML文档的话,就需要浏览器进行解析渲染呈现给用户。整个过程涉及两个方面:解析和渲染。在渲染页面之前,需要构建DOM树和CSSOM树。

 

  

 

  在浏览器还没接收到完整的 HTML 文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片时,会再次发送 HTTP 请求重复上述的步骤。在收到 CSS 文件后会对已经渲染的页面重新渲染,加入它们应有的样式,图片文件加载完立刻显示在相应位置。在这一过程中可能会触发页面的重绘或重排。这里就涉及了两个重要概念:Reflow和Repaint。

 

  Reflow,也称作Layout,中文叫回流,一般意味着元素的内容、结构、位置或尺寸发生了变化,需要重新计算样式和渲染树,这个过程称为Reflow。

 

  Repaint,中文重绘,意味着元素发生的改变只是影响了元素的一些外观之类的时候(例如,背景色,边框颜色,文字颜色等),此时只需要应用新样式绘制这个元素就OK了,这个过程称为Repaint。

 

  所以说Reflow的成本比Repaint的成本高得多的多。DOM树里的每个结点都会有reflow方法,一个结点的reflow很有可能导致子结点,甚至父点以及同级结点的reflow。

 

  下面这些动作有很大可能会是成本比较高的:

 

  • 增加、删除、修改DOM结点时,会导致Reflow或Repaint

  • 移动DOM的位置,或是搞个动画的时候

  • 内容发生变化

  • 修改CSS样式的时候

  • Resize窗口的时候(移动端没有这个问题),或是滚动的时候

  • 修改网页的默认字体时

 

  基本上来说,reflow有如下的几个原因:

 

  • Initial,网页初始化的时候

  • Incremental,一些js在操作DOM树时

  • Resize,其些元件的尺寸变了

  • StyleChange,如果CSS的属性发生变化了

  • Dirty,几个Incremental的reflow发生在同一个frame的子树上

 

  八、关闭TCP连接或继续保持连接

 

  通过四次挥手关闭连接(FIN ACK, ACK, FIN ACK, ACK)。

 

  

 

  第一次挥手是浏览器发完数据后,发送FIN请求断开连接。

 

  第二次挥手是服务器发送ACK表示同意,如果在这一次服务器也发送FIN请求断开连接似乎也没有不妥,但考虑到服务器可能还有数据要发送,所以服务器发送FIN应该放在第三次挥手中。

 

  这样浏览器需要返回ACK表示同意,也就是第四次挥手。

 

2.TCP-三次握手和四次挥手简单理解 

三次握手(three-way handshaking)

 

1.背景:TCP位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。

 

2.原理:

 

1)发送端首先发送一个带有SYN(synchronize)标志地数据包给接收方。

 

2)接收方接收后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了。

 

3)最后,发送方再回传一个带有ACK标志的数据包,代表我知道了,表示’握手‘结束。

 

通俗的说法

 

1)Client:嘿,李四,是我,听到了吗?

 

2)Server:我听到了,你能听到我的吗?

 

3)Client:好的,我们互相都能听到对方的话,我们的通信可以开始了。

 

 
3次握手

 

四次挥手(Four-Way-Wavehand)

 

1.意义:当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。

 

2.原理:

 

 1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

 

 2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

 

 3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

 

 4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手

 

通俗的说法

 

1)Client:我所有东西都说完了

 

2)Server:我已经全部听到了,但是等等我,我还没说完

 

3)Server:好了,我已经说完了

 

4)Client:好的,那我们的通信结束l

 

 

 

 

 

 
四次挥手

 

3.进程和线程的本质和区别

 

进程是什么?

  程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。

在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。

有了进程为什么还要线程?

  进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率。很多人就不理解,既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的,主要体现在两点上:

  • 进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了。

  • 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行。

  如果这两个缺点理解比较困难的话,举个现实的例子也许你就清楚了:如果把我们上课的过程看成一个进程的话,那么我们要做的是耳朵听老师讲课,手上还要记笔记,脑子还要思考问题,这样才能高效的完成听课的任务。而如果只提供进程这个机制的话,上面这三件事将不能同时执行,同一时间只能做一件事,听的时候就不能记笔记,也不能用脑子思考,这是其一;如果老师在黑板上写演算过程,我们开始记笔记,而老师突然有一步推不下去了,阻塞住了,他在那边思考着,而我们呢,也不能干其他事,即使你想趁此时思考一下刚才没听懂的一个问题都不行,这是其二。

现在你应该明白了进程的缺陷了,而解决的办法很简单,我们完全可以让听、写、思三个独立的过程,并行起来,这样很明显可以提高听课的效率。而实际的操作系统中,也同样引入了这种类似的机制——线程。

线程的优点

  因为要并发,我们发明了进程,又进一步发明了线程。只不过进程和线程的并发层次不同:进程属于在处理器这一层上提供的抽象;线程则属于在进程这个层次上再提供了一层并发的抽象。如果我们进入计算机体系结构里,就会发现,流水线提供的也是一种并发,不过是指令级的并发。这样,流水线、线程、进程就从低到高在三个层次上提供我们所迫切需要的并发!

  除了提高进程的并发度,线程还有个好处,就是可以有效地利用多处理器和多核计算机。现在的处理器有个趋势就是朝着多核方向发展,在没有线程之前,多核并不能让一个进程的执行速度提高,原因还是上面所有的两点限制。但如果讲一个进程分解为若干个线程,则可以让不同的线程运行在不同的核上,从而提高了进程的执行速度。

  例如:我们经常使用微软的Word进行文字排版,实际上就打开了多个线程。这些线程一个负责显示,一个接受键盘的输入,一个进行存盘等等。这些线程一起运行,让我们感觉到我们输入和屏幕显示同时发生,而不是输入一些字符,过一段时间才能看到显示出来。在我们不经意间,还进行了自动存盘操作。这就是线程给我们带来的方便之处。

进程与线程的区别

  • 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

  • 线程是进程的一个实体, 是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

  • 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

  进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序 健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

 

4.进程间通信概述


进程通信的目的


  • 数据传输
    一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间

  • 共享数据
    多个进程想要操作共享数据,一个进程对共享数据

  • 通知事
    一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。

  • 资源共享
    多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。

  • 进程控制
    有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

Linux 进程间通信(IPC)的发展


linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。

前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;

后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。

Linux则把两者继承了下来

  • 早期UNIX进程间通信

  • 基于System V进程间通信

  • 基于Socket进程间通信

  • POSIX进程间通信。

UNIX进程间通信方式包括:管道、FIFO、信号。

System V进程间通信方式包括:System V消息队列、System V信号灯、System V共享内存

POSIX进程间通信包括:posix消息队列、posix信号灯、posix共享内存。

由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(PSOIX)。现有大部分Unix和流行版本都是遵循POSIX标准的,而Linux从一开始就遵循POSIX标准;

BSD并不是没有涉足单机内的进程间通信(socket本身就可以用于单机内的进程间通信)。事实上,很多Unix版本的单机IPC留有BSD的痕迹,如4.4BSD支持的匿名内存映射、4.3+BSD对可靠信号语义的实现等等。

linux使用的进程间通信方式


  1. 管道(pipe),流管道(s_pipe)和有名管道(FIFO)

  2. 信号(signal)

  3. 消息队列

  4. 共享内存

  5. 信号量

  6. 套接字(socket)

管道( pipe )


管道这种通讯方式有两种限制,一是半双工的通信,数据只能单向流动,二是只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

流管道s_pipe: 去除了第一种限制,可以双向传输.

管道可用于具有亲缘关系进程间的通信,命名管道:name_pipe克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

信号量( semophore )


信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);

消息队列( message queue )


消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

信号 ( singal )


信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

主要作为进程间以及同一进程不同线程之间的同步手段。

共享内存( shared memory )


共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

套接字( socket )


套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信

更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

进程间通信各种方式效率比较


类型无连接可靠流控制记录消息类型优先级
普通PIPE N Y Y   N
流PIPE N Y Y   N
命名PIPE(FIFO) N Y Y   N
消息队列 N Y Y   Y
信号量 N Y Y   Y
共享存储 N Y Y   Y
UNIX流SOCKET N Y Y   N
UNIX数据包SOCKET Y Y N   N

注:无连接: 指无需调用某种形式的OPEN,就有发送消息的能力流控制:

如果系统资源短缺或者不能接收更多消息,则发送进程能进行流量控制

各种通信方式的比较和优缺点

  1. 管道:速度慢,容量有限,只有父子进程能通讯

  2. FIFO:任何进程间都能通讯,但速度慢

  3. 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题

  4. 信号量:不能传递复杂消息,只能用来同步

  5. 共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存

如果用户传递的信息较少或是需要通过信号来触发某些行为.前文提到的软中断信号机制不失为一种简捷有效的进程间通信方式.

但若是进程间要求传递的信息量比较大或者进程间存在交换数据的要求,那就需要考虑别的通信方式了。

无名管道简单方便.但局限于单向通信的工作方式.并且只能在创建它的进程及其子孙进程之间实现管道的共享:

有名管道虽然可以提供给任意关系的进程使用.但是由于其长期存在于系统之中,使用不当容易出错.所以普通用户一般不建议使用。

消息缓冲可以不再局限于父子进程,而允许任意进程通过共享消息队列来实现进程间通信,并由系统调用函数来实现消息发送和接收之间的同步,从而使得用户在使用消息缓冲进行通信时不再需要考虑同步问题,使用方便,但是信息的复制需要额外消耗CPU的时间,不适宜于信息量大或操作频繁的场合。

共享内存针对消息缓冲的缺点改而利用内存缓冲区直接交换信息,无须复制,快捷、信息量大是其优点。

但是共享内存的通信方式是通过将共享的内存缓冲区直接附加到进程的虚拟地址空间中来实现的,因此,这些进程之间的读写操作的同步问题操作系统无法实现。必须由各进程利用其他同步工具解决。另外,由于内存实体存在于计算机系统中,所以只能由处于同一个计算机系统中的诸进程共享。不方便网络通信。

共享内存块提供了在任意数量的进程之间进行高效双向通信的机制。每个使用者都可以读取写入数据,但是所有程序之间必须达成并遵守一定的协议,以防止诸如在读取信息之前覆写内存空间等竞争状态的出现。

不幸的是,Linux无法严格保证提供对共享内存块的独占访问,甚至是在您通过使用IPC_PRIVATE创建新的共享内存块的时候也不能保证访问的独占性。 同时,多个使用共享内存块的进程之间必须协调使用同一个键值。

 

5. 计算机网络7层简介

以太网是一种局域网;使用双绞线光纤传输数据;

1、以太网是通信协议标准,该标准定义了在局域网(LAN)中采用的电缆类型和信号处理方法,比如有CSMA/CD协议。

2、局域网:在较小范围内组件的网络,通过交换器什么的连接各个PC机,比如一个实验室,一栋楼,一个校园内,这都市局域网,拿网线将两台计算机连在一起,这也能算是局域网,以太网是一种局域网,而局域网却不一定是以太网。

3、因特网是各种网络组合;包括以太网;

局域网:英文是 LAN ( Local Area Network);连接方式如下:

PC --- 无线路由器----(LAN)光猫(WAN)---ISP(互联网服务提供商)---Internet GW---Internet

光猫通过PPPoE拨号,从ISP拿到了WAN_IP,这是WAN路由域的特别通行证。光猫通过PPPoE拨号,从ISP拿到了WAN_IP,这是WAN路由域的特别通行证,LAN_IP是光猫分配的IP,跨越边界就进入WAN了,WAN可是运营商的地盘,WAN 有自己IP,WAN_IP,组成一个WAN路由域。

持有WAN_IP的IP包顺利到达下一个边界,Internet Gateway(网关),这是通往互联网 Internet 的最后一道关卡,即边界。左边是WAN路由域,右边是互联网路由域,如果运营商财大气粗,WAN_IP全是IANA分配的Global IP (全球唯一,可以在世界任何地方访问此IP),则这些携带WAN_IP的IP包直接进入互联网。如果运营商的WAN_IP也是私有的,则也要做WAN_IP 与 Global_IP 的地址转换,然后用Global_IP 这个全球通用通行证遨游互联网。

广域网:的发送介质主要是利用电话线或光纤,由ISP业者将企业间做连线,这些线是ISP业者预先埋在马路下的线路,因为工程浩大,维修不易,而且带宽是可以被保证的,所以在成本上就会比较为昂贵。

Global_IP 可以到达全球任何角落,包括家庭局域网:

Global_IP :局域网路由域+ 广域网路由域+互联网路由域

WAN_IP:局域网路由域+ 广域网路由域

LAN_IP:局域网路由域。

各层功能:

应用层(http协议,DNS协议):

请求报文格式:

1、GET /http://www.sohu.com HTTP/1.1 请求行,只不过这里被分开了,请求的方式  URL 版本 

2、Host:主机名 www.solu.com      

3、User-Agent:使用什么代理服务器,这里就是FireFox,也就是火狐

4、Accept:能接收的数据类型有哪些

5、Accept-Language:表示用户希望优先想得到的版本,一次排列下去,先是中文,再是英文

6、Accept-Encoding:通知服务端可以发送的数据压缩格式

7、Cookie:浏览器端的一个技术,在服务器上记录用户信息,但是也会在浏览器中保存一份。

8、Connection:连接的方式,有两种,非持续连接和持续连接,非持续连接,

响应报文状态码:

1xx:表示通知信息的,比如请求收到了或正在进行处理

2xx:表示成功,也就是服务器接收到了你的请求,并成功处理了,一般最喜欢看到的就是200了。200:这次请求成功了。

3xx:表示重定向,服务器告诉浏览器要完成请求你必须采取进一步的行动,也就是去访问另一个网页,

4xx:表示客户的差错,比如请求中有错误的语法或不能完成.404错误:就是找不到资源,就是你的URL写的有错误,使定位不到正确的资源

5xx:服务器的差错,如服务器失效,或者内部出现异常不能完成你的请求. 500错误:就是服务器写的代码中有问题。

运输层(UDP和TCP三次握手,四次挥手)

UDP:

无连接:意思就是在通讯之前不需要建立连接,直接传输数据。

不可靠:是将数据报的分组从一台主机发送到另一台主机,但并不保证数据报能够到达另一端,任何必须的可靠性都由应用程序提供。

TCP协议:

TCP协议是面向连接的、可靠传输、有流量控制,拥塞控制,面向字节流传输等很多优点的协议。

网络层(ip协议等):

IP协议(用来规定数据报的格式),IP地址,

ARP协议(地址解析协议):通过ip地址来解析主机的mac地址;

IGMP协议(用于多播)

ICMP协议(两部分ICMP差错报告报文、ICMP询问报文)比如我们经常用来测试网络连接畅通的ping命令等

数据链路层(网络连接):

以太网,局域网,集线器和网桥等。

三个基本问题:封装成帧、透明传输、差错控制以及可靠传输

点对点协议PPP。

物理层(数据传输媒介和原理):机械特性、电气特性、功能特性、过程特性

6.HTTP相关问题

https://www.cnblogs.com/gzshan/p/11125188.html

posted @ 2019-05-09 10:39  karry2karry  阅读(116)  评论(0)    收藏  举报