秋招面试突击之-------Java网络通信篇

秋招面试突击之-------Java网络通信篇

一、TCP与UDP,三次握手,为什么两次不行

  • TCP(Transfer Control Protocol):面向连接的、可靠的通信协议;点对点、高可靠;系统开销大,效率比较低

三次握手、四次挥手

  1. 第一次,客户端向服务端发送SYN包,随后进入SYN_SENT 状态;

  2. 第二次,服务端收到SYN包并确认,回复一个SYN包和一个ACK包(ACK= SYN客户端 + 1),随后进入SYN_RESV状态

  3. 客户端收到SYN + ACK;向服务器发送ACK确认收到后就成功建立连接;完成三次握手;

只有两次的话如果发生丢包行为的话会让客户端认为连接没有建立成功,而服务段则认为连接建立成功,就疯狂发数据给客户端,然而客户端并不会理会这些数据;

四次挥手:由一端发起通道关闭通知,另一端收到后回复一个数据包;同时发送一个连接关闭数据包,最后一次由发送端发送确认关闭连接数据包给接收端,接受端收到确认消息后直接关闭

  • UDP(User Datagram Protocol) :无连接,不可靠、传输层协议,效率快,不可靠;可以进行广播发送;消息可能丢失;

二、Java 有哪几种IO模型,分别有什么区别

  • BIO:同步阻塞IO,联建建立始终发生在一条主 线程中,由该线程去处理所有的IO,如果某些方法调用没有获取到数据,则会一直阻塞等待数据的读取,例如socket的监听accept过程,没有连接建立是会一直阻塞等待;有连接建立之后就会将新开线程去处理这个连接的IO操作!这样会遇到一个问题就是;客户端数量过多的时候会产生很多线程,资源占用严重

  • NIO:同步非阻塞IO,同样发生在同一个线程中,只不过调用一些关键代码不会阻塞,这样一个线程及可以处理多个请求或者连接;客户端发送的请求会被注册到多路复用器selector上;多路复用器轮询到有IO请求就处理;

实现原理:使用一个集合存储已建立的连接对象,然后不断轮询判断这些连接有没有需要处理的IO,轮询完IO后继续轮询连接请求;有请求连接则加入集合,然后继续判断集合中所有连接是否有IO请求处理;显然,每次都遍历全部连接对象会浪费资源同时又效率低下,从而引申出多路复用器selector;下面会单独介绍!

  • AIO,异步非阻塞,显然,他的作用就是为了优化NIO单线程处理,将任务放到异步线程中去执行;

区别

引申------>netty,将在netty篇介绍,这题相当于入门;

三、NIO的几个核心组件,分别作用

  • Channel:类似于流,每个channel对应一个缓存区,客户端请求数据先存储到buffer中,buffer底层数个数组;然后通过channel提交注册到selector;
  • Selector:根据channel发生的读写事件,交给某一个空闲线程处理;
  • Buffer:可读可写的底层数组;

四、select、poll、epoll有什么区别?

操作系统底层知识:

用户空间、内核空间:操作系统为了保护系统安全,将内核划分为两个部分:用户态和内核态,用户态不能直接访问计算机底层和硬件,必须通过内核做桥接访问调用;

文件描述符:形式上是一个整数,实际上是一个索引值,执行内核中OS为每个进程维护的进程打开的文件记录表,当程序创建或打开一个文件时就会返回一个文件描述符FD;

其实就是Selector实现的核心;实现IO多路复用;无非就是掉用c++的一下Api

  • select机制:维护一个fd_set,扫描所有fd,将其从用户空间复制到内核空间,有内核空间去激活socket连接,每次复制数据太多占用资源多,从而有了一个改进版
  • poll机制:将fd_set进行优化,集合大小突破了Os的限制;通过链表实现;只是对select做了改进,核心问题还是没有解决;
  • epoll(event poll)事件驱动机制:不在扫描所有的FD,只将用户关系的fd存放到一个事件表中;减少用户空间与内核空间需要拷贝的数据;

三者区别:

五、HTTP和HTTPS的区别

  • Http:互联网上应用最广泛的网络通信协议,基于tcp协议,浏览器工作更为高效,减少网络传输
  • Https:http的加强版,http+socket;在http的基础上增加了一系列的安全机制,保证数据传输安全;同时对访问者增加了验证机制,是目前架构最安全的解决方案。

http的连接是简单无状态的,https是有状态的,经过证书加密;http是免费的,但是https需要申请证书,但是证书收费;

传输协议不同,使用的端口也不一样,80、443;

https 的缺点:握手费时,影响服务响应时间以及吞吐量;另外证书体系并不是完全安全的,在面对DDOS攻击时几乎起不到任何作用;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值