首页 > 其他分享 >计算机网络常见面试题

计算机网络常见面试题

时间:2024-07-31 10:54:52浏览次数:11  
标签:面试题 HTTP 请求 报文 常见 TCP 计算机网络 连接 客户端

1、什么是网络协议、常见的网络协议有哪些

网络协议是同一个网络中的计算机在进行连接和通信时所遵守的规则,规定了数据的传输格式、传输速率、传输步骤等,通信双方必须同时遵守才能完成数据的交换。常见的网络协议有HTTP、TCP/IP、UDP、FTP等。

2、计算机网络结构

计算机网络结构分3种:OSI体系结构(7层)、TCP/IP体系结构(4层)、五层体系结构。

OSI体系结构:结构全面、理论完整、但复杂不实用

TCI/IP体系结构:4层,结构简单,应用广泛

五层体系结构:折中上面两种结构,既简洁又能把概念讲清楚

3、HTTP协议(应用层)

HTTP协议(超文本传输协议)是建立在TCP协议的基础上的,简单来说就是客户端和服务端进行数据传输的一种规则。HTTP协议是一种无状态保存的协议,对于发送过的请求和响应都不做持久化处理。HTTP协议定义了Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。

HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

HTTP 请求/响应的步骤

1.客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立TCP套接字连接。

2.发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3.服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取,一个响应由状态行、响应头部、空行和响应数据4部分组成。

4.释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。

5.客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集,客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

4、HTTP的短链接和长连接(HTTP1.0和1.1区别)

HTTP的短链接和长连接(HTTP1.0和1.1区别)
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断。

而从HTTP/1.1起,默认使用长连接。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。

5、HTTP请求方法

GET:向服务器请求资源

POST:向服务器提交数据请求处理

HEAD:向服务器请求资源,只不过服务器将不传回资源的本文部分

PUT:向指定资源位置上传数据

DELETE:请求服务器删除指定资源

TRACE:回显服务器收到的请求,主要用于测试或诊断HTTP 请求/响应的步骤

OPTIONS:使服务器传回该资源所支持的所有HTTP请求方法,可以测试服务器功能是否正常

CONNECT:通常用于代理服务器

6、HTTP状态码

通过状态码可以知道服务端是否正常处理了请求。

1XX(信息状态码):

100  Continue  客户端继续其请求

101  切换协议  服务端根据客户端的请求切换协议

2XX(成功状态码):

200  OK  请求成功

201  Created  请求成功并创建了新的资源

202  Accepted  已接受请求,但未处理完成

204  no content  请求成功,但没有返回结果

206  partial content  成功处理了部分请求

3XX(重定向状态码):

301  请求的资源永久移动到新的url

302  请求的资源临时移动到新的url

303  请求的资源存在另一个url,应使用GET方法定向请求资源

304  找到对应资源但请求的条件不符合

4XX(客户端错误状态码):

400  请求报文存在语法错误

401  需要认证或者认证失败

403  forbidden  请求被服务端拒绝

404  not found  无法找到请求的资源

408  超时,服务端等待客户端发送请求的时间过长

5XX(服务端错误状态码):

500  服务端执行请求时发生错误

503  服务端正在超负载或者停机维护,无法处理请求

505  服务端不支持请求的HTTP协议版本,无法处理

7、HTTP和HTTPS

HTTP协议是超文本传输协议,用于在Web浏览器和网站服务器之间传递信息,传输端口为80。HTTP协议以明文的方式发送内容、不提供任何方式的数据加密,因此不适合传输一些敏感信息,如信用卡号、密码等支付信息。

HTTPS是超文本传输安全协议,HTTPS协议在HTTP的基础之上加入了SSL、TLS协议,传输端口为443。HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密、身份认证的网络协议,比HTTP协议安全。

区别:

1.安全性不同:HTTP采用明文传输,数据都是未加密的,安全性较差。HTTPS则是具有安全性的SSL加密传输协议,安全性较好。

2.默认端口不同:HTTP默认端口为80,HTTPS默认端口是443。在网络模型中,HTTP工作于应用层,而HTTPS工作在传输层。

3.连接过程的不同:HTTP中使用的是TCP三次握手进行连接。HTTPS中使用的是TCP的三次握手加上TLS(安全传输层)四次握手。

4.网站申请流程不同:HTTPS协议需要到CA申请证书,一般免费证书很少,因此需要一定费用。HTTP页面响应速度比HTTPS快。

8、TCP/IP协议(传输层协议)

TCP/IP是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内容包含一系列的用于处理数据通信的协议,如:TCP、UDP、IP等,并采用4层分层模型。

链路层:定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤,网线提供的驱动。

网络层:是整个TCP/IP协议的核心,主要用于将传输的数据进行分组,将分组的数据发送到目标计算机或网络。

传输层:主要负责网络通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。

应用层;主要负责应用程序的协议,例如HTTP协议,FTP协议等。

9、在浏览器地址栏键入URL,按下回车之后会经历以下流程

1.DNS 域名解析:浏览器向DNS服务器请求解析URL中域名所对应的IP。

2.根据IP地址和默认端口80,和服务器建立TCP连接,即三次握手的过程。

3.浏览器发送HTTP请求,浏览器构造一个HTTP报文,每经过一层都会增加一个首部。

4.服务器对浏览器请求作出响应,并把对应的html文本发送给浏览器。

5.浏览器解析(html)渲染页面。

6.释放TCP连接,即四次挥手。12、TCP 三次握手

10、TCP与UDP

TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,流就是不间断的数据。但接收端收到是没有间隔的数据流,比如发送了10次100字节的数据,接收端可能收到连续不间断的1000字节的数据。由于接收端会对收到的报文回复一个确认响应,因此 TCP可以保证可靠性。若发送端未收到确认,对应的数据将会被重新发送。

UDP(User Datagram Protocol用户数据报协议)是一种无连接的传输层协议,但与TCP不同,报文发送之后,无法得知是否安全完整到达,因此不具备可靠性。但UDP更简单,处理速度快。

TCP用于要求实现可靠传输的情况,UDP主要用于对高速传输和实时性有较高要求的通信,例如广播通信。例如在实时通话中,如果使用TCP,数据在传送途中如果丢失会被重发,可能会导致声音大幅度延迟到达。而采用UDP则不会进行重发处理,也就不会有这类问题,即使有部分数据丢失,也支持会影响某一小部分的通话。

11、Socket与TCP/UDP的基本关系

套接字(Socket)是应用程序与TCP/IP协议交互的接口。通过 Socket 接口区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。套接字的连接分为三步:服务器监听,客户端请求,连接确认。

服务器监听:服务端套接字处于等待连接的状态,实时监听网络状态,等待客户端的连接请求。

客户端请求:客户端套接字根据服务端套接字的地址和端口号,向服务端套接字提出连接请求。

连接确认:服务端套接字监听到连接请求时,会响应这个请求,建立一个新的线程,客户端确认后建立连接。此时,服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

12、TCP三次握手

每个TCP段都含有标志位,表示报文的目的。常见的标志位有SYN、ACK、和FIN(Finish),用于建立连接,确认成功的段传输,最后终止连接。

TCP提供面向连接的通信传输。面向连接是指在数据通信开始之前先做好两端之间的准备工作。所谓三次握手是指建立TCP连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行 connect 来触发。

开始时客户端和服务器都是CLOSED状态。

第一次握手客户端向服务器发出连接请求报文,将TCP报文标志位SYN置为1,随机产生一个序号值seq=x,此时,TCP客户端进程进入了SYN-SENT状态,等待服务器端确认。

第二次握手TCP服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。同时,将TCP报文标志位ACK设置为1,SYN设置为1,确认号是 ack=x+1,并随机产生一个序号值seq=y,此时,TCP服务器进程进入了SYN- RCVD状态。

第三次握手TCP客户端收到报文后,还要向服务器进行确认。确认报文的 ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入 ESTABLISHED状态,完成三次握手,客户端与服务器可以进行数据传输。

13、TCP四次挥手

四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。挥手请求可以是客户端,也可以是服务端发起的,我们假设是客户端发起。

第一次挥手客户端发出带有FIN标志的报文段,设置序列号seq,表示客户端不再发送数据,进入FIN-WAIT-1(终止等待1)状态。

第二次挥手服务器端接收到报文后,向客户端返回一个标志位是ACK 的报文,ack设置为seq+1,服务端进入CLOSE-WAIT状态。

第三次挥手客户端收到确认报文后,进入FIN-WAIT-2(终止等待2)状态。当服务器发送完数据后,向客户端发送标志位为FIN的报文,并进入了LAST- ACK(最后确认)状态,等待客户端的确认。

第四次挥手客户端收到服务器的报文后,向服务端发送标志位是ACK的报文,并进入了TIME-WAIT(时间等待)状态,等待一段时间(2MSL)没有收到回复,则证明服务器端已正常关闭,客户端进入CLOSED状态,此时TCP断开连接,完成四次挥手。

14、为什么连接的时候是三次握手,关闭的时候却是四次挥手

服务端收到SYN连接请求后,可直接发送SYN+ACK报文。但是关闭连接时,当服务端收到FIN报文时,仅表示客户端已经没有数据发送了,但服务端可能还有数据发送。因此,需要等待数据发送完成后,服务端才能发送FIN报文给客户端,故需要四步握手。

15、为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)

MSL即最大报文段生存时间,2MSL就是一个发送和一个回复所需的最大时间。TIME_WAIT 状态就是为了防止服务端没收到第四次挥手的ACK报文。服务端在发送第三次挥手的FIN报文后,若没有收到ACK响应,则会重新发送,客户端收到后再次发送第四次挥手的ACK 数据包。

16、为什么不能用两次握手进行连接

为了防止失效的连接请求传送到服务端,而产生了错误。如客户端发出连接请求,若连接请求报文在某些网络节点滞留导致未收到确认,客户端会再重传一次连接请求,服务端收到确认后建立连接,数据传输完毕后释放了连接。此时,若滞留的报文到达服务端,服务端会误认为客户端进行连接请求,在两次握手的情况下,只要服务端发出确认就会建立连接。于是服务端向客户端发出确认报文,客户端会忽略该报文,不发送数据,服务端则会一直处在连接状态等待数据发送。

17、如果已经建立了连接,但是客户端突然出现故障了怎么办

TCP设有保活计时器,服务器每收到一次客户端的请求后都会重新复位这个计时器,若一定时间(两小时)没有收到客户端的数据,服务器会发送探测报文段,之后每75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,关闭连接。

标签:面试题,HTTP,请求,报文,常见,TCP,计算机网络,连接,客户端
From: https://blog.csdn.net/weixin_63170665/article/details/140814426

相关文章

  • 计算机网络第四讲 网络层
    计算机网络第四讲网络层第一节:网络层概述1.网络层概述2.网际协议IP3.小结第二节:IP地址\(\bigstar\bigstar\bigstar\bigstar\bigstar\)1.IP地址2.基本分类IP地址特殊IP全零:本,作为源地址全1:全网广播,作为目的地址网络号:127作为本地换回测试3.......
  • Anaconda常见命令及常见开源镜像汇总
    1、linux命令查看显卡状态nvidia-smi退出top命令键入q即可或按ctrlc解压缩命令unzip删除虚拟环境condaremove-nenv_name--all创建虚拟环境condacreate-nyour_env_namepython=x.x关闭虚拟环境condadeactivate打开虚拟环境condaactivateenv_name创建一......
  • Python面试题:如何使用Django Rest Framework构建RESTful API
    使用DjangoRestFramework(DRF)构建RESTfulAPI是一个常见且强大的方法。以下是一个详细的指南,帮助你从头开始创建一个基本的Django项目,并使用DRF构建一个RESTfulAPI。环境准备安装Django和DjangoRestFramework:pipinstalldjangodjangorestframewor......
  • golang面试题:json包变量不加tag会怎么样?
    问题json包里使用的时候,结构体里的变量不加tag能不能正常转成json里的字段?怎么答如果变量首字母小写,则为private。无论如何不能转,因为取不到反射信息。如果变量首字母大写,则为public。不加tag,可以正常转为json里的字段,json内字段名跟结构体内字段原名一致。加了tag,从str......
  • 大厂linux面试题攻略四之Linux网络服务(二)
     五、Linux网络服务-Apache优化1.请写出工作中常见的Apache优化策略Apache服务器优化是提升网站响应速度和稳定性的重要手段。在工作中,常见的Apache优化策略包括以下几个方面:1.启用压缩技术Gzip压缩:使用Gzip压缩技术可以减少服务器传输的数据量,从而提高网页加载速度。Gzi......
  • DataX 常见问题及解决方式
    1.同步到PG出现invalidbytesequenceforencoding"UTF8":0x00”“invalidbytesequenceforencoding"UTF8":0x00”(注意:若不是0x00则很可能是字符集设置有误),是PostgreSQL独有的错误信息,直接原因是varchar型的字段或变量不接受含有'\0'(也即数值0x00、UTF编码......
  • Java修炼 Java SE 面试题目 (简答) 2024.7.26 22:16
    目录1.基础知识2.控制流和循环3.集合框架4.异常处理5.多线程编程6.输入输出操作7.类和接口8.Lambda表达式和函数式编程9.内存管理和垃圾回收:10.Java虚拟机(JVM):1.基础知识解释Java的面向对象特性,如封装、继承和多态。Java的面向对象特性包括封装(将数据和代码封......
  • 全网最全JAVA面试题,终于整理完了
    一、Java基础1、基础概念与常识Java语言有哪些特点?简单易学(语法简单,上手容易);面向对象(封装,继承,多态);平台无关性(Java虚拟机实现平台无关性);支持多线程(C++语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而Java语言却提供了多线程支持);可靠......
  • 我出一道面试题,看看你能拿 3k 还是 30k!
    大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行4个简单的选择,就能判断出来你的水平是新手(3k)、初级(10k)、中级(15k)还是高级(30k)!请听题: 题目MySQL数据库中的count(1)、count(*)、count(字段)有什么区别? 请回答......
  • MySQL 主从复制,常见的binlog错误及解决方法
    在主从复制架构下,MySQL通过binlog来实现主从数据的一致性。 MySQL主从复制主要有以下步骤1.master将改变记录到binarylog中2.slaveio_thread去请求主库的binlog,并将得到的binlog日志写到relaylog中3.slavesql_thread重做relaylog中的事件 除了作为MySQL主从复制......