1. TCP建立连接和断开连接的过程?
2. HTTP协议的交互流程? HTTP和HTTPS的差异,SSL的交互流程?
3. TCP的滑动窗口协议有什么用?
4. HTTP协议都有哪些方法?
5. Socket交互的基本流程?
6. 讲讲tcp协议(建连过程,慢启动,滑动窗口,七层模型)?
7. webservice协议(wsdl/soap格式,与restt办议的区别)?
8. 说说Netty线程模型,什么是零拷贝?
9. TCP三次握手、四次挥手?
10. DNS解析过程?
11. TCP如何保证数据的可靠传输的?
三次握手建立连接:
(1) Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,
Client进入SYN_SENT状态,等待Server确认。
(2) Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位
SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给
Client以确认连接请求,Server进入SYN_RCVD状态。
(3) Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位A-
CK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1
,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHE-
D状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
四次挥手断开连接:
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
1. 数据传输结束后,客户端的应用进程发出连接释放报文段,并停止发送数据,客户端进入FIN_WAIT_1状态,
此时客户端依然可以接收服务器发送来的数据。
2. 服务器接收到FIN后,发送一个ACK给客户端,确认序号为收到的序号+1,服务器进入CLOSE_WAIT状态。
客户端收到后进入FIN_WAIT_2状态。
3. 当服务器没有数据要发送时,服务器发送一个FIN报文,此时服务器进入LAST_ACK状态,等待客户端的确认
4. 客户端收到服务器的FIN报文后,给服务器发送一个ACK报文,确认序列号为收到的序号+1。此时客户端进入
TIME_WAIT状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接。
HTTP请求的方法:
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
注意:
1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。
2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。
get 和 post区别
get请求无消息体,只能携带少量数据;post请求有消息体,可以携带大量数据;
get请求将数据放在url地址中 ;post请求将数据放在消息体中;
GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
socket交互
服务器端:
第一步:用指定的端口号和服务器的ip建立一个EndPoint对象;
第二步:建立一个Socket对象;
第三步:用socket对象的Bind()方法绑定EndPoint;
第四步:用socket对象的Listen()方法开始监听;
第五步:接受到客户端的连接,用socket对象的Accept()方法创建新的socket对象用于和请求的客户端进行通信;
第六步:通信结束后一定记得关闭socket;
客户端:
第一步:用指定的端口号和服务器的ip建立一个EndPoint对象;
第二步:建立一个Socket对象;
第三步:用socket对象的Connect()方法以上面建立的EndPoint对象做为参数,向服务器发出连接请求;
第四步:如果连接成功,就用socket对象的Send()方法向服务器发送信息;
第五步:用socket对象的Receive()方法接受服务器发来的信息 ;
第六步:通信结束后一定记得关闭socket;
OSI七层模型(OSI是Open System Interconnect的缩写,意为开放式系统互联):
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
TCP/IP四层模型:
应用层、传输层、网际层、网络接口层。
什么是零拷贝?
操作系统层面:避免在用户态和内核态之间来回拷贝数据
netty层面:指避免数据在用户态中冗余拷贝,提高数据的传输速率
Netty支持单线程、多线程模型、主从多线程模型
1)、单线程模型 Reactor机制中保证每次读写能非阻塞读写
一个线程(单线程)来处理CONNECT事件(Acceptor),一个线程池(多线程)来处理read,一个线程池(多线程)来处理write,那么从Reactor Thread到handler都是异步的,从而IO操作也多线程化
2)、Reactor多线程模型
通过Reactor Thread Pool来提高event的分发能力
3)、Reactor主从模型
reactor模型是时间驱动的,有一个或多个并发输入源,有一个serviceHandler,多个request handler;这个service handler会同步将输入的请求event多路复用的分发给响应的requesthandler,类似生产者消费者模式,而Reactor模式则并没有Queue来做缓冲,每当一个Event输入到Service Handler之后,该Service Handler会立刻的根据不同的Event类型将其分发给对应的Request Handler来处理
netty设计模式?
使用了责任链模式*****
责任链模式的定义:
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。