80、forward和redirect的区别?

地址栏显示: forward url不会发生变化 , redirect url会发生变化

数据共享:forward 可以共享request里的数据,redirect不能共享

效率: forward效率比redirect高

本质上来说: forward转发是服务器的行为,而redirect重定向是客户端的行为

请求次数: forward是一次请求, 而redirect有两次请求。

 

81. 简述tcp与udp的区别?

tcp和udp是OSI模型中的运输层中的协议。tcp提供一种面向连接的、可靠的字节流服务,而udp则常被用于让广播和细节控制交给应用的通信协议。

两者的区别大致如下:

tcp面向连接,udp面向非连接(即发送数据前不需要建立链接)

tcp提供可靠的服务(数据传输),  udp无法保证。​

tcp面向字节流,udp面向报文

tcp数据传输慢, udp数据传输快。

 

补充1: 传输控制协议TCP简介

面向连接的、可靠的,基于字节流服务的传输通信协议

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

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

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

 

补充2:

Java基础七、网络_数据

 (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

  (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。 

 (3) 标志位 TCP Flags

URG:紧急指针标志

ACK: 确认序号有效标志

PSH: push标志,接收方应该尽快将这个报文交给应用层

RST: 重置连接标志

SYN: 同步序号,发起一个新连接

 FIN: finish标志,用于释放连接  (为1表示发送方没有数据发送,并关闭本方数据流。)

 

window: 滑动窗口大小,用于告诉发送端,接收端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。

checksum: 检验和,奇偶校验。校验整个TCP报文头,存储在发送端,由接收端进行校验。

Urgent Pointer:紧急指针。

 

当应用程序通过TCP与另一个程序进行通信时,它会发一个通信请求。双方握手之后,TCP在应用之间建立一个全双工的通信,这个全双工的通信,将占用两个计算机之间的通信线路,直到被一方或者双方关闭为止。

 

82、tcp为什么要三次握手,两次不行吗?

如果才有两次握手,那么只要服务器发出确认数据包就会建立连接,但由于此时客户端并没有相应服务器的请求,

那此时服务器就会一直在等待客户端,这样服务器就白白浪费了一定的资源

若才有三次握手,服务器没有收到客户端的确认,就会知道客户端没有要求建立请求,就不会浪费服务器的资源。

 

问题起因:

Server收到Client的SYN,回复SYN-ACK的时候未收到ACK确认

Server不断重试直到超时,Linux默认等待63秒钟才端口连接。

 

恶意程序向服务器发送SYN报文,发了之后就下线了。服务器需要默认等63秒才会断开连接。这样攻击者可以把服务器连接SYN的队列耗尽,让正常的连接请求不能处理。

 

补充1: 什么是TCP的三次握手?

Java基础七、网络_服务器_02

 

 第一次握手:Client将标志位SYN置为1(表示要发起一个连接),随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

 第二次握手:Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=x+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

 

83、什么是tcp粘包,tcp粘包是如何产生的?

TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包。从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾。

产生原因: 发送端需要等缓冲区满才发送出去,造成粘包。

                   接收端不及时接收缓冲区的包,造成多个包接收。

 

85、get 和post有什么区别?

get请求可以被浏览器缓存

get参数大小有限制,post则没有

post更加安全,get的参数明文显示

 

86、如何实现跨域

实现跨域有以下几种方案

1、服务器端运行跨域,设置CORS等于*

2、在单个接口使用注解 @CrossOrigin 运行跨域

3、使用jsonp跨域