1.HTTP和WebSocket协议的区别:
HTTP是无状态的短连接,就是经过一次一来一回的即断开连接。无法记录状态,所以引进session还有cookie弥补他无状态的缺陷。在HTTP上实现长连接以前可用AJAX轮询(就是隔一段时间发送ajax来保证数据,但这样会耗费大量资源)。
WebSocket是在H5之后发布的,可以实现双向通信,也是基于TCP的应用层协议。 在他的握手请求中会比HTTP协议多出两行代码:
Upgrade: websocket
Connection: Upgrade
他保证了服务器识别改协议为WebSocket协议。
2.网络由上往下是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
3.TCP和UDP是传输层上的协议、IP是网络层上的协议。 像HTTP和WebSocket都是基于TCP的应用层协议。
4.TCP之上必须有应用层的协议,当然也可以自定义协议,不然无法识别数据。
几个有关于网络面试题的摘抄:
TCP的三次握手:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”
TCP和UDP的区别:
1、TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;
而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
2、也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。
知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,
因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,
即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。