1、tcp和udp的区别
TCP是面向连接的安全的流传输控制协议,确保数据的安全性,有验证重发的机制,所以不会出现求实或者乱序。
UDP是面向无连接的不安全的数据报服务,它不对数据报进行检查与修改,无需等待对方应答,会出现分组丢失,重复乱序,但是具有很好的实时性。
UDP段结构比TCP段结构简单,所以网络开销也比较小。
TCP安全是因为他通过三次握手创建连接,四次挥手断开连接,他是点对点的连接而UDP相当于是广播,所以是不安全的
2、tcp连接建立的时候3次握手,断开连接的4次握手的具体过程
三次握手:
首先服务器端新建套接字,绑定地址信息后开始监听,进入LISTEN状态。客户端新建套接字绑定地址信息后调用connect连接,发送SYN连接请求并且进入SYN_SENT状态,服务器端接收到后发送SYN以及ACK确认报文,并且进入SYN_RCVD状态,客户端接收到后返回ACK确认报文,并且进入ESTABLISHED状态,服务器端接收到客户端的ACK进入ESTABLISHED,至此连接完成。
四次握手:
首先客户端调用close向服务器端发送FIN结束报文,进入FIN_WAIT1。服务器端收到后会发送ACK确认报文,并且进入CLOSE_WAIT状态,这个时候服务器端是可以向客户端发送没有发送完的数据的。客户端接收到了服务器端的ACK确认报文后,进入FIN_WAIT_2状态。当服务器端的数据发送完毕后,调用close向客户端发送FIN结束报文,并且进入LAST_FIN状态,客户端接收到后,发送ACK确认报文进入TIME_WAIT状态等待2MSL后关闭,服务器端接收到了ACK确认报文后,关闭连接
3、什么是同步?什么是异步?
同步:当有多个任务进行的时候,这些任务必须逐个执行,一个任务的执行会导致整个流程等待,这些任务没有办法并发执行。
异步:当有多个任务进行的时候,这些任务可以并发执行,一个任务的执行不会导致整个流程的暂时等待。
4、.什么是阻塞?什么是非阻塞?
阻塞:当某个事件或者任务在执行的过程中,发出一个请求操作,但是由于该请求操作条件不满足,那么就会一直等待,直至条件满足。
非阻塞:当某个事件或者任务在执行的过程中,发出一个请求操作,如果该请求操作条件不满足,会立即返回一个标志信息告知条件不满足不会一直等待。
5、什么是阻塞IO?什么是非阻塞IO?
完整的IO请求包括两部分
1)查看数据是否就绪;
2)进行数据拷贝(内核将数据拷贝到用户线程)
阻塞IO:当线程发起一个IO请求时,会先去查看数据是否已经就绪,如果没有就绪,就会一直等待,直到数据就绪。
非阻塞IO:当线程发起一个IO请求时,会先去查看数据是否已经就绪,如果没有就绪,就会返回一个标志信息,告诉用户线程数据没有就绪,不会一直在那儿等待。
阻塞IO和非阻塞IO关键在于第一步。查看数据就绪是如何处理的。
6、什么是同步IO?什么是异步IO?
同步IO:当用户发出IO请求时,如果数据没有就绪,需要用户线程会这是内核不停的去轮询是否达就绪,当数据就绪后,再将数据从内核拷贝到用户线程。
异步IO:只有发送IO请求是用户线程来进行的,IO的两个操作都是由内核去自动完成的,然后发送通知告知用户线程操作已经完成。
同步IO和异步IO主要区别在于第二步是由用户线程完成还是内核完成
7、 IO模型有几种?分别是什么?
8、 Reactor和Proactor IO设计模式是什么?
9、Java NIO 中的Buffer是什么?如何使用?
10、Nio buffer 的内部结构是什么?
11、Java NIO 中的 Channel是什么?有什么特点?
12、Java NIO中的Selector是什么?
13、简单讲一下文件IO中的Path和Files
14、select、poll和epoll的区别
15、网络编程中设计并发服务器,使用多进程 与 多线程 ,请问有什么区别?
15、网络编程的一般步骤
16、TCP的全称是?
17、UDP的全称是?
18、请说出TCP和UDP的区别?
19、TCP为什么不是两次连接?而是三次握手?
20、说明socket是什么?
21、为什么需要端口?端口是真实存在的还是虚拟的概念?
22、Java中,端口使用两个字节表示,可以表示多少个端口? UDP和TCP端口是各自独立的吗?
23、URL类有什么作用?
24、基于TCP的Socket网络编程的主要步骤是什么?
25、【上机】写出建立TCP服务器ServerSocket的代码。并说明accept方法有什么特点?
26、【上机】写出建立TCP客户端Socket的代码。并说明建立Socket后,通过什么方法Socket获得流对象?
27、基于UDP的Socket网络编程的主要步骤是什么?
28、【上机】使用UDP的方式,完成对象的传递。
29、HTTPClient相关问题
30、NIO 和传统 BIO区别是什么?
31、Java NIO 的几个核心组成部分是什么?作用分别是什么?
32、简单说一下http协议?
33、http协议下客户端请求报文是什么?
34、描述一下http协议服务器响应报文有哪些?
35、HTTP协议中常用的请求方法有哪些 50
36、常见的HTTP状态码有哪些
37、HTTP 协议中content-type指的是什么?
38、网络传输协议本质和作用是什么?
39、可以实现一个简单的网络协议吗?
TCP/IP协议
TCP/IP协议模型图:
如图:TCP/IP模型一共分为了四层
应用层、传输层、网络层、物理层。
网络层用到的是我们的IP协议,
传输层用到的则是TCP和UDP协议
TCP的三次握手
首先,服务器端新建套接字,绑定地址信息后开始监听,进入LISTEN状态。客户端新建套接字绑定地址信息后调用connect请求SYN,进入SYN_SENT状态等待服务器的确认。服务端如果监听到了就会把连接放入内核等待队列中,并向客户端发送SYN以及ACK确认号,进入SYN_RCVD状态。客户端收到SYN+ACK报文后向服务端发送确认ACK报文后进入ESTABLSHED状态, 开始读写数据。服务端一旦收到客户端的确认报文,就进入ESTABLISHED状态,就可以进行读写数据了 。
TCP的四次挥手
当客户端主动调用close时,会向服务端发送FIN结束报文段,进入FIN_WAIT1状态,服务器端接收到FIN报文后,会返回确认报文ACK并进入CLOSE_WAIT状态, 此时如果服务端有数据要发送的话,客户端依然需要接收 。 客户端收到服务器对结束报文段的确认,就会进入到FIN_WAIT2状态,开始等待服务器的结束报文段 。服务器端数据发送完毕后,会调用close关闭连接,向客户端发送结束报文FIN包,此时服务器进入LAST_FIN状态,等待最后一个ACK,当客户端接收到了服务器端的结束报文,会进入TIME_WAIT,并且发送ACK确认报文, 服务器收到了对结束报文段确认的ACK,进入CLOSED状态,断开连接而客户端要等待2MSL的时间,才会进入到CLOSED状态
HTTP和HTTPS
HTTP和HTTPS的不同在于HTTP使用的是明文传输数据,而HTTPS则是在HTTP外面加上了一层TSL/SSL协议加密。
HTTPS的加密涉及到两种加密方式,一种是非对称加密,另外一种是对称加密。
对称加密的传输速度比非对称加密的传输速度快很多,所以HTTPS传输数据采用的是对称加密。非对称加密用于客户端与服务器端协商密钥的时候对密钥的加密,但是非对称加密的公钥不可能用明文发送给客户端,所以就引入了 数字证书 ,数字证书由CA认证机构签发。
的加密涉及到两种加密方式,一种是非对称加密,另外一种是对称加密。
对称加密的传输速度比非对称加密的传输速度快很多,所以HTTPS传输数据采用的是对称加密。非对称加密用于客户端与服务器端协商密钥的时候对密钥的加密,但是非对称加密的公钥不可能用明文发送给客户端,所以就引入了 数字证书 ,数字证书由CA认证机构签发。
CA证书其实就是,服务器端将自己的公钥和证书一起给CA机申请,CA会用自己的私钥对其内容进行加密,申请通过之后,就会返回给申请者加密后的证书,而CA会向所有人公布自己的公钥,所以服务器端只需要向客户端发送加密后的证书,如果客户端能够解密,则说明是受信任的,不能够解密则说明可能被篡改了。CA机构就好比是贷款担保人。