计网-常考面试题

什么是TCP/IP?

TCP建立连接为什么要三次握手?断开连接为什么要四次挥手?

SSL/TSL握手过程?

协议就是约定网络协议就约定了信息在网络之间是如何传输的,即如何发送如何接收

一、网络分层模型

计算机网络为什么要分层?

因为计算机网络是个非常复杂的系统,分层可以分而治之,将复杂问题转化为若干较小的局部问题,而这些较小的问题就比较容易解决。

计算机网络体系大致分为三种:OSI七层模型、TCP/IP四层模型、五层模型

1、OSI七层模型:全称叫Open System Interconnection (开放式系统互联),是国际标准化组织ISO制定的理论模型

 2、五层模型 (一般面试考察比较多的是五层模型):

应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。

传输层:负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP

网络层:选择合适的路由和交换节点,确保数据及时传送。主要包括IP协议。

数据链路层:在两个相邻节点之间传输数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧。

物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽物理介质和传输设备的差异。

3、TCP/IP四层模型:基于OSI建立的实际实现的模型,所以TCP/IP体系结构是事实上的国际标准。(此外,TCP是传输层的协议,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的区别?

  • TCP是面向连接的;UDP是无连接的。即:UDP发送数据之前不需要建立连接,而TCP要先建立连接。
  • TCP提供可靠的服务,UDP提供不可靠的服务。
  • TCP面向字节流,把数据看作是一连串无结构的字节流;UDP是面向报文的。
  • TCP拥有阻塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如实时视频会议等)。
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的通信方式。

5)面试官:讲一下浏览器中输入URL返回页面的过程,可以详细点。

  1. 首先解析域名(DNS),获取到网站的主机IP;
  2. 浏览器通过网站的主机IP直接与网站主机通信,通过三次握手建立TCP连接;浏览器会以一个随机端口向服务器的80端口发起TCP的连接;
  3. 建立TCP连接后,浏览器向服务器发起一个HTTP请求;
  4. 服务器响应请求,发送响应数据;(这个过程中,参数从客户端传递到服务器端,服务器端得到参数之后,进行相应的业务处理,再将结果封装成HTTP包,返回给客户端);
  5. 服务器端和客户端的交互完成,断开TCP连接 (4次挥手);
  6. 浏览器解析响应内容,将页面渲染给用户。

6)面试官:DNS域名解析的过程详细讲讲?

DNS域名解析就是通过URL找到与之相对应的IP地址。DNS域名解析的大致流程就是:

浏览器的DNS缓存——>操作系统缓存——>本地host文件——>本地DNS服务器——>根域名服务器

  1. 先检查浏览器中的DNS缓存,如果浏览器中有对应的记录,则会直接使用,并完成解析;
  2. 如果浏览器没有缓存,那就去查询操作系统的缓存,如果查询到记录,就可以直接返回IP地址,完成解析;
  3. 如果操作系统没有DNS缓存,就会去查看本地host文件,如果host文件有记录,则直接使用;
  4. 如果本地的host文件没有相应的记录,则会请求本地的DNS服务器。本地DNS服务器一般是由本地的网络服务商如联通、移动等提供,通常情况下可通过DHCP自动分配,当然也可以自己手动配置。
  5. 如果本地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的最大区别应该是规范上的区别,比如:

  1. GET请求是用来获取资源的,也就是进行查询操作的;而POST请求是用来传输实体对象的,因此会使用POST来进行添加、修改和删除等操作;
  2. GET请求的参数通过URL传递,而POST的参数放在请求体(request body)中;
  3. POST相比GET更加安全,因为GET的参数直接暴露在URL上,所以GET不能用来传递敏感信息;
  4. POST 方法传输的数据量更大:GET 请求内容在URL 中,因此有大小限制,但这个主要是因为不同的浏览器对URL长度有不同的限制,GET请求本身是没有大小限制的。而POST 请求 内容在请求体中,理论上没有大小限制,但是实际上服务器处理程序的处理能力会对POST的大小起到限制。

IE:对URL的最大限制为2083个字符,若超出这个数字,提交按钮没有任何反应。

Firefox:对Firefox浏览器URL的长度限制为:65536个字符。

Safari:URL最大长度限制为80000个字符。

Chrome:URL最大长度限制为8182个字符。

8)面试官:cookie和session的区别?

  1. 数据存放位置不同:cookie数据存放在客户的浏览器上,session数据放在服务器上。
  2. Session比Cookie更具有安全性(Cookie有安全隐患,通过拦截或本地文件找到你的cookie后可以进行攻击)
  3. Session占用服务器性能,Session过多,增加服务器压力;
  4. cookie数据的存放受到浏览器限制,而session由于存储在服务端,所以浏览器对它没有限制。
  5. cookie中通常保存的是字符串;session中能存储任何数据类型的数据;

二、HTTP协议 

HTTP 协议建立在Tcp/Ip 协议之上,HTTP 属于应用层协议。HTTP 协议是一个请求-响应式协议,一般由客户端(比如浏览器)向服务端发起,服务端处理后,再向客户端返回信息。客户端发出的消息称为HTTP 请求Request),服务端返回的消息称为HTTP 响应Response)。

每种协议都有它的消息结构,有了消息结构,发送方就知道以怎样的结构发送消息,接收方就知道以怎样的结构接收消息。下面介绍HTTP 消息结构。

1、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 为请求方法,/ 为URLHTTP1.0 为协议版本,中间以空格隔开。 - 第2行与第3行是请求头。 - 请求头下面的空行,这里没有显示。 - 一般GET 请求不包含请求体,所以本请求中没有请求体。

2、HTTP响应结构:

由上图可看出,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>

其中:

  • 第1行为响应状态行HTTP/1.0 为协议版本,200 是响应状态码OK状态码描述,中间用空格隔开。
  • 第2行到第6行为响应头
  • 第7行为空行
  • 第8行到第10行为响应内容

 3、HTTP 请求方法

HTTP 协议支持9 种请求方法,最常用的是GET 和POST 方法。

 3、什么是HTTPS

HTTPS 中的S 是指Security,即是安全的意思,所以HTTPS 就是安全的HTTP

HTTPS 在HTTP 协议的基础上加入了一层SSL/TLS,用于对HTTP 信息加密,其加密采用非对称加密算法RSA 算法。其协议结构如下:

4、HTTP协议的特性:

  • HTTP协议是构建于 TCP/IP 协议之上,是一个应用层协议,默认端口号是 80
  • HTTP 是无连接无状态

注解:如何理解HTTP协议是无状态的?

HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议,而是,它的每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不受前面的请求应答情况直接影响。

HTTP协议叫做超文本传输协议。顾名思义,它可以分为三个部分:超文本传输协议

超文本:

传输:

协议:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值