计算机网络面试核心

2020-02-25  本文已影响0人  Java全栈攻城狮

一、TCP相关

1.TCP与UDP的区别

tcp协议和udp协议的差别

TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠 不可靠
有序性 有序 无序
速度
应用场合 http ftp smtp 文件传输 语音通话 视频通话

2.TCP简介

1、面向连接的、可靠的、基于字节流的传输层通信协议

2、将应用层的数据流分割成报文段并发送给目标节点的TCP层

3、数据包都有序号,对方收到则发送ACK确认,未收到则重传

4、使用校验和来校验数据在传输过程中是否有误

3.TCP三次握手

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认。

第二次握手:服务器收到SYN包,必须确认客户到的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

4.TCP首次握手的隐患--SYN超时

当客户端发送SYN包后断开连接,服务器会重试直至超时才会断开连接,这会导致恶意攻击占满队列。

针对这种情况,SYN队列满后,通过tcp_syncookies参数回发SYN Cookie,若为正常连接则Client会回发SYN Cookie,直接建立连接。

5.TCP四次挥手

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client确认序号为收到序号+1,Server进入CLOSE_WAIT状态。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给SERVER,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

6.TCP的滑动窗口

1、保证TCP的可靠性(顺序)

2、保证TCP的流量控制特性

二、HTTP相关

1.HTTP主要特点

1、支持客户/服务器模式

2、简单快速

3、灵活

4、无连接(1.1后新增长连接特性KEEP-LIVE)

5、无状态

2.GET和POST的区别

1、Http报文层面:GET将请求信息放在URL,POST放在报文体中

2、数据库层面:GET符合幂等性和安全性,POST不符合

3、其他层面:GET可以被缓存、被存储,而POST不行

3.Cookie和Session的区别

1、Cookie数据存放在客户的浏览器上,Session数据放在服务器上。

2、Session相对于Cookie更安全。

3、若考虑减轻服务器负担,应使用Cookie。

Cookie

1、Cookie是由服务器发给客户端的特殊信息,以文本的形式存放在客户端

2、客户端再次请求的时间,会把Cookie回发

3、服务器接收到后,会解析Cookie生成与客户端相对应的内容。

Session

1、服务器端的机制,在服务器上保存的信息

2、解析客户端请求并操作session id,按需保存状态信息

4.Http和Https的区别

1、Https需要到CA申请证书,Http不需要

2、Https密文传输(非对称加密),Http明文传输

3、连接方式不同,Https默认使用443端口,Http使用80端口

4、Https=Http+加密+认证+完整性保护,较Http安全

SSL

1、为网络通信提供安全及数据完整性的一种安全协议

2、是操作系统对外的API,SSL3.0后更名为TLS

3、采用身份验证和数据加密保证网络通信的安全和数据的完整性

Https数据传输流程

1、浏览器将支持的加密算法信息发送给服务器

2、服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器。

3、浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器。

4、服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器。

5、浏览器解密响应消息,并对消息进行验证,之后进行加密交互数据。

Https真的很安全吗

浏览器默认填充http://,请求需要进行跳转,有被劫持的风险

可以使用HSTS(Http Strict Transport Security)优化

Socket相关

BIO、NIO、AIO的区别

  1. BIO 就是传统的 [java.io]包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调用时可靠的线性顺序。它的有点就是代码比较简单、直观;缺点就是 IO 的效率和扩展性很低,容易成为应用性能瓶颈。
  2. NIO 是 Java 1.4 引入的 java.nio 包,提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层高性能的数据操作方式。
  3. AIO 是 Java 1.7 之后引入的包,是 NIO 的升级版本,提供了异步非堵塞的 IO 操作方式,所以人们叫它 AIO(Asynchronous IO),异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

多路复用器Selector

selector简称多路复用器,它是JAVA NIO编程的基础简单来讲,selector会不断轮询注册在其上的channel,如果某个channel上面发生了读或者写事件,这个channel就会处于就绪状态,会被selector轮询出来,然后通过selectorKey可以获取就绪channel的集合,进行后续的io操作。

一个多路复用器selector可以同时轮询多个channel,由于jdk使用epoll()替代传统的selector实现,所以他并没有最大连接句柄限制,也就意味着只需要一个负责轮询selector的线程就可以接入成千上万的channel.

select和epoll区别

select比epoll效率差的原因:select是轮询,epoll是触发式的,所以效率高。
Select:
1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.
2.操作限制:通过遍历FD_SETSIZE(1024)个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍.
Poll:
1.Socket数量几乎无限制:该模式下的Socket对应的fd列表由一个数组来保存,大小不限(默认4k).
2.操作限制:同Select.
Epoll:
1.Socket数量无限制:同Poll
2.操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询.但是当所有Socket都活跃的时候,这时候所有的callback都被唤醒,会导致资源的竞争.既然都是要处理所有的Socket,那么遍历是最简单最有效的实现方式.

上一篇 下一篇

猜你喜欢

热点阅读