【Java】面试常问知识点(计算机网络方面)

计算机网络

OSI七层模型

 

应用层 (Application):

网络服务与最终用户的一个接口。

协议有:HTTP FTP TFTP SMTP SNMP DNS

表示层(Presentation Layer):

数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)

格式有,JPEG、ASCll、DECOIC、加密格式等

会话层(Session Layer):

建立、管理、终止会话。(在五层模型里面已经合并到了应用层)

对应主机进程,指本地主机与远程主机正在进行的会话

传输层 (Transport):

定义传输数据的协议端口号,以及流控和差错效验。

协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

网络层 (Network):

进行逻辑地址寻址,实现不同网络之间的路径选择。

协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

数据链路层 (Link):

建立逻辑连接、进行硬件地址寻址、差错效验等功能。(由底层网络定义协议)

将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

物理层(Physical Layer):

建立、维护、断开物理连接。(由底层网络定义协议)

TCP/IP(五层)

表示层:解决不同主机的通信的数据格式问题

会话层:建立和管理应用程序之间的通信(连接)(对下层的封装) 方便用户使用,自动收发包 报文

传输层:拆包组包 TCP:保证数据包的完整性 和 以及处理传输过程中可能发生的危险 UDP:发完就完了 报文----拆分成---->包

网络层:路由和地址解析。选择适当的网络节点进行路由。 包 ---->数据帧

数据链路层:控制对物理设备的访问 规定数据如何在不同物理设备上进行传出 并提供数据纠错功能。在不可靠的物理设备上提供可靠传输 数据数据帧

物理层:定义通信的物理设备的规格。网线接口类型,光纤接口类型,传输速率等

因为Socket通信时候用到了IP和端口,仅这两个就表明了它用到了网络层和传输层;而且它无视多台电脑通信的系统差别,所以它涉及了表示层;一般Socket都是基于一个应用程序的,所以会涉及到会话层和应用层。

http和https

http的端口是80,https的端口是443,两个都是应用层协议,

https是架设在SSL/TLS上,并会使用到CA证书,http响应速度比https快,因为http使用了TCP三次握手建立连接,而https出了TCP的三个包还要加上SSL握手的九个包,一共十二个包。

工作流程是这样的:

  1. 当请求https网站时
  2. 会在服务器端产生公钥和私钥
  3. 然后将公钥返回给客户端
  4. 客户端验证是否合法,如果合法会产生一个随机key,不合法会响应https警告
  5. 将随机产生的key隐藏传输给服务器
  6. 服务器会使用私钥进行解密从而获取key值,并使用客户端提供的key去隐藏加密内容
  7. 然后将加密内容发送给客户端
  8. 客户端使用随机生产的key进行解密

TCP为什么是三次握手四次挥手

TCP协议在建立连接时需要进行三次握手,在释放连接时需要进行四次挥手,这是因为TCP协议的设计目标是保证可靠性,防止数据丢失或错误。

在三次握手的过程中,第一次握手是客户端向服务器发送SYN报文,服务器返回SYN+ACK报文,这样服务器就知道了客户端的接收能力和请求连接的意愿;第二次握手是服务器向客户端发送ACK报文,并确认客户端的请求,这样客户端就确认了服务器的接收能力和请求连接的意愿;第三次握手是客户端再次向服务器发送ACK报文,完成了三次握手,建立了连接。这样的设计能够确保双方都能够正确收发数据,从而保证数据传输的可靠性。

在四次挥手的过程中,第一次挥手是客户端发送FIN报文,表示要关闭连接,但客户端可能还有未发送完的数据,所以还需要等待服务器的ACK确认;第二次挥手是服务器发送ACK报文确认客户端的关闭请求,并告知客户端将进入CLOSE_WAIT状态;第三次挥手是服务器发送FIN报文,表示服务器也准备关闭连接,但可能还有未发送完的数据,所以还需要等待客户端的ACK确认;第四次挥手是客户端发送ACK报文确认服务器的关闭请求,表示双方都已关闭连接。这样的设计能够确保数据能够完整的传输,同时避免因为网络拥塞等原因导致数据包丢失。

综上所述,TCP协议采用三次握手和四次挥手的方式进行建立和释放连接,是为了确保数据传输的可靠性和安全性,从而保证数据的正确性。

TCP和UDP的主要特点

UDP的主要特点 UDP是无连接的,发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。 UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。 UDP是面向报文的。UDP对应用层交下来的报文,既不合并也不拆分,而是保留这些报文的边界。UDP 一次交付一个完整的报文。 UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很适合多媒体通信的要求。 UDP支持一对一、一对多、多对一和多对多的交互通信。 UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

TCP是面向连接的运输层协议。

每一条TCP连接只能有两个端点(endpoint),每-条TCP连接只能是点对点的(一对一)。

TCP提供可靠交付的服务。

TCP提供全双工通信。

面向字节流

        1.TCP中的"流”(stream)指的是流入或流出进程的字节序列。

        2.“面向字节流” 的含义是:虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据看成仅仅是一连串无结构的字节流。

为什么需要time_wait?

  1. 可靠的终止TCP连接
  2. 保证让迟来的TCP报文有足够的时间被识别并抛弃

具体来说:

  1. 网络情况不好的时候,如果主动方无TIME_WAIT等待,关闭前个连接后,主动方与被动方又建起新的TCP连接,这时被动方重传或者延时过来的fin包会直接影响新的TCP连接
  2. 同样网络情况不好并且无TIME_WAIT等待,关闭连接后无新连接,当接收到被动方重传或者延时的fin包,给被动方回一个RST包,可能会影响被动方其他的服务连接

Time_wait过多的危害

一个time_wait占用4k大小,过多的占用不少内存

在高并发短连接的TCP服务器上,当服务器处理完主动请求关闭连接,会有大量连接处于time_wait(超时等待)状态,服务器维护每一个连接需要一个socket,也就是每一个连接会占用一个文件描述符,而文件描述符的使用是有上限的,如果持续高并发,会导致一些正常的连接失败

解决方案是修改配置,使得服务器处于time_wait状态下能够被快速回收和重用。(我也没有具体操作过)配置文件:/etc/sysctl.conf;

有一个net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT socket的快速回收

DNS

域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

DNS解析过程

客户端发送一个DNS请求,请问qq你的IP的什么啊,同时会在本地域名服务器(一般是网络服务是临近机房)打声招呼

本地收到请求以后,服务器会有个域名与IP的映射表。如果存在,则会告诉你,如果想访问qq,那么你就访问XX地址。不存在则会去问上级(根域服务器):"老铁,你能告诉我www.qq.com"的IP么

根DNS收到本地DNS请求后,发现是.com,"www.qq.com哟,这个由.com大哥管理,我马上给你它的顶级域名地址,你去问问它就好了"

这个时候,本地DNS跑去问顶级域名服务器,"老哥,能告诉下www.qq.com"的ip地址码",这些顶级域名负责二级域名比如qq.com

顶级域名回复:"小本本记好,我给你www.qq.com区域的权威DNS服务器地址",它会告诉你

本地DNS问权威DNS服务器:"兄弟,能不能告诉我www.qq.com对应IP是啥"

权威DNS服务器查询后将响应的IP地址告诉了本地DNS,本地服务器将IP地址返回给客户端,从而建立连接。

状态码:

2xx (3种)

200 OK:表示从客户端发送给服务器的请求被正常处理并返回;

204 No Content:表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回);

206 Patial Content:表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。

3xx (5种)

301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL;

302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;

301与302的区别:前者是永久移动,后者是临时移动(之后可能还会更改URL)

303 See Other:表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源;

302与303的区别:后者明确表示客户端应当采用GET方式获取资源

304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码;

307 Temporary Redirect:临时重定向,与303有着相同的含义,307会遵照浏览器标准不会从POST变成GET;(不同浏览器可能会出现不同的情况);

4xx (4种)

400 Bad Request:表示请求报文中存在语法错误;

401 Unauthorized:未经许可,需要通过HTTP认证;

403 Forbidden:服务器拒绝该次访问(访问权限出现问题)

404 Not Found:表示服务器上无法找到请求的资源,除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用;

5xx (2种)

500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时;

503 Server Unavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求;

输入一条URL的变化过程

在浏览器中输入URL后,通常会经历以下几个步骤:

  1. DNS解析:浏览器首先会解析URL中的域名部分,将域名转换为服务器IP地址。这个过程需要向DNS服务器发送请求进行域名解析,并缓存已解析的结果以提高速度。

  2. 建立TCP连接:浏览器会使用HTTP协议向服务器发出请求,建立TCP连接。在建立TCP连接时,需要进行三次握手来确保连接的可靠性。

  3. 发送HTTP请求:一旦TCP连接建立,浏览器就会向服务器发送HTTP请求,请求包括请求方法、路径、HTTP版本、请求头等信息。

  4. 服务器处理请求并返回HTTP响应:服务器收到请求后,会根据请求的内容进行处理,然后返回HTTP响应。响应包括状态行、响应头、响应内容等信息。

  5. 浏览器处理响应:浏览器收到响应后,会对响应进行处理,包括解析HTML代码、渲染页面、执行JavaScript脚本等等。其中,HTML代码被解析成DOM树,CSS代码被解析成CSSOM树,然后合并成Render树进行页面布局和绘制。

  6. 断开TCP连接:页面加载完毕后,浏览器会断开与服务器的TCP连接,释放资源。

以上是一个典型的HTTP请求过程,其中还包括一些细节和特殊情况的处理,比如HTTP缓存、HTTPS安全加密等等,不同场景下可能会有些差异。但总体来说,这个过程描述了浏览器访问网站的主流程。

猜你喜欢

转载自blog.csdn.net/weixin_46601559/article/details/130381899