1.描述一下三次握手的过程。
答:
(1)客户端向服务端发送一个带SYN标志的数据包,请求连接,此时,客户端进入SYN_SEND状态。
(2)服务端向客户端返回一个带SYN和ACK标志的数据包,表示同意连接,此时,服务端进入SYN_RCVD状态。
(3)客户端向服务端再发送一个带ACK标志的数据包,表示“握手”结束,此时,客户端和服务端都进入ESTABLISHED状态。
2.描述一下四次挥手的过程。
答:
(1)客户端向服务端发送一个FIN包,用来关闭客户端-服务端间的连接,此时,客户端进入FIN_WAIT1状态。
(2)服务端收到FIN包后,向客户端发送一个带有ACK标志的数据包,表示确认信息,此时,服务端进入CLOSE_WAIT状态,客户端进入FIN_WAIT2状态。
(3)服务端向客户端发送一个FIN包,用来关闭服务端-客户端间的连接,此时服务端进入LAST_ACK状态。
(4)客户端收到FIN包后,向服务端发送一个带有ACK标志的数据包,表示确认信息,此时,客户端进入TIME_WAIT状态,服务端进入CLOSE状态。
阿里巴巴面试:为什么说HTTP协议是无状态协议?
答:HTTP是无状态协议,是指它不对之前发生过的请求和响应的状态进行保存。也就是说,无法根据之前的状态进行本次的请求处理。
假设要求登录认证的Web页面本身无法进行状态的管理(不记录已登录的状态),那么每次跳转新页面就要再次登录,或者要再每次请求报文中附加参数来管理登录状态。
不可否认,无状态协议当然也有它的优点。由于不必保存状态,自然可减少服务器的CPU及内存资源的消耗。从另一侧面来说,也正是因为HTTP协议本身是非常简单的,所以才会被应用在各种场景里。
保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了Cookie技术。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
服务器发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
简化版:HTTP协议是无状态协议,指的是HTTP协议不对之前发生过的请求和响应的状态进行保存。
HTTP协议的无状态性是有其优点的。首先,因为不需要对之前发生过的请求和响应的状态进行保存,所以减少了对内存资源的消耗。然后,无状态性意味着简单,因为简单,所以被广泛的应用在各种场景里。
当然,HTTP协议的无状态性也是有缺点的。HTTP协议不对之前发生过的请求和响应的状态进行保存,就导致它无法根据之前的状态进行本次的请求处理。典型的例子就是在登录的时候,由于HTTP协议无法对之前登录的状态进行保存,就导致每次跳转到新页面的时候都要求再次登录。
保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了Cookie技术。
什么是Cookie技术?
答:Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
服务器发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
阿里巴巴面试:一个完整的HTTP请求发送成功所经过的过程(越详细越好)。
答:1.浏览器地址栏输入URL:www.baidu.com,浏览器自动默认为http://www.baidu.com:80/,浏览器会自上而下,经过TCP/IP协议栈中的应用层、传输层、网络层、链路层对该URL进行解析。
2.应用层,根据URL,按照HTTP协议规范生成HTTP请求报文,利用DNS(域名解析器)将域名www.baidu.com解析成IP地址。
3.传输层,HTTP请求报文传入传输层,根据URL,确定传输协议采用TCP协议,端口号为80,并将TCP协议、端口号80以标签的形式打在HTTP请求报文上。
4.网络层,HTTP请求报文传入网络层,获取到应用层解析到的IP地址,并将IP地址以标签的形式打在HTTP请求报文上。
5.链路层,HTTP请求报文传入网络层,根据IP地址解析出MAC地址,并将MAC地址以标签的形式打在HTTP请求报文上。至此,HTTP请求报文已具备所要访问服务器的IP地址、MAC地址、端口号以及传输协议TCP。首先,通过TCP协议三次握手建立浏览器客户端与服务器端之间的传输通道,然后将HTTP请求报文发送给服务器。
6.服务器链路层接收到该HTTP请求报文后,至上而下,依次经过链路层、传输层、网络层、应用层,最终应用层获取到HTTP请求报文,并对其进行解析,生成HTTP响应报文,返回给浏览器端。
7.浏览器接收到返回回来的HTTP响应报文信息之后,要对其进行解析处理,并且通过TCP四次握手关闭与服务器之间的连接。(注意:HTTP1.1版本采用连接持久化,即只要任意一端没有明确提出断开连接,则保持TCP连接状态。报文信息中包含首部字段Connection,默认为Connection:keep-alive,当报文信息中的Connection:close时,关闭连接状态)
阿里巴巴面试题:只是通过IP地址,就可以唯一定位互联网上的一台计算机吗?
答:我认为这种说法不准确。对于互联网而言,要想唯一定位一台计算机,同时需要IP地址和MAC地址。但是对于用户而言,只需要知道IP地址就可以唯一定位到计算机了,这是因为,通过IP地址找到对应的MAC地址,这个过程,是计算机内部实现的,用户看不到。
IP地址是网络节点的地址,MAC地址是计算机网卡的地址。二者是一对一的关系。通过IP地址只能找到网络节点,但可能有多台计算机共用一个网络节点(路由器的功能),只有再通过MAC地址才能唯一确定这台计算机。
IP地址和MAC地址的关系就好像门牌号和户主身份证号的关系一样。通过门牌号只能找到这套房子,但是这套房子里可能同时住着好几个人(合租),只要再通过户主身份证号才能唯一确定户主这个人。
HTTP/1.1持久连接(持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态)
答:HTTP1.1逐渐停止了对keep-alive连接的支持,用一种名为持久连接的改进型设计取代了它。持久连接的目的与keep-alive连接的目的相同,但工作机制更优一些。
与HTTP1.0+的keep-alive连接不同,HTTP/1.1持久连接在默认情况下是激活的。除非特别指明,否则HTTP/1.1假定所有连接都是持久的。要在事务处理结束之后将连接关闭,HTTP/1.1应用程序必须向报文中显式地添加一个Connection:close首部。这是与以前的HTTP协议版本很重要的区别,在以前的版本中,keep-alive连接要么是可选的,要么根本就不支持。
HTTP/1.1客户端假定在收到响应后,除非响应中包含了Connection:close首部,不然HTTP/1.1连接就仍维持在打开状态。但是,客户端和服务端仍然可以随时关闭空闲连接。不发送Connection:close并不意味着服务器承诺永远将连接保持在打开状态。
为了理解HTTP,我们有必要事先了解一下TCP/IP协议族。HTTP协议是TCP/IP协议族内部的一个子集。
TCP/IP到底指的是什么?
答:把与互联网相关联的协议集合起来总称为TCP/IP。也有说法认为,TCP/IP是指TCP和IP这两种协议。还有一种说法认为,TCP/IP是在IP协议的通信过程中,使用到的协议族的统称。
TCP/IP协议族可分为几层?分别是哪几层?
答:4层。应用层、传输层、网络层、数据链路层。
介绍一下应用层
答:应用层决定了向用户提供应用服务时通信的活动。
TCP/IP协议族预存了各类通用的应用服务。比如FTP(文件传输协议)和DNS(域名系统)服务就是其中两类。
HTTP协议也属于应用层。
介绍一下传输层
答:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
在传输层由两个性质不同的协议:TCP(传输控制)和UDP(用户数据报协议)。
介绍一下网络层
答:网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,并把数据包传送给对方。
与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内旋转一条传输路线。
IP(Internet Protocol)网际协议位于网络层。IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是IP地址和MAC地址。
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本上不会更改。
注意:不要把IP协议和IP地址搞混了。
IP地址和MAC地址的区别?
答:本科的时候老师讲到这两个地址的时候说过这样一句话:IP地址就像家里的门牌号,MAC地址就像你的身份证号,只知道MAC地址是无法知道你在什么位置的,除非是有个超大功率的扩音器,世界上所有人都能听到:你在哪?然后你再用着一个扩音器喊:我在这。然后通信才能这样进行。而IP地址呢?不管你人去了哪?总会有个邮件地址,比如北京市海淀区闵庄路87号一样,很容易就会定位到你的位置。
MAC地址是由网卡决定的,是固定不变的。
介绍一下数据链路层
答:用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、网卡、光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。
HTTP协议属于TCP/IP协议族中的哪一层?
答:应用层。
TCP协议和UDP协议属于TCP/IP协议族中的哪一层?
答:网络层。
IP协议属于TCP/IP协议族中的哪一层?
答:传输层。
网卡、光纤等硬件部分属于TCP/IP协议族中的哪一层?
答:数据链路层。
根据TCP/IP协议族说明浏览器发送到服务器接收到一个HTTP请求需要哪些步骤?
答:1.发送端的应用层发送一个HTTP请求
2.在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网路层。
3.在网路层(IP协议),增加作为通信目的地的IP地址后转发给链路层。
4.链路层将请求发送给接收端服务器。
5.接收端服务器的链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能真正接收到由发送端发送过来的HTTP请求。
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时。每经过一层时会把对应的首部消去。
一个完整的http请求所经历的步骤?
答:简洁版:
TCP三次握手建立连接
客户端向服务端端发送http请求
服务端接收http请求,并对其进行处理
服务端将响应结果返回给客户端
TCP四次挥手断开连接(如果浏览器或服务器响应头里包含Connection:keep-alive,则不会断开连接)
详细版:
浏览器发送一个HTTP请求
浏览器从请求URL中解析出服务器的主机名,并通过DNS域名解析器将主机名转成服务器的IP地址
浏览器从请求URL中解析出端口号
浏览器根据IP地址和端口号建立一条与服务器的TCP连接通道(三次握手)
浏览器向服务器发送一条HTTP请求报文
服务器向浏览器回送一条HTTP响应报文
关闭连接(四次挥手)
HTTP/1.1持久连接(持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态)
答:HTTP1.1逐渐停止了对keep-alive连接的支持,用一种名为持久连接的改进型设计取代了它。持久连接的目的与keep-alive连接的目的相同,但工作机制更优一些。
与HTTP1.0+的keep-alive连接不同,HTTP/1.1持久连接在默认情况下是激活的。除非特别指明,否则HTTP/1.1假定所有连接都是持久的。要在事务处理结束之后将连接关闭,HTTP/1.1应用程序必须向报文中显式地添加一个Connection:close首部。这是与以前的HTTP协议版本很重要的区别,在以前的版本中,keep-alive连接要么是可选的,要么根本就不支持。
HTTP/1.1客户端假定在收到响应后,除非响应中包含了Connection:close首部,不然HTTP/1.1连接就仍维持在打开状态。但是,客户端和服务端仍然可以随时关闭空闲连接。不发送Connection:close并不意味着服务器承诺永远将连接保持在打开状态。
DNS服务是和HTTP协议一样位于应用层,它的作用是什么?
答:提供域名到IP地址之间的解析服务。(域名解析)
描述一下TCP协议的三次握手
答:发送端发送一个带SYN标志的数据包给接收端
接收端返回一个带SYN和ACK标志的数据包给发送端,表示确认信息
发送端再发送一个带ACK标志的数据包给接收端,表示“握手”结束
描述一下TCP协议的四次挥手
答:1.客户端向服务端发送一个FIN包,用来关闭客户端到服务端之间的数据传送
2.服务端收到FIN包后,向客户端发送一个带有ACK标志的数据包,表示确认信息
3.服务端向客户端发送一个FIN包,用来关闭服务端到客户端之间的数据传送
4.客户端收到FIN包后,向服务端发送一个带有ACK标志的数据包,表示确认信息
“四次挥手”详解:
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
UDP和TCP协议都是传输层的通信协议,它们的区别是什么呢?
答:UDP:将数据源和目的封装在数据包中,不需要建立连接;每个数据包的大小限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快。
TCP:建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。
举例:
UDP:发短信
TCP:打电话
什么是URL?什么是URL?二者有什么关系?
答:URL,统一资源定位符。URI,统一资源标识符。URL是URI的子集。
网络7层模型指哪7层?
答:应用层、表示层、会话层、网络层、传输层、链路层、物理层。
我们通常说交换机,它属于网络7层中的哪一层的设备呢?
答:属于链路层。
7层模型中的哪一层将计算机能识别的数据转成了人能识别的数据?
答:表现层。
网络编程三要素:IP地址、端口、协议(TCP/IP和UDP)。
其中:IP地址属于网络层,端口和协议属于传输层。
什么是IP地址?由什么组成?分几类?
答:IP地址是网络中计算机的唯一标识。IP地址由网络号段和主机号段组成。分5类,分别是A类、B类、C类、D类、E类。
在Window操作系统中,查询本机的IP地址,假如通过Doc命令的方式,用什么命令可以查?
答:ipconfig
什么是端口?有效端口的范围是多少?
答:端口是正在运行的应用程序的标识。有效端口的范围是0~65535。
1. 什么是http协议?
答:http协议,即超文本传输协议,是浏览器客户端和服务器端之间数据传输的格式规范。
2. HTTP协议发送请求的方式有哪些?
答:GET、POST、DELETE、HEAD、TRACE等,最常用的就是GET和POST。
3. GET和POST的区别?
答:GET:提交的参数信息会显示在地址栏中,不安全,且提交的数据大小限制在1KB之内,不支持中文。
POST:提交的参数信息不会显示在地址栏中,而是显示在请求实体中,较安全,且提交的数据大小没有任何限制,支持中文。
报文包括请求报文和响应报文,报文包括报文起始行、报文首部、报文实体。这里着重说一下报文首部。
HTTP首部可以分为以下几类。
答:通用首部:Connection、Date等
请求首部:Host、Accept、Cookie等
响应首部:Server、Set-Cookie等
实体首部:Location、Content-Type、Content-Length等
扩展首部:扩展首部是非标准的首部,由应用程序开发者创建,但还未添加到已批准的HTTP规范中去
4. 请求报文包括哪些部分?
答:请求行、请求头(请求首部)、请求体。
5. 请求行包括哪些部分?
答:请求方式(GET/POST)、请求资源路径(URI)、HTTP协议版本(HTTP1.1)。
6. 请求头信息是以键值对的形式存放的?常见的请求头首部(key)有哪些?
答:Host(当前请求访问的目标地址,包括域名:端口号)、Accept(浏览器可接收的数据类型)、Date(请求发出的时间)、Cookie(Cookie信息)、Connection(浏览器与服务器的连接状态,默认为keep-alive)等。
Accept: text/html,image/* -- 浏览器可接受的数据类型 Accept-Charset: ISO-8859-1 -- 浏览器可接受的编码格式 Accept-Encoding: gzip,compress --浏览器可接受的数据压缩格式 Accept-Language: en-us,zh- --浏览器可接受的语言 Host: www.it315.org:80 --(必须的)当前请求访问的目标地址(主机:端口) If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --浏览器最后的缓存时间 Referer: http://www.it315.org/index.jsp -- 当前请求来自于哪里 User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --浏览器类型 Cookie:name=eric -- 浏览器保存的cookie信息 Connection: close/Keep-Alive -- 浏览器跟服务器的连接状态。close: 连接关闭 keep-alive:保存连接(默认)。 Date: Tue, 11 Jul 2000 18:23:51 GMT -- 请求发出的时间 |
7. 请求体中存放的是什么?
答:参数信息。只有POST请求方式的参数信息会存放到请求体中。
8. 响应报文包括哪些部分?
答:响应行、响应头(响应首部)、响应体。
9. 响应行包括哪些部分?
答:HTTP协议版本号、状态码、状态描述。
10. 响应头包含哪些信息?
答:Location(重定向地址)、Server(服务器类型)、Content-Type(表示服务器传给浏览器的数据的类型)、Content-Length(表示服务器传给浏览器的数据的长度)、Connection(浏览器与服务器的连接状态,默认为keep-alive)等、Set-Cookie(Cookie信息)等
Location: http://www.it315.org/index.jsp -表示重定向的地址,该头和302的状态码一起使用。 Server:apache tomcat ---表示服务器的类型 Content-Encoding: gzip -- 表示服务器发送给浏览器的数据压缩类型 Content-Length: 80 --表示服务器发送给浏览器的数据长度 Content-Language: zh-cn --表示服务器支持的语言 Content-Type: text/html; charset=GB2312 --表示服务器发送给浏览器的数据类型及内容编码 Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --表示服务器资源的最后修改时间 Refresh: 1;url=http://www.it315.org --表示定时刷新 Content-Disposition: attachment; filename=aaa.zip --表示告诉浏览器以下载方式打开资源(下载文件时用到) Transfer-Encoding: chunked Set-Cookie:SS=Q0=5Lb_nQ; path=/search --表示服务器发送给浏览器的cookie信息(会话管理用到) Expires: -1 --表示通知浏览器不进行缓存 Cache-Control: no-cache Pragma: no-cache Connection: close/Keep-Alive --表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接
11.常见的状态码有哪些?分别代指什么意思? 答:200:成功 302:重定向 404:找不到 500:服务器错误
12.为什么说HTTP协议是不保存状态的协议? 答:HTTP是一种不保存状态的协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。但为了实现期望的保持状态功能,于是引入了Cookie技术。
13.HTTP协议有哪些缺点? 答:通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡改
14.解决HTTP中加密处理防止被窃听的方式有哪些? 答:通信的加密(HTTPS)和内容的加密(还有风险)。
15.针对HTTP协议的以上缺点,我们可以怎么做? 答:用HTTPS协议来解决。
16.谈谈你对HTTPS的理解? 答:HTTPS协议就是HTTP协议+SSL,是HTTP协议的安全版本。可以这样理解:HTTP是TCP/IP协议栈的最顶层,其安全版本HTTPS就是在HTTP和TCP之间插入了一个(SSL)密码加密层。 |