首页 > 技术交流 > 计算机网络的常见知识点汇总

计算机网络的常见知识点汇总

头像
#半情调
编辑于 2021-04-18 09:26:39 APP内打开
赞 13 | 收藏 95 | 回复1 | 浏览2210

1.TCP和UDP的区别?

TCP是一种面向连接的传输层协议,在传输数据之间必须先建立连接,数据传输结束后要释放链接。TCP提供可靠传输,它的可靠性体现在传输数据之前会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传输完断开连接。

UDP是无连接的,在传输数据之前不需要先建立连接,远程主机在收到UDP报文之后,不需要给出任何确认,虽然不可靠,但是高效,可用于即时通信。

2.HTTP和HTTPS的区别?

HTTP是超文本传输协议,设计目的是保证客户机与服务器之间的通信。

HTTP的缺点:

(1)HTTP报文使用明文的方式发送,内容可能会被窃听;

(2)HTTP协议中的请求和响应不会对通信方进行确认,有可能遭遇伪装;

(3)HTTP协议无法证明通信的报文完整性,接收到的内容可能已被篡改。

HTTPS=HTTP+加密+认证+完整性保护。

HTTPS通过SSL证书验证通信方的身份,并为浏览器和服务器之间的通信进行加密。

通常,HTTP直接和TCP通信,当***L时,则HTTP先和SSL通信,再由SSL和TCP通信。

HTTPS的缺点,

(1)除了和TCP连接,发送HTTP请求外,还必须和SSL通信,因此通信慢;

(2)SSL必须进行加密处理,在服务器和客户端都需要进行加密和解密的运算处理,因此更多地消耗硬件资源,导致负载增强;

(3)申请SSL证书需要费用。

3.URL和URI的区别?

URI(Uniform Resource Identifier) 统一资源标识符

URL(Uniform Resource Locator) 统一资源定位符

URI用字符串标识某一互联网资源,而URL表示资源的位置,URL是URI的子集。

4.GET和POST请求的区别?

GET和POST是HTTP协议的两种请求方式,主要区别是:

最大的区别是,请求带参数时,报文格式不同,GET方法的参数放在URL中,POST方法的参数放在请求体中。不带参数的请求,没有区别。

例如:

GET请求

GET /index.php?name=Tom&age=25 HTTP/1.1 
Host: localhost

POST请求

POST /index.php HTTP/1.1 
Host: localhost 
Content-Type: application/x-www-form-urlencoded
name=Tom&age=25

5.OSI参考模型

OSI参考模型分为七层,从低到高依次是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

6.常见的状态码

状态码由3位数字和原因短语组成。

2××成功

200 OK

客户端发来的请求在服务器端被正常处理了。

204 No Content

请求已成功处理,但无资源返回。

3××重定向

301 Moved Parmanently永久性重定向

请求的资源已被分配了新的URL。

302 Found临时重定向

请求的资源被临时定位到新的URL。

304 NotModified 客户端已有缓存

当一个客户端(通常是浏览器)向web服务器发送一个请求,如果web服务器返回304响应,则表示此请求的本地缓存是最新的,可以直接使用。这种方法可以节省带宽,避免重复响应。

4××客户端错误

400 Bad Request

请求报文中存在语法错误,需要修改请求的内容;

404 Not Found

服务器上没有找到请求的资源。

5××服务器错误

500 服务器在执行请求时发生了错误;

503服务器停机或者正在维护。

如果你想更系统、更全面地了解计算机网络的知识,推荐三本写的非常好的书籍,看完肯定能够加深理解。

7.TCP的三次握手

刚开始客户端处于 closed 的状态,服务端处于 listen 状态

第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN(c)。此时客户端处于 SYN_Send 状态。

第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。

第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised 状态。

服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方以建立起了链接。

为什么要进行三次握手?
第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
因此,需要三次握手才能确认双方的接收与发送能力是否正常。

8.TCP的四次挥手

刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求:

第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于CLOSED_WAIT1状态。

第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT2状态。

第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态

服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。

9.DNS的解析过程

DNS:将域名和IP地址的映射关系保存在一个分布式的数据库中。

(1)当浏览器拿到输入的网址后,首先会去浏览器的dns缓存中去查询是否有对应的记录,如果查询到就直接返回IP地址,完成解析;

(2)如果浏览器中没有缓存,就会查看操作系统的缓存;

(3)如果操作系统中没有缓存,去查看本地host文件(windows下的host文件一般位于“C:\Windows\System32\drivers\etc”);

(4)如果本地host文件也没有响应的记录,那就需要求助本地的dns服务器(本地dns服务器的ip地址是114.114.114.114);

(5)找到本地的dns服务器后,它会先查询一遍自己的缓存,若没有记录,再去根域名(.com)服务器查询;

(6)当根域名接收到本地dns的解析后,发现后缀是.com,于是就把负责.com顶级域名的服务器IP地址返回给本地dns;

(7)本地dns拿着返回的ip地址再去找对应的顶级域名服务器,该服务器将负责该域名的权威服务器ip返回回去;

(8)本地dns又拿着ip去找对应的权威服务器,权威服务器最终将对应的主机ip返回给本地dns,至此完成了域名的解析。

10.从URL输入到页面的展现到底发生了什么?

(1)从浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名找到服务器,而是通过IP地址找到对应的服务器,DNS将域名解析为IP地址;

(2)浏览器通过IP地址找到服务器,建立TCP连接,通过三次握手以同步客户端和服务端的序列号和确认号,并交换TCP窗口大小的信息;

(3)TCP三次握手结束后,开始发送HTTP请求;

(4)服务器处理请求,并返回HTTP响应报文;

(5)浏览器拿到响应文本HTML后,解析渲染页面;

(6)当数据传送完毕后,断开TCP连接。

1条回帖

回帖
加载中...
话题 回帖

相关热帖

技术交流近期热帖

热门推荐