1.http响应代码301和302代表什么?有什么区别?
301:永久重定向
302:暂时重定向
它们的区别是:301对搜索引擎优化SEO更加有利;302有被提示为网络拦截的风险。
2.简述TCP和UDP的区别?
TCP和UDP是OSI模型中的传输层中协议。TCP提供可靠的通信传输。而UDP则常被用于让广播和细节控制交给应用的通信传输。
tcp面向连接。UDP面向非连接即发送数据前不需要建立连接
TCP提供可靠的服务(数据传输),UDP无法保证
TCP面向字节流,UDP面向报文;
TCP数据传输慢,UDP数据传输快;
3.TCP为什么要三次握手,两次不行吗?为什么?
SYN--请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1
ACK--确认号是否有效,一般置为1
RST---对方要求重新建立连接
FIN---希望断开连接
PSH---提示接收端应用程立即从TCP缓冲区数据都读走
第一次握手:建立连接时,客户端发送SYN包(SYN=j)到服务器,并进入SYN_SENT状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
假如只进行两次握手,客户端发送连接请求后,会等待服务器的应答。但是会出现的问题说的是,假如客户端的SYN迟迟美誉到达服务器端。此时客户端超时后,会重新发送一次连接,加入重发的这次服务器端收到了。且应答客户端了,建立连接了。但是建立连接后,第一个SYN也到达服务端了,这时服务端会认为这是一个新连接,会再给客户端发送一个ACK,这个ACK当然会被客户端丢弃。但是此时服务器端已经为这个连接分配资源类,而且服务器端会一直维持这个资源,会造成浪费。如果是三次握手,服务器端会等待客户端的第三次握手,如果三次握手迟迟不来,服务器端会释放相关资源。两次握手的问题在于服务器端不知道SYN的有效性
4.说一下TCP粘包是怎么产生的?
TCP粘包可能发生在发送端或者接收端,分别来看两端各种产生粘包的原因:
发送端粘包:发送端需要等缓冲区满才发送出去,造成粘包
接收方粘包:接收方不及时接收缓冲区的包,造成多个包接收
5.OSI的七层模型都有哪些?
物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
数据链路层:负责建立和管理节点间的链路
网络层:通过路由选择算法,为报文或者分组通过通信子网选择最适当的路径、
传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输
会话层:向两个实体的表示层提供建立和使用连接的方法
表示层:处理用户信息的表示问题。如编码、数据格式转换和加密解密等
应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。
6.get和post请求有哪些区别?
get请求被浏览器主动缓存,而post不会
get传递参数有大小限制,而post没有
post参数传输更加安全,get的参数会明文限制在url上,post不会。
7.说一下JSONP实现原理?
jsonp:JSON with Padding,它是利用script标签的src连接可以访问不同源的特性,加载远程返回的”JS函数“来执行