1. Socket 是什么?
Socket 是通信的基石,是位于网络层和应用层之间的抽象层,是一组 Socket API。包含进行网络通信必须的五种信息:连接使用的协议,本地主机的 IP 地址,本地进程的协议端口,远程主机的 IP 地址,远程主机进程的协议端口。
2. Socket 同时支持 TCP 和 UDP 两种传输协议,啥意思呢?
- 当 Socket 使用 TCP 协议通信的时候,Socket 就是 TCP 连接。
- 当 Socket 使用 UDP 协议通信的时候,Socket 就是 UDP 连接。
3.互联网协议如果分五层的话,是哪五层?
五层结构4. HTTP、TCP、IP、Socket 和互联网协议的五层有什么关系?
- HTPP 协议:对应着应用层(主要解决如何包装数据)
- TCP 协议:对应着传输层 (主要解决数据传输)
- IP协议:对应着网络层
- HTTP 是基于 TCP/IP 的
- Socket 是应用层与传输层中间的抽象层,它是一组接口
5. 互联网协议的五层对应我们生活中的那些具体实物?
- 物理层:中继器、双绞线、集线器
- 链路层:以太网交换机
- 网络层:路由器,三层交换机
- 传输层:四层交换机
6. TCP 和 UDP 的区别?
- TCP:面向连接,提供可靠的数据传输,使用数据流模式,速度慢,建立连接时开销大
- UDP:非面向连接,传输不可靠,速度快
7. 简述 TCP 连接建立的三次握手?
- 客户端向服务端发送 SYN(Synchronize)信号,然后等待服务器响应。
- 服务端收到 SYN 信号,服务端回客户端 SYN+ACK(Acknowledgement) 信号
- 客户端收到 SYN+ACK,客户端回服务端 ACK,连接建立成功
8. 简述 TCP 关闭建立的四次挥手?
- 客户端向服务端发送 FIN,然后进入半关闭状态
- 服务端收到 FIN,向客户端发送一个 ACK(不能发送 FIN,因为可能服务端还在传输数据)
- 服务端需要关闭时,想客户端发送 FIN,然后进入半关闭
- 客户端收到服务端的 FIN 信号,发送 ACK 信号。然后(经过时间等待计时器设置的时间2MSL后)双方关闭连接
9. HTTP 和 HTTPS 的区别?
- HTTP 是超文本传输协议,信息是明文传输的;HTTPS 是具有安全性的 SSL 加密传输协议。
- HTTP 占用是 80 端口,HTTPS 占用的 443 端口
- HTTP 是无状态的
10. Socket 和 HTTP 的区别?
-
虽然说 Socket 和 HTTP 都是基于 TCP,单通常情况下 Socket 连接就是 TCP 连接,一旦建立了 Socket 连接,双方就可以相互发送数据,直到断开为止。
-
而 HTTP 他的连接方式是请求 → 响应,不仅要在请求的时候建立好连接,而且要客户端向服务器发送请求后,服务器才能回复数据
11. 为什么 Scoket 都是长连接了还要心跳机制?
-
客户端
需要通过心跳
检查服务端
有木有因为负载过重或者其他原因
断开了 Socket - 服务端也一样,会维护一个 Socket 的心跳间隔,当约定时间内没有收到客户端发来的心跳,就知道 Socket 已经失效,然后主动断开 Socket
- 还有一个主要原因而国内的运营商一般NAT超时的时间为5分钟,所以通常我们心跳设置的时间间隔为3-5分钟
12. 为什么有心跳机制了,还要 Pingpong 机制呢?
-
很多小伙伴可能又会感觉到疑惑了,那么我们在这心跳间隔的3-5分钟如果连接假在线(例如在地铁电梯这种环境下)。那么我们岂不是无法保证消息的即时性么?这显然是我们无法接受的,所以业内的解决方案是采用双向的PingPong机制。
-
当服务端发出一个Ping,客户端没有在约定的时间内返回响应的ack,则认为客户端已经不在线,这时我们Server端会主动断开Scoket连接,并且改由APNS推送的方式发送消息。
同样的是,当客户端去发送一个消息,因为我们迟迟无法收到服务端的响应ack包,则表明客户端或者服务端已不在线,我们也会显示消息发送失败,并且断开Scoket连接。
网友评论