计算机网路相关面试题

TCP的长连接的短链接

长连接(long connection),指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。

短连接(short connection),指的是在数据传送过程中,只在需要发送数据时才去建立一个连接,数据发送完成后则断开此连接,即每次连接只完成一项业务的发送。它底层的数据传输基于 TCP/IP,每次发送请求前需要先与服务器建立连接,收到响应报文后会立即关闭连接。因为客户端与服务器的整个连接过程很短暂,不会与服务器保持长时间的连接状态,所以就被称为 短连接。

应用场景:

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用新建立TCP连接。
像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,所以并发量大,但每个用户无需频繁操作情况下需用短链接好。

各自优势:

模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起close操作。因此,短连接优点是:管理起来方便,存在的连接都是有效的连接,不需要额外的控制手段,缺点是:传输耗时,因为每次传输数据都要经过三次握手和四次挥手。
模拟一下长连接的情况,client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。因此长乱接的优点是传输效率高,多个HTTP请求可以复用同一个TCP连接,这就节省了很多TCP连接建立和断开的消耗,尤其是传输数据量大的时候,效率高更明显,缺点是Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候。

设置长连接

请求头中加入:Connection:keep-alive,http1.1默认是长连接。

长连接也需要在恰当的时间关闭,不能永远保持与服务器的连接

这在客户端或者服务器都可以做到;客户端在请求头中加入 Connection: close 字段,告诉服务器:这次通信后就关闭连接。服务器看到这个字段,就知道客户端要主动关闭连接,于是在响应报文里也加上这个字段,发送之后就调用 Socket API 关闭 TCP 连接。服务器端通常不会主动关闭连接 ,但也可以使用一些策略:1,使用 keepalive_timeout 指令,设置长连接的超时时间,如果在一段时间内连接上没有任何数据收发就主动断开连接,避免空闲连接占用系统资源;2,使用 keepalive_requests 指令,设置长连接上可发送的最大请求次数。比如设置成 1000,那么当 Nginx 在这个连接上处理了 1000 个请求后,也会主动断开连接。

网络四层和七层模型

TCP/IP四层模型:链接层,网际层,传输层,应用层。
IOS七层模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

TCP和HTTP在哪一层

IP在网络层,TCP在传输层,HTTP在应用层。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且接受顺序与发送顺序一致。TCP协议是可靠的、面向连接的。

什么是跨域请求

跨域指的是从一个域名去请求另外一个域名的资源。即跨域名请求!跨域时,浏览器不能执行其他域名网站的脚本,是由浏览器的同源策略造成的,是浏览器施加的安全限制。

http状态码

1** 信息响应,服务器收到请求,需要请求者继续执行操作;
2** 成功响应,操作被成功接收并处理;
3** 重定向响应,需要进一步的操作以完成请求;
4** 客户端错误响应,请求包含语法错误或无法完成请求;
5** 服务器错误响应,服务器在处理请求的过程中发生了错误;

http的请求方式

  • GET 方法请求一个指定资源的表示形式,使用 GET 的请求应该只被用于获取数据。
  • HEAD 方法请求一个与 GET请求的响应相同的响应,但没有响应体。
  • POST 方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用。
  • PUT 方法用有效载荷请求替换目标资源的所有当前表示。
  • DELETE 方法删除指定的资源。
  • CONNECT 方法建立一个到由目标资源标识的服务器的隧道。
  • OPTIONS 方法用于描述目标资源的通信选项。
  • TRACE 方法沿着到目标资源的路径执行一个消息环回测试。
  • PATCH 方法用于对资源应用部分修改。

打开网页很慢的原因

一是网页提供方的服务器运行拥堵造成的;二是你的 网络DNS被劫持 了。

打开一个网页是空白的

这是由浏览器缓存(包括浏览历史、cookies、登录数据等)引起的,缓存数据过多可能导致数据被破坏,出现页面空白等。

解决方案:F12→Application→Local Storage→点击URL,鼠标右键点击Clear

每个浏览器都有Cache-Control头部,通过其max-age指令,可以指定缓存资源的生命周期(以秒为单位),用法如下:Cache-Control:max-age=3600,第一次启动浏览器,Cache-Control为no-cache,即缓存为空。

进程,线程,协程的区别

  • 程序是一些保存在磁盘上的指令的有序集合,是静态的。
  • 进程是程序执行的过程,包括了动态创建、调度和消亡的整个过程,进程是程序资源管理的最小单位。
  • 线程是操作操作系统能够进行运算调度的最小单位。线程被包含在进程之中,是进程中的实际运作单位,一个进程内可以包含多个线程,线程是资源调度的最小单位。
  • 协程 Coroutines是一种比线程更加轻量级的微线程。类比一个进程可以拥有多个线程,一个线程也可以拥有多个协程,因此协程又称微线程和纤程。

token,session,cookies的区别

  • cookie是存储在浏览器端的一小段文本。
  • seesion是存储在服务器端的一组数据
  • token通常代表一小段字符串,可以存储到cookie里,随请求一起发过去,也可以存在服务器中。

session+cookie 举例:第一次请求时候,服务器生成一个信物,并要求客户端也定一个信物。每次请求时候你都带上信物,你我信物一比对,欧了。信物有过期时间。服务器会生成一个信物储物柜(占空间),用来存取信物(cookie),本质是空间换时间,时间即没有计算耗时。
token 举例:一开始登录给你一个暗号,定一套密钥,下次你发起请求,服务器拿密钥验证你的暗号,对上了就验证通过,我不需要每次都保存你的东西。多了个计算验证环节,是时间换空间。

ssh端口

SSH 服务器是默认运行在 22 号端口上的。然而,由于某些原因需要,它也可以运行在别的端口上,端口号可以在配置文件 /etc/ssh/sshd_config 中将Port 22更改。
SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。
SSH由服务器和客户端组成,在整个通信过程中,为建立安全的SSH通道,会经历如下几个阶段:建立连接-版本协商-算法协商-密钥交换-用户认证-会话请求 - 会话交互。

301和302的区别

301:被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。
302:请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
301 表示被请求 url 永久转移到新的 url;302 表示被请求 url 临时转移到新的 url。
301 搜索引擎会索引新 url 和新 url 页面的内容;302 搜索引擎可能会索引旧 url 和 新 url 的页面内容。

输入URL会发生什么

URL 解析-DNS 查询-TCP 连接-处理请求-接受响应-渲染页面
URL 解析:地址解析(判断你输入的是一个合法的 URL 还是一个待搜索的关键词,并且根据你输入的内容进行自动完成、字符编码等操作)- HSTS(由于安全隐患,会使用 HSTS 强制客户端使用 HTTPS 访问页面)- 浏览器的安全检查操作-检查缓存
DNS 查询:浏览器缓存 - 操作系统缓存 - 路由器缓存 - ISP DNS 缓存 -根域名服务器查询
TCP 连接:应用层:发送 HTTP 请求 - 传输层:TCP 传输报文 -网络层:IP协议查询Mac地址 - 链路层:以太网协议将数据分为以“帧”为单位的数据包。
处理请求:主线程监听-子线程出路-解析,验证,封装 - 判断是否重定向 - 重定向新地址/URL重写 - 真实资源 - 返回资源
接受响应:浏览器接收到来自服务器的响应资源后,会对资源进行分析 - 根据状态码做不同的事情 - 如果响应资源进行了压缩(比如 gzip),还需要进行解压 - 对响应资源做缓存 -响应资源里的 MIME 类型去解析响应内容。
渲染页面:HTML 解析 - CSS 解析 - 渲染树( DOM 树和 CSS 规则树合并的过程) - 布局与绘制 - 合并渲染层 - 回流与重绘 - JavaScript 编译执行

当网络不通时怎么排查

1,网络不通

  • 这是最常见的问题,解决问题的基本原则是先软后硬。
  • 先从软件方面去考虑,检查是否正确安装了TCP/IP协议,是否为局域网中的每台计算机都指定了正确的IP地址。
  • 使用Ping命令,看其他的计算机是否能够Ping通。如果不通,则证明网络连接有问题;如果能够Ping通但是有时候丢失数据包,则证明网络传输有阻塞,或者说是网络设备接触不大好,需要检查网络设备。
  • 当整个网络都不通时,可能是交换机或集线器的问题,要看交换机或集线器是否在正常工作。
  • 如果只有一台电脑网络不通”时只能看到本地计算机,而看不到其他计算机,可能是网卡和交换机的连接有问题,则要首先看一下RJ-45水晶头是不是接触不良。然后再用测线仪,测试一下线路是否断裂。最后要检查一下交换机上的端口是否正常工作。

1、检查网络运营公司提供的网络连接,是否通畅。如果通常没有问题,就继续检查我们自己内部的网络问题。
2、获取到本机的IP后“Ping+本地IP地址”,如果网络不通,就是网络TCP/IP协议出了问题。
3、如果要检查局域网内,本机和其他计算机之间是否连接畅通,可以“Ping+其他主机的IP地址”。如果不通,就是子网掩码设置错误或者网卡配置有问题造成的,也有可能是网络电缆出了问题。
4、检查网关连接是否畅通的方法是“ping 192.168.1.1”;检查电脑与外部网络连接是否畅通的方法是“ping www.baidu.com”;检查主机是否有问题的方法是ping localhost。

2,连接故障

  • 检查RJ45接口是否制作好,RJ45是10BASE-T网络标准中的接口形式,已被广泛使用,其内部有8个线槽,线槽含义遵循EIA/TIA568国际标准,在10BASE-T网络中1、2线为发送线,3、6线为接收线。在双机进行连接的时候,其中的1、3、2、6线需要对调。否则也会造成网络的不通。
    检查HUB或者交换机的接头是否有问题,如果某个接口有问题,可以换一个接口来测试。

3,网卡故障

  • 网卡的问题不太明显,所以在测试的时候最好是先测试网线,再测试网卡,如果有条件的话,可以使用测线仪或者万用表进行测试。
  • 查看网卡是否正确安装驱动程序,如果没有安装驱动程序,或者驱动程序有问题,则需要重新安装驱动程序。
  • 硬件冲突。需要查看与什么硬件冲突,然后修改对应的中断号和I/O地址来避免冲突,有些网卡还需要在CMOS中进行设置。

4,病毒故障
互联网上有许多能够攻击局域网的病毒,如红色代码、蓝色代码、尼姆达等。某些病毒除了使计算机运行变慢,还可以阻塞网络,造成网络塞车。对付这些新病毒,大多数病毒厂商,例如瑞星,KV3000等都在其主页上设有对付的办法。在这里一定要注意,不要按照平常的杀毒办法杀毒,必须对杀毒软件进行定时的升级。

put和post区别

PUT 请求是 HTTP 协议中的一种请求方法,通常用于更新或替换服务器上的资源。使用 PUT 请求时,客户端需要将整个资源的新版本发送到服务器。如果服务器上已存在该资源,则用客户端提交的新版本替换原有的资源。如果该资源不存在,则会创建一个新的资源。
PUT 请求的一些特点:
• 可以更新整个资源。
• 客户端需要发送完整的资源内容。
• 如果服务器上不存在该资源,则会创建一个新的资源。
• PUT 请求具有幂等性,即执行多次 PUT 请求的结果应该相同。

POST 请求是 HTTP 协议中的一种请求方法,通常用于创建新的资源或提交数据到服务器进行处理。使用 POST 请求时,客户端将数据提交到服务器,服务器根据数据进行处理,并返回响应。通常情况下,POST 请求会在服务器上创建新的资源,并返回该资源的 URI。
POST 请求的一些特点:
• 可以创建新的资源或提交数据到服务器进行处理。
• 客户端可以只发送部分资源内容。
• 如果请求成功,服务器会返回一个表示新资源的 URI。
• POST 请求不具有幂等性。

PUT 和 POST 的区别主要在以下几个方面:

  1. 语义不同:PUT 请求通常用于更新或替换服务器上的资源,而 POST 请求通常用于创建新的资源或提交数据到服务器进行处理。
  2. 客户端发送的数据不同:PUT 请求需要客户端发送完整的资源内容,而 POST 请求可以只发送部分资源内容。
  3. 响应不同:PUT 请求成功后通常返回 200 OK 状态码,而 POST 请求成功后通常返回 201 Created 状态码,并返回表示新资源的 URI。
  4. 幂等性不同:PUT 请求具有幂等性,即执行多次 PUT 请求的结果应该相同,而 POST 请求不具有幂等性。
    总之,PUT 和 POST 请求有些相似之处,但也有一些其他的区别:
  5. 安全性不同:PUT 请求是安全的,即对服务器上的资源的任何操作都不会导致状态的改变。而 POST 请求不是安全的,它可能会导致状态的改变。
  6. 可缓存性不同:PUT 请求是可缓存的,客户端可以使用缓存的响应来更新资源。而 POST 请求不是可缓存的,客户端不能使用缓存的响应来更新资源。
  7. 使用场景不同:PUT 请求适用于更新完整的资源,比如更新用户信息、文章内容等。而 POST 请求适用于提交数据到服务器进行处理,比如创建新的文章、提交表单等。
  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值