java网络面试题

1 网络协议概念
在计算机网络要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式、是否需要发送一个应答信息。这些规则被称为网络协议。

2 协议
TCP/IP四层:网络接口层,网际层,运输层,应用层
OSI七层模型:物理层 数据链路层 网络层 运输层 会话层 表示层 应用层
五层网络模型:物理层 数据链路层 网络层 运输层 应用层

3 运输层的两种协议
TCP:transport controller protocal:传输控制协议,提供面向连接的,可靠的数据传输
UDP:user data protocal:用户数据协议,提供无连接的,尽最大努力的数据传输

4 tcp vs udp

  • 可靠性:tcp可靠,使用流量控制和拥塞控制;udp不可靠,不使用…
  • 是否连接:tcp面向连接,tcp无连接
  • 连接对象个数:tcp只能1对1,udp可以1对1,1对多,多对1
  • 传输方式:tcp面向字节,udp面向报文
  • 应用场景:tcp适用于要求可靠传输的情景如文件传输,udp适合即时通讯,如直播,视频通话

5 各层的作用

  • 物理层:屏蔽底层网络设备和介质的传输差别,实现相邻计算机节点之间比特流的透明传送
  • 数据链路层:实现节点间数据的传输①将网络层的数据报封装成帧②差错控制,流量检测,MAC协议,ARP协议;
  • 网络层:负责源主机到目的主机数据分组packet的路由与转发,IP协议和ICMP协议
  • 传输层:负责源到目的(端到端)的进程间的完整的报文传输,TCP/UDP协议
  • 应用层:是通过主机间的交互来支持各种网络应用,ftp,http,smtp协议

补充:DNS协议在OSI的会话层上

6 计算网络性能指标

带宽 速率 时延 时延带宽积 吞吐量 利用率 往返时间

7 TCP的三次握手四次挥手

  • TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接,所谓的“连接”
  • 一个TCP连接通常分为三个阶段:连接、数据传输、退出(关闭)。通过三次握手建立一个链接,通过四次挥手来关闭一个连接
  • 三次握手的本质是确认通信双方收发数据的能力,第一次客户端向服务器端发送SYN报文;第二次服务器端接收成功,向客户端回复;第三次客户端收到服务器端回复信息再次发送ack报文,这样服务器端就知道客户端收到了它发送的报文信息,链接建立成功
  • 四次挥手:①当数据传输完毕后客户端向服务器发送FIN报文断开连接请求②服务器端收到请求FIN报文后并立刻回复ack报文,但此时可能还有数据还没发送完,没有立刻断开连接③当服务器最后数据发送完毕,在此对客户端回复FIN报文④客户端收到回复后向服务器端发送ack报文,服务器端收到确认信息后断开连接
  • 为什么TCP连接的时候是3次?2次不可以吗?因为要考虑丢包问题,第二次握手期间服务器的确认信息发生丢包那么就无法链接成功,反之,如果是三次握手,如果发生丢包,那就意味着服务器端收不到客户端的确认信息,会再次发送
  • 因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次)。

8 Http协议

  • 超文本传输协议,用于规范两个节点间传递类似于音频,文字,图片等数据的格式与规范

9 https vs http

  • 传输格式:https是密文传输,http是明文传输
  • https端口为443,http端口80
  • https安全性强,http弱
  • 资源开销https更多,需要做一系列加密解密验证等操作,http小

10 常见的状态码

  • 1XX:表示服务器正在处理请求;
  • 2XX:表示服务器处理请求成功;如200,请求成功
  • 3XX:表示重定向,需要附加请求操作;如301永久重定向,302临时重定向
  • 4XX:客户端错误,服务器无法处理客户端请求①403 Forbidden,使用springsecurity开发后台权限安全系统,访问没有权限的url会报这种错误,进而被异常解析器处理返回给用户提示②404就表示用户请求的页面并不存在③400请求参数出现问题
  • 5XX:服务器错误,服务处理客户端请求错误①500表示服务器处理请求出错②501表示服务器不支持当前请求③503表示服务器正在维护,无法处理请求④502这个错误是由于服务器压力过大,不能及时处理client的请求导致服务器响应超时而抛出的错误

11 对称性加密 vs 非对称性加密

  • 对象性加密是指加密和解密用同一套密钥,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方,一但泄露就会引发安全问题
  • 对称性加密是指加密和解密用不同的密钥,加密用公钥,解密用私钥,其中公钥是对外开放的,但私钥是绝对保密的,发送放获取你的公钥用公钥加密,接收方接收发送方传输密文回复信息,调用自己的私钥进行解密,这种方式安全性高,但额外开销比较大

12从浏览器输入url到页面加载完毕了什么

  • 输入网址并点击回车后,浏览器首先查验本地缓存中是否有相关url,如果没有就进行下一步
  • 请求域名经dns服务器解析得到请求的ip地址
  • 在域名解析之后,浏览器向服务器发起了http请求(tcp连接),三次握手建立tcp连接
  • 服务器收到浏览器发送的请求信息,处理请求,返回讲处理结果封装为一个response(response由响应头和响应体组成)
  • 浏览器收到服务器发送的响应头和响应体,解析数据,进行客户端渲染,展示给用户。
  • 客户端服务器通过四次挥手与服务器断开连接

13 VMware虚拟机三种链接方式

  • 桥接模式:可以和外网双向通信,虚拟机拥有自己独立的内网ip,这就容易造成ip地址冲突
  • NAT模式:可与向外网发送信息但不能接收,,该模式可以虚拟出一个独立的ip地址,不会占用内网地址,不用担心ip地址冲突
  • 主机模式,创建完全包含在主机中的专用网络,该模式的虚拟网络适配器仅对主机可见,不能与外网通信

详情参考:VMWare虚拟机三种网络形式

14 计算机网络的性能指标

  • 速率:数据传输速率,单位有:b/s(或bps)、kb/s、Mb/s、Gb/s
  • 时延:数据(报文,分组,甚至是比特)从网络的一段传到另一端所需要的时间,时延又分为发送时延,传输时延,处理时延,排队时延
  • 带宽:网络的“带宽”通常是数字信道所能传送的“最高数据率”
  • 时延带宽积:传播时延 * 带宽;链路的时延带宽积又称为以比特为单位的链路长度,指该链路容纳数据(比特)的能力
  • 往返时间RTT:网络通信是双向的
  • 吞吐量:一定时间内,通过某个网络(信道,接口)的实际数据量,受网络额定速率和带宽的影响
  • 利用率:类似于车道利用率,一定时间通过的车辆(数据)越多该道路(信道)的利用率越高,但相应的时延(如堵车)也会大大增加

15 交换机与路由器的异同:

  • 路由器工作在第三层,工作方式是寻址转发,依靠ip,路由器内部维护一份路由表,根据路由表和路由算法计算转发地址,路由器用于连接局域网和外网,每一个路由器与其之下连接的设备,构成一个局域网
  • 交换机工作在第二层,工作方式是过滤和转发,依靠mac,里面存放着和它相连的所有设备的MAC地址,它会根据收到的数据帧的首部信息内的目的MAC地址在自己的表中查找,如果有就转发,没有就放弃,交换机工作在路由器之下,就是也就是交换机工作在局域网内交换机用于局域网内网的数据转发
  • 关系总结:我们每个人相当于主机,路由器相当于快递员,宿管大爷相当于交换机,学校是一个局域网,快递员根据学校地址(IP)把包裹送到学校,再根据公寓号(子网IP)把快递交给这个公寓的宿管大爷,宿管大爷根据你的名字(MAC)交给你

16 Socket
①定义
socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭),这些函数我们在后面进行介绍。既然socket是“open—write/read—close”模式的一种实现,那么socket就提供了这些操作对应的函数接口

②位置
在这里插入图片描述
Socket是TCP/IP协议与应用层间的的中间软件抽象层,是一种外观模式类型的设计,它把复杂的TCP/IP协议族隐藏在Socket接口后面

③用法
先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束

④计算机进程间如何通信
首要解决的问题是如何唯一标识一个进程,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,关系如下

  • 一个ip地址标识一台主机,一个主机端口最多65536个 => 主机最多同时开启65536个进程
  • 应用程序(可以是不同的协议)的确可以配置同一端口,进程的概念可以简述为运行中的程序,但一个端口最多运行一个进程,最典型的是,你在开发过程中,你的本地有项目都是默认采用的8080,那么当你启动第一个项目后(第一个进程产生),第二个进程就无法打开了而且提示端口已被占用

17 ip地址有哪些
在这里插入图片描述

18 特殊的ip地址

NetIDHOSTID作为ip分组的源地址作为ip分组的目的地址用途
全0全0可以不可以在本网内表示一个主机,在路由表中表示默认(表示整个Internet)路由
全0host-id不可以可以表示本网内某个特定主机
全1全1不可以可以本网广播地址,路由器不转发
net-id全0不可以不可以网络地址,表示一个网络
net-id全1不可以可以对特定网络的主机进行广播
127非全0或全1的任何数可以可以用作本地软件测试的换回地址

A类网络的网络号只有126(2^7 -2)个可用,其中全0,即0.x.x.x代表this,意思是本网络,全1即127.x.x.x是用作本地软件的环回测试,其中如果主机将 127.0.0.1环回地址作为目的地址发送数据,那么该数据不会传到任何的网络上,而是被本机中相应的软件处理,该地址根本不是一个网络地址。总之,以127.0.0.1作为目的地址发送数据相当于让发送的主机处理相关数据,常见于Client和Server(采用的是虚拟主机技术)都由一台主机担当的情况,通用同样A类网络的最大主机数为(224-2),全0的主机号字段表示的是该IP地址是本主机所连接的单个网络地址,例如5.6.7.8主机所在的网络地址即5.0.0.0;1表示所有的,全1的主机号字段就表示该网络的所有主机。例如5.255.255.255表示5.0.0.0网络的所有主机

同样B,C网络号分别为(214-1)和(221-1)因为B,C的网络前几位分别为固定的01和110,所以不可能出现全0或者全1的情况,但是B类的网络128.0.0.0是和C类网络中192.0.0.0也是不可指派的

19 子网划分
意义:总的来说就是网络号+主机号这种划分方式不够灵活,所以产生了以下问题

  • ip地址利用率低下,会很快将网络号分配完
  • 不好用,机构如果想要开辟新的网络还必须去申请相关机构

解决:采用了 网络号(NetID) – 高位比特;子网号(SubID) – 原网络主机号部分比特;主机号(HostID) – 低位比特

确定子网位数:子网掩码
A网的默认子网掩码为:255.0.0.0
B网的默认子网掩码为:255.255.0.0
C网的默认子网掩码为:255.255.255.0
借用3比特划分子网的B网的子网掩码为:255.255.224.0

总之:A,B,C网络都有默认的子网掩码,凡是标准的ABCDE网络子网位数都是0,我们知道了ip地址(网络类型)和子网掩码,即可判断子网掩码的位数。同时,子网与子网掩码进行与运算即可得知子网的地址(本质网络中网络岛的地址,代表一个网络)

例题1: 子网201.2.3.0,255.255.255.0,划分为等长的4个子网

子网ip是201.2.3.0,子网掩码是255.255.255.0 => 这是一个标准的C类网络,前24位是网络号,后8位是主机号,划分四个子网,意味着从后8位host-id中取出前两位作为子网号,意味着后8位host-id有以下四种情况11xxxxxx,10xxxxxx,,01xxxxxx,00xxxxxx,而子网掩码是255.255.255.192,也就是在C网掩码的基础上再掩盖住子网的前两位,图解如下
在这里插入图片描述

例题2:目的IP地址:172.32.1.112子网掩码:255.255.254.0,求子网地址,子网地址范围

将IP分组的目的IP地址与子网掩码按位与运算,提取子网地址:172.32.0.0
该子网前16位是网络位,7位是子网位,余下的9位范围从全0到全1 :172.32.0.0~172.32.1.255
子网范围内172.32.0.0是不能分配的,因为这个ip的意义是表示网络号为172.32的这个网络,所以子网可分配地址范围:172.32.0.1~172.32.1.254
子网广播地址:172.32.1.255

20 内网与外网的概念
内、外网是相对于防火墙而言的,在防火墙内部叫做内网,反之就是外网。在一定程度上外网等同于公网,内网等同于私网,公网地址是指在因特网上直接可达的地址,如果你有一个公网地址,那就意味着你不但能访问别人,还能被人访问。公网地址是架设各种服务器必不可少的条件,公网的分类如下

  • A类:10.0.0.0到127.255.255.255主要分配给大量主机而局域网网络数量较少的大型网络
  • B类:128.0.0.0到191.255.255.255一般用于国际性大公司和政府机构
  • C类:192.0.0.0到223.255.255.255用于一般小公司校园网研究机构等
  • D类:224.0.0.0到239.255.255.255用于特殊用途,又称作广播地址
  • E类:240.0.0.0到255.255.255.255暂时保留

私有网络:
网络中的主机需要通信,需要使用一个IP地址,目前我们普遍使用的IPv4的地址,分为A、B、C、D、E五类,在上面已经列出,其中A、B、C类是我们常见的IP地址段。在这三类地址中,大多数为公有地址,需要向国际互联网信息中心注册。在IPv4地址中预留了3个IP地址段,作为私有地址,家庭、企业、学校等内部组网使用。
在这里插入图片描述
除了这三个ip地址段为私有ip地址外,其它的都为公网ip。由上表分析可知,私网ip都分为是从A,B,C三类网络中预留出来,

这些地址已被声明私有化,任何内网中的设备可以任意使用这些地址,但是在这三个范围内的IP地址不允许出现在Internet(外网)上。所以我们平台在内部组网时用的比较多,比如监控项目与公司内部电脑ip设置及家庭网络,用的多的就是192.168.xx。

通常,按照需要容纳的主机数选择私有地址段。家庭网络规模比较小,一个C类地址,192.168.1.x可以容纳254个终端,足够使用。
在这里插入图片描述
学校或者大型企业可能使用B类甚至A类作为内部网络的地址段。比如手机上网很可能获取的也是一个10开头的内网地址,而不是公网地址。
在这里插入图片描述
公网如何访问到外网?
私网地址只能在局域网中使用,不同的局域网可以使用同样的私网地址,私网地址是不能出现在互联网上的。那么私网地址如何访问互联网呢?这就需要用到NAT地址转换,将内网地址映射到外网地址。而NAT地址转换它实现内网的IP地址与公网的地址之间的相互转换,将大量的内网IP地址转换为一个或少量的公网IP地址,减少对公网IP地址的占用。

家庭网络普遍使用端口映射的方式,NAT的核心是一张映射表(源IP地址,源端口,目的IP地址,目的端口),将内网源IP地址和端口映射到同一个公网地址的不同端口,如下图所示。
在这里插入图片描述
总之,家庭网络由于网络规模比较小,通常使用了192.168开头的私网地址,光猫拨号获取了一个公网地址(或者运营商私网地址),通过NAT方式的映射到这个公网地址的不同端口,访问互联网。主要注意的NAT模式和路由模式是不同的

特殊的ip地址
①0.0.0.0

不是一个真正意义上的IP地址了,所有不清楚的主机和目的网络(本机的路由表里没有特定条目指明如何到达),对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去;

②255.255.255.255

限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机。如果翻译成人类的语言,应该是这样:“这个房间里的所有人都注意了!” 当然,这个地址不能被路由器转发。

③127.0.0.1(Windows中的localhost)

127.0.0.1为IP地址,本机地址,主要用于测试。用汉语表示,就是“我自己”,该ip地址不可能出现在网络接口中,localhost是一个域名,Windows系统中,约定127.0.0.1为本地IP地址。localhost是其对应的域名。配置是在hosts文件中设置的,Windows下该文件位置为:C:\Windows\System32\drivers\etc目录下hosts文件

④ 10.X.X.X、172.16.X.X~172.31.X.X、192.168.X.X

私有地址,这些地址被大量用于企业内部网络中。一些宽带路由器,也往往使用192.168.1.1作为缺省地址。私有网络由于不与外部互连,因而可能使用随意的IP地址。保留这样的地址供其使用是为了避免以后接入公网时引起地址混乱。使用私有地址的私有网络在接入Internet时,要使用地址翻译(NAT),将私有地址翻译成公用合法地址。在Internet上,这类地址是不能出现的。对一台网络上的主机来说,它可以正常接收的合法目的网络地址有三种:本机的IP地址、广播地址以及组播地址

21 ping指令
ICMP(Internet controller managerment protocal)因特网传输控制协议,用于在主机路由间传递消息
ping:因特网探测包,用于测试主机间网络的联通性,通过向目的主机发送一个ICMP并接收回复消息,通过计算时间来测试主机间的连通性,如果超时则认为链接失败

22 http 请求结构

  • 请求行:http版本,服务器端url地址
  • 请求头:对客户端信息及请求的描述,例如浏览器的字符集、编码、cookie、请求体长度,主要可以设置的是
request.setCharacterEncoding("UTF-8");
  • 请求体,如果是get则为空,如果是pos那么这里面就是表单的请求数据
    在这里插入图片描述
    22 http 响应结构

响应行:http版本及状态码
响应头:对描述服务器的基本信息和响应数据的描述,HttpServletResponse还提供了许多设置

response.setContentType("text/html;charset=utf-8");//设置响应体格式即编码类型
response.setContentType("text/html;charset=utf-8");//设置响应体长度

①setContentType设置Content-Type头②setContentLength:设置Content-Length头。对于支持持久HTTP连接的浏览器来说,这个函数是很用的③addCookie:设置一个Cookie(Servlet API中没有setCookie方法,因为应答往往包含多个Set-Cookie头)。

响应体:响应体就是响应的消息体,返回的数据形式多种多样①json数据②解析好的视图层静态页面③单纯的静态页面

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值