SSL是什么协议,它与普通的Socket有什么差别?
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
SSLSocket通信是对SOCKET通信的的拓展。在socket通信的基础上添加了一层安全性保护,提供了更高的安全性,包括身份验证、数据加密以及完整性验证。
Socket 是对 TCP/IP 协议的封装,Socket 只是个接口不是协议,通过 Socket 我们才能使用 TCP/IP 协议,除了 TCP,也可以使用 UDP 协议来传递数据。socket位于网络层和传输层之间
平时我们用tcpdump抓数据,那个包是在哪一层?
抓取的是网络层的数据包
TCP和UDP的区别?
- TCP是面向连接的;UDP是无连接的,即发送数据之前不需要建立连接
- TCP提供可靠的服务;UDP不保证可靠交付
- TCP面向字节流,把数据看成一连串无结构的字节流;UDP是面向报文的
- TCP有拥塞控制;UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送效率降低(对实时应用很有用,如实时视频会议等)
- 每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的通信方式
TCP和UDP的分别适用哪些场景?
TCP适用于稳定的应用场景,它会保证数据的正确性和顺序,所以一般的浏览网页,接口访问都使用的是TCP传输,所以才会有三次握手保证连接的稳定性,而UDP是一种结构简单的协议,不会考虑丢包,建立连接等。优点在于数据传输很快,所以适合于直播、游戏等场景
DNS是基于TCP还是UDP?
DNS同时占有UDP和TCP端口
DNS在进行区域传输的时候使用TCP协议,其他时候则使用UDP协议,比如域名解析
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。
请简单讲下TCP的三次握手?
三次握手机制:
- 第一次握手:客户端请求建立连接,向服务端发送一个同步报文(SYN=1),同时选择一个随机数 seq = x 作为初始序列号,并进入SYN_SENT状态,等待服务器确认。
- 第二次握手::服务端收到连接请求报文后,如果同意建立连接,则向客户端发送同步确认报文(SYN=1,ACK=1),确认号为 ack = x + 1,同时选择一个随机数 seq = y 作为初始序列号,此时服务器进入SYN_RECV状态。
- 第三次握手:客户端收到服务端的确认后,向服务端发送一个确认报文(ACK=1),确认号为 ack = y + 1,序列号为 seq = x + 1,客户端和服务器进入ESTABLISHED状态,完成三次握手。
理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
为什么不能两次握手建立连接?
3次握手完成了两个重要的功能,既要双方做好发送数据的准备工作,也要双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认,把三次握手改成两次的话,可能会发生死锁,比如:A与B之间的通信,A向B发送一个连接请求,B收到了这个请求,并发送了确认应答,此时已是两次握手,B认为已经成功建立,但是B发给A的应答在传输中可能会丢失,A无法知道B是否真的准备好了,不知道B建立什么样的序列号,会怀疑B是否收到了请求,A会认为没连接成功,忽略B,B请求超时后,重复发送同样的,就形成了死锁