什么是TCP/IP?
TCP建立连接为什么要三次握手?断开连接为什么要四次挥手?
SSL/TSL握手过程?
协议
就是约定
,网络协议
就约定了信息在网络之间是如何传输
的,即如何发送
与如何接收
。
计算机网络为什么要分层?
因为计算机网络是个非常复杂的系统,分层可以分而治之,将复杂问题转化为若干较小的局部问题,而这些较小的问题就比较容易解决。
计算机网络体系大致分为三种:OSI七层模型、TCP/IP四层模型、五层模型
应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。
传输层:负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP
网络层:选择合适的路由和交换节点,确保数据及时传送。主要包括IP协议。
数据链路层:在两个相邻节点之间传输数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。
物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽物理介质和传输设备的差异。
TCP/IP协议各层:
应用层:我们平时常用的TCP/IP的应用层协议就是HTTP协议
传输层:TCP、UDP协议都是TCP/IP传输层协议,传输层顾名思义,就是用来进行数据传输的,用来收发数据。
网络层:IP协议属于网络层。网络层的作用是用来寻址,比如我们要跟一台服务器建立连接,那么我们如何知道这个服务器的地址?这个就是网络层的功能。我们每台电脑都有一个IP,这个IP就是用来标记你主机的地址的,服务器只要知道了你的IP,就可以和你的主机建立连接,从而进行通信。
网络接口层:这一层其实是一套理论,在软件中不太可能会接触到它。它是用来定义一些硬件设备的标准的。
1)面试官:讲一下TCP三次握手?
TCP的握手与挥手是建立连接和断开连接的时候需要经过的一个过程。
第一次握手:客户端与服务端建立连接,由客户端向服务端发送一次数据,这是第一次握手。
第二次握手:服务端收到客户端的数据后,发给客户端响应数据,这是第二次握手。
第三次握手:客户端收到服务端的响应数据后,再响应给服务端一次数据,这是第三次握手。
2)面试官:为什么TCP建立连接需要三次握手呢?
三次握手是为了保证客户端与服务端双方的数据收发能力都没有任何问题。具体说:
第一次握手,是客户端向服务端发数据,如果服务端接收到了客户端发来的数据,那么就说明,服务端确定了客户端的发送能力没问题。
第二次握手,是服务端响应给客户端数据,如果客户端接收到了服务端的响应数据,说明客户端确定了服务端的接收和发送能力都没问题。
现在,经过两次握手,我们确定了客户端的发送能力没问题,服务端的发送和接受能力没问题,但是我们还是不知道客户端的接收能力是否OK,因为服务端并不知道客户端是否收到了他发过去的响应数据。所以,还要进行第三次握手。
第三次握手:客户端向服务端发送响应数据,如果服务端接收到了这个响应数据,那么就确定了客户端的接收能力没有问题。
3)面试官:TCP为什么握手要三次,而挥手要四次呢?
目的是为了让服务端在客户端想主动断开之后还能够给客户端发送一些数据。具体说:
第一次挥手 (FIN),客户端要断开连接,首先要发给服务端一个finish的包,这个finish的包代表客户端不会再给服务端写数据了。
第二次挥手 (ACK),服务端收到了这个finish包后,就知道客户端想要和它断开连接了,但是服务端可能还有一些数据要发给客户端,所以服务端先发送给客户端一个包,告诉客户端我知道了,但是我还有些数据要发给你,所以你先等一等。
第三次挥手 (FIN ACK),是服务器把该发给客户端的数据都发完了,然后发给客户端一个包,告诉它,我这边数据发完了,你现在可以断开了。
第四次挥手 (ACK),客户端收到了第三次挥手的数据,正式通知服务端准备断开了。
其实,四次挥手和三次握手很相似,实际上就是把第二次握手的数据分成了两次来发送。
4)面试官:讲一下TCP和UDP的区别?
5)面试官:讲一下浏览器中输入URL返回页面的过程,可以详细点。
6)面试官:DNS域名解析的过程详细讲讲?
DNS域名解析就是通过URL找到与之相对应的IP地址。DNS域名解析的大致流程就是:
浏览器的DNS缓存——>操作系统缓存——>本地host文件——>本地DNS服务器——>根域名服务器
注解1:Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”。
6)面试官:知道session吗?
知道。因为这个HTTP是无状态协议,所以需要某种机制来识别具体的用户身份,用来跟踪用户的整个会话。而常用的会话跟踪技术就是cookie与session。session就是在服务端保存用户状态的协议,通常用来保存用户的登录状态。
注解:如何理解HTTP协议是无状态的?
HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议,而是,它的每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不受前面的请求应答情况直接影响。
6)面试官:讲讲session的原理吧。
session工作原理就是,首先浏览器向服务器发送请求,访问web站点时,服务器首先会检查这个客户端请求是否已经包含了一个session标识 (即:sessionid)。如果已经包含了sessionid,则说明服务器已经为此客户端创建了session,服务器就按照sessionid把对应的session检索出来使用。如果客户端请求不包含sessionid,则服务器为此客户端创建一个session,并且生成一个与此session相关联的独一无二的sessionid存放到cookie中,这个sessionid将在本次响应中返回到客户端保存。这样在每次交互的过程中,客户端每次请求时,都会带着这个sessionid,服务器根据这个sessionid就可以找到对应的session。以此来达到共享数据的目的。
7)面试官:post和get请求的区别?
首先get请求和post请求本质上都是http请求,由于HTTP的底层时TCP/IP,所以get和post请求的底层也是TCP/IP。也就是说,get和post都是TCP连接。所以它们本质上是没有区别的。
GET和POST的最大区别应该是规范上的区别,比如:
POST 方法
传输的数据量更大:GET 请求
内容在URL 中,因此有大小限制,但这个主要是因为不同的浏览器对URL长度有不同的限制,GET请求本身是没有大小限制的。而POST 请求
内容在请求体中,理论上没有大小限制,但是实际上服务器处理程序的处理能力会对POST的大小起到限制。IE:对URL的最大限制为2083个字符,若超出这个数字,提交按钮没有任何反应。
Firefox:对Firefox浏览器URL的长度限制为:65536个字符。
Safari:URL最大长度限制为80000个字符。
Chrome:URL最大长度限制为8182个字符。
8)面试官:cookie和session的区别?
HTTP 协议建立在Tcp/Ip
协议之上,HTTP 属于应用层协议。HTTP 协议是一个请求-响应
式协议,一般由客户端
(比如浏览器)向服务端
发起,服务端处理后,再向客户端返回信息。客户端发出的消息称为HTTP 请求
(Request
),服务端返回的消息称为HTTP 响应
(Response
)。
每种协议都有它的消息结构,有了消息结构,发送方就知道以怎样的结构发送消息,接收方就知道以怎样的结构接收消息。下面介绍HTTP 消息结构。
由上图可看出,HTTP 请求由四部分组成:
请求方法
+空格
+URL
+空格
+协议版本
+\r\n
键值对
组成,中间以冒号:
隔开,每个键值对
最后是\r\n
\r\n
例子:
- GET / HTTP/1.0
- User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
- Accept: */*
其中: - 第1行是请求行
,GET
为请求方法,/
为URL
,HTTP1.0
为协议版本,中间以空格
隔开。 - 第2行与第3行是请求头
。 - 请求头下面的空行
,这里没有显示。 - 一般GET
请求不包含请求体
,所以本请求中没有请求体。
由上图可看出,HTTP 响应由四部分组成:
协议版本
+空格
+状态码
+空格
+状态码描述
+\r\n
键值对
组成,中间以冒号:
隔开,每个键值对
最后是\r\n
\r\n
例子:
- HTTP/1.0 200 OK
- Content-Type: text/plain
- Content-Length: 82
- Expires: Thu, 05 Dec 1997 16:00:00 GMT
- Last-Modified: Wed, 5 August 1996 15:55:28 GMT
- Server: Apache 0.84
-
- <html>
- <body>Hello HTTP</body>
- </html>
其中:
状态行
,HTTP/1.0
为协议版本,200
是响应状态码
,OK
是状态码描述
,中间用空格
隔开。响应头
。空行
。响应内容
。HTTP 协议支持9 种请求方法
,最常用的是GET
和POST
方法。
HTTPS
中的S
是指Security
,即是安全
的意思,所以HTTPS
就是安全的HTTP
。
HTTPS
在HTTP 协议的基础上加入了一层SSL/TLS
,用于对HTTP 信息加密,其加密采用非对称加密算法RSA 算法
。其协议结构如下:
注解:如何理解HTTP协议是无状态的?
HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议,而是,它的每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不受前面的请求应答情况直接影响。
HTTP协议叫做超文本传输协议。顾名思义,它可以分为三个部分:超文本、传输、协议。
超文本:
传输:
协议: