计算机网络的常见知识点汇总
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连接。
#学习路径#