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