java面试之计算机网络

操作含义
count()返回数据集中元素个数
collect()以数组形式返回数据集中所有元素
first()返回数据集中第一个元素
reduce(func)通过函数func(输入两个参数,返回一个参数)聚合数据集中的元素
saveAsTextFile()将数据集中的元素以文本的形式保存到HDFS文件系统中
filter(func)筛选出满足函数func的元素,并返回一个新的数据集
map(func)将每个元素传递到函数func中,并将结果返回为一个新的数据集,一对一进行转换
flatmap(func)与map()相似,但是每个输入元素都可以映射0到多个输出结果
reduceByKey(func)应用于(k,v)键值对数据集时,返回一个新的(k.v)形式的数据集,其中每个值是将每个键传递到函数func中进行聚合后的结果
groupByKey()应用于(k,v)键值对数据集时,返回一个新的(k.Iterable)形式的数据集

1http和https的区别
      Http协议运行于TCP之上,明文传输,客户端和服务端都无法验证对方的身份。Https是身披SSL外壳的Http,运行于SSL之上,SSL运行与TCP之上,是添加了加密和认证机制的HTTP;两者存在如下不同
1 端口不同:Http与Https使用不同的连接方式,用的端口也不一样,前者是80,后者是443.
2 资源消耗:和Http通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
3 开销:Https通信需要证书,而证书一般都需要向认证机构购买。
      Https的加密机制是一种共享密钥和公开密钥加密并用的混合加密机制。

操作含义

对称加密和非对称加密
      对称加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送的问题,即如何安全的将密钥发送给对方;而非对称加密是指使用一对非对称密钥,即公钥和私钥。公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。
三次握手和四次挥手
      第一次握手:Client将标志位SYN置为1,随机产生一个值Seq=J 并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
      第二次握手:Server收到数据包后,由标志位SYN=1知道Client请求建立连接,Server将SYN和ACK都设置为1,ack=J+1,和随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
      第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1;并将该数据包发送给Server;Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server之间可以开始传输数据。
四次挥手
      第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
      第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态,此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务器若发送数据,则客户端仍要接收。
      Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
      第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
TCP协调如何来保证传输的可靠性
      TCP提供一种面向连接的,可靠的字节流服务,其中,面向连接意味着两个使用TCP的应用(通常时一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信,而字节流服务意味着两个应用程序通过TCP连接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。
可靠性,TCP如何进行保证
数据包校验:目的时检测数据在传输过程中的任何变化,若检验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后就会重发数据。
对失序数据包重排序:既然TCP报文段作为IP数据包来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序,TCP会对失序数据进行重新排序,然后才交给应用层。
丢弃重复数据:对于重复数据,能够丢弃重复数据
应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认,这个确认不是立即发送的,通常推迟几分之一秒。
超时重发当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
流量控制:TCP连接的每一方都由固定大小的缓冲区域,TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机导致较慢主机的缓冲区溢出,这就是流量控制。TCP使用的是流量控制协议是可变大小的滑动窗口协议。
TCP与UDP的区别
TCP是面向连接的,UDP是无连接的;

TCP是可靠的,UDP是不可靠的;

TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;

TCP是面向字节流的,UDP是面向报文的;

TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;

TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;
HTTPS加密过程
1 发起请求:客户端在通过TCP和服务器建立连接之后(443端口),发出一个请求证书的消息给服务器,在该请求信息中包含自己可实现的算法列表和其他需要的消息。
2证书返回:服务器端在收到消息后回应客户端并返回证书,在证书中包含服务器信息,域名,申请证书的公司,公钥,数据加密算法。
3 证书验证:客户端在收到证书后,判断证书签发机构是否正确,并使用该签发机构的公钥确认证书是否有效,客户端还会确保在证书中列出的域名就是它正在使用的域名。如果客户端确认证书有效,则生成对称密钥,并使用公钥将对称密钥加密。
4 密钥交换:客户端将加密后的对称密钥发送给服务器,服务器在接收到对称密钥后使用私钥解密
5 数据传输:经过上述传输,客户端和服务器就完成了密钥对的交换,在之后的数据传输中,客户端和服务端就可以基于对称加密对数据加密后在网络上传输,保证了数据传输的安全性。
常见状态码
     200 :正常响应成功
     302 :重定向
     304:读缓存
     404 : 用户操作资源不存在
     500 :服务器内部异常
OSI七层模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
TCP/IP四次模型
应用层
传输层
网络层
网络接口层
五层协议
应用层
传输层
网络层
数据链路层
物理层
TCP/IP协议应用
FTP:文本传输协议
Telnet:远程登陆协议
SMTP:电子邮件协议
NFS:网络文件服务协议
SNMP:网络管理协议
每一层协议有哪些

网络层协议
物理层RJ45.CLOCK,,IEEE802.3
数据链路PPP.FR.HDLC,VLAN,MAC
网络层IP,ICMP,ARP,RARP,OSPF,IPX,RIP,IGRP
传输层TCP,UDP,SPX
会话层NFS,SQL,NETBIOS,RPC
表示层JPEG,MPEG,ASII
应用层FTP,DNS,Telnet,SMTP,HTTP,WWW,NFS

Http的传输流程
1 地址解析:地址解析通过域名系统DNS解析服务器域名从而获得主机的IP地址。
2 封装Http数据包:解析协议名,主机名,端口号,对象路径并结合本机自己的信息封装成一个Http请求数据包。
3封装TCP包:将Http请求数据包进一步封装成TCP数据包
4建立TCP连接:基于TCP的三次握手机制建立TCP连接。
5客户端发送请求:在建立连接后,客户端发送一个请求给服务器
6服务器响应:服务器在收到请求后,结合业务逻辑对数据进行处理,然后向客户端返回相应的响应信息。在响应信息中包含状态行,协议版本号,成功或错误的代码,消息体等内容。
7服务器关闭TCP连接:服务器在向浏览器发送请求响应数据后关闭TCP连接。但如果浏览器或者服务器在消息头中加入了Connection:keep-alive,则TCP连接在请求响应数据发送后仍保持连接状态。在下次请求中浏览器还可以使用相同的连接发送请求。
传输层与网络层协议的区别
传输层协议负责的是提供主机间的逻辑通信
网络层协议负责的是提供进程间的逻辑通信
为什么TCP连接要建立三次连接
为了防止失效的连接请求又传送到主机,因而产生错误。

如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。

TCP/IP的流量控制
如果发送方把数据发送的过快,接收方可能来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。所以可以说,流量控制是发送方被动地调整流量。
利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
通过发送滑动窗口的大小,来控制发送方的发送。如果rwnd=0;就不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到接收方重新发送一个新的窗口值为止。TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口空测报文段,那么收到这个报文段的一方就会重新设置持续计数器。
TCP/IP的拥塞控制方法
慢开始,拥塞避免,快重传,快恢复
发送方维持一个拥塞窗口cwnd的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减少一些,以减少注入到网络中的分组数。
为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要涉及一个慢开始门限ssthresh状态变量。
当cwnd<ssthresh时,使用慢开始算法
当cwnd>ssthresh时,使用拥塞避免算法
当cwnd=ssthresh时,既可以使用慢开始算法,也可以使用拥塞避免算法。
**慢开始算法:**当主机开始发送数据时,并不清楚网络的负荷情况,如果立即把大量数据注入到网络中,就有可能引起网络的拥塞。比较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说由小到达逐渐增大拥塞窗口的数值。经过一个传输轮次,拥塞窗口cwnd就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。
拥塞避免算法: 让拥塞窗口cwnd缓慢地增大,即经过一个往返时间RTT就把发送方的拥塞窗口cwnd+1,而不是加倍。这样拥塞窗口的大小按线性规律缓慢增长。
无论在慢开始阶段还是拥塞避免阶段。只要发送方判断网络出现拥塞(根据就是没有收到确认),把慢开始门限ssthresh值设置为出现拥塞时的发送方窗口值的一半,就把拥塞窗口cwnd重新设置为1,执行慢开始算法。
快速重传
收到三个相同的ACK。TCP在收到乱序到达包时就会立即发送ACK,TCP利用三个相同的ACK来判断数据包的丢失,此时进行快速重传,要做的事情有:
1把ssthresh设置为cwnd的一半
2把cwnd在设置为ssthresh的值
3重新进入拥塞避免阶段
快速恢复
当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因时因为收到3.
再收到重复的ACK时,拥塞窗口增加1
当收到新的数据包的ACK时,把cwnd设置为第一步中ssthresh的值,原因是因为该ACK确定了新的数据,说明从重复ACK时的数据都已收到,该恢复过程中已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。
GET和POST的区别
作用
GET用于获取资源,而POST用于传输数据
参数
GET和POST的请求都能使用额外的参数,GET的参数拼接在URL中,POST的参数储存在实体主体中
安全
GET方法是安全的,POST方法不安全。安全就是说请求方法不会改变服务器的状态,也就是说它只是可读的。因为POST的目的是传送数据,这个数据可能是用户上传的表单,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。
幂等
GET方法是幂等的,POST方法不是幂等的
GET产生一个TCP数据包,Post产生两个TCP数据包
对于GET来说,浏览器会把Http Header和data一并发出去,服务器返回200
对于POST请求来说,浏览器先发送header,服务起返回100 continue,浏览器再发送data,服务起
Http1.0和Http1.1的主要区别
Http1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上。
Http1.1则在1999年才开始广泛应用在现在的各大浏览器请求网络中,同时Http1.1也是当前使用最为广泛的Http协议。主要体现在:
1 长连接:在HTTP1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次请求。Http协议是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大,因此最好会维持一个长连接,可以使用长连接发送多个请求,Http1.1起,默认使用长连接,默认开启Connection:keep-alive.Http1.1的持续连接由非流水线式和流水线式。流水线是客户端在接收到Http的响应报文之前就能接着发送新的请求报文。与之对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
2错误状态响应码:在Http1.1中增加了24个错误状态响应码,如409表示请求的资源与资源当前的状态发生冲突。410表示服务器上的某个资源被永久性的删除
3 缓存处理:Http1.1中提供了更多的可供选择的缓存头来控制缓存策略
4 带宽优化及网络连接的使用:Http1.0中,存在一些带宽浪费的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,Http1.1则在请求头中引入了range头域,它允许只请求资源的某个部分,这样就方便了开发者自由的选择以便于充分利用带宽和连接。
DNS域名解析过程
1浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。
2如果浏览器缓存中没有,浏览器会检查操作系统中有没有对应的已解析的结果。操作系统也有一个域名解析的过程。在windows中有一个hosts文件,可以在里面设置一个域名对应的ip地址。
3 如果仍然没有,主机可向本地服务器进行递归查询。
4 本地服务器采用迭代查询,向一个根域名服务器进行查询
5 根域名服务器告诉本地域名服务器,下次应该查询的顶级域名服务器ip地址
6 本地服务器向顶级域名服务器进行查询
7 顶级域名服务器告诉本地服务器,下次应该查询的权限服务器ip地址
8 本地服务器向权限服务器进行查询
9 权限服务器告诉本地服务器所查询的主机的ip地址
10 本地服务器最后把查询结果告诉主机。
dns的递归查询与迭代查询
递归查询:本机向本地域名服务器发送一次查询请求,就等待最终的结果,如果本地域名服务器无法解析,自己会以DNS客户机的身份向其他服务器客户端查询,直到得到最终的ip地址告诉本机。
迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步应该到哪里去查,让后它再去查,每次它都是以客户机的身份去各个服务器查询。
ARP解析过程
1网络层封装IP数据包,数据链路层封装报文
2 首先会查询自己的ARP表,查看目的IP到目的MAC的映射,如果有就进行封装,如果没有进行下一步。
3 ARP会产生ARP Request去解析目的MAC,此时源MAC为数据发起者的MAC,目的地址MAC为FFFF:FFFF:FFFF(全为1,代表所有MAC)
4 ARP Requqst到达本网段中的所有设备上,因为目的MAC全为1,所以所有设备都可以拆掉封装,解析ARP数据包中需要解析的目的IP
5 目的IP不正确的设备直接忽略这个ARP请求,目的IP正确的设备,会产生ARP Reply去回应这个ARP Request,这时,源MAC为解析设备的MAC,目的MAC为ARP解析发起者的MAC
6解析发起者在收到ARP Reply后,将目的IP和目的MAC的对应关系添加到自己的ARP表中
7 封装数据链路层(数据帧),进行数据传输
TCP是什么
TCP是传输层的控制协议,是一种面向连接的,可靠的,基于字节流的传输层通信协议。
UDP如何实现可靠传输
UDP不属于连接效型协议,因而具有资源消耗小,处理速度快的优点,所有通常音频,视频和普通数据在传送时使用UDP较多,因为他们即使偶尔丢失一两个数据包,也不会对接收结果产生太大的影响。
传输层无法保证数据的可靠性,只能通过应用层来实现,实现的方法可以参照tcp可靠性传输的方式,只是实现不在传输层,转移到了应用层。
在应用层实现确认机制,重传机制,窗口确认机制。
详细说明:发送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小,分配seq,数据到达后,接收端接收数据,放入缓存,并发送一个ack=x的包,表面已经接收到了数据。发送端收到了ack后,删除缓冲区对应的数据,时间到后,定时检查是否需要重传数据。
HTTP2.0
1 二进制分帧层
~HTTP2.0将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。
流:流是连接中的一个虚拟通道,可以承载双向的消息,每个流都有一个唯一的整数标识符
消息:逻辑上的HTTP消息,比如请求,响应,由一个或多个帧组成
帧:HTTP2.0通信的最小单位,每个帧包含帧首部,至少也会标识当前帧所述的流,承载着特定类型的数据。
2 首部压缩
~HTTP2.0所有帧都采用二进制编码,所有首部数据都会被压缩。
~所有的通信都在一个TCP连接上完成
~HTTP2.0把HTTP协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息,相应地,很多流可以并行地在同一个TCP连接上交流信息。
3 多向请求与响应
HTTP2.0中新的二进制分帧层突破了这些限制,实现了多向请求与响应:客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把他们重新组合起来。
把HTTP消息分解为独立的帧,交错发送,然后在另一端重新组装是HTTP2.0最重要的一项增强,这个机制会在整个Web技术栈中引发一系列连锁反应。
4 请求优先级
把HTTO消息分解为很多独立的帧后,可以通过优化这些帧的交错和传输顺序,每个流都可以带有一个31byte的优先值,服务器可以根据流的优先级,控制资源分配,在响应数据准备好之后,优先将最高优先级的帧发送给客户端。
怎么判断是同一个TCP
如果四元组:源IP,目的IP,源端口,目的端口都相同,那么被认为是同一个TCP
TCP中的重传
1超时重传:当接收方收到一个包后,就会向发送方返回一个ACK,表示自己已经收到了这段数据。
发送方每发送一段报文时,都会为这段报文设置一个计时器,当计时器超时还没有收到确认时,重传该报文段。
缺点:1会等待一定的时间才会进行重传,增加了端到端的时延
2容易引起不必要的重传,既浪费资源,又浪费时间
2 快速重传:基于接收端的反馈信息来引发重传,而非计时器超时重传
机制:服务器如果收到乱序的包,也会给客户端回复ACK,只不过发送的是最后一次报文的ACK,当客户端接收到连续三次重复的ACK,就会重传对应的包,而不需要等到计时器超时。
3改进的SACK,简单来说就是在快速重传的基础上,返回最近收到的报文段的序列号,这样客户端就知道,哪些数据包已经到达了服务器。
4DSACK:重复SACK,在SACK的基础上,携带额外的信息。告诉有哪些数据包自己重复接受了。
如何验证证书的合法性
浏览器需要验证SSL证书的5个方面:
1 验证浏览器中受信任的根证书颁发机构是否存在颁发该证书的机构
2 检查证书有没有被证书颁发机构吊销
3 验证该网站的SSL证书是否过期
4 审核该SSL证书的网站的域名是否与证书中的域名一致
5 该网站有没有被列入欺诈网站黑名单
用户证书被中间证书信任,中间证书被根证书信任,根证书又被浏览器信任,这样一个完整的证书链使得浏览器在根证书库内一次检索用户证书,中间证书和根证书,如果能匹配到根证书,那么这一信任链上的所有证书都是合法的。浏览器内置了信任的根证书,就是看看web服务器的证书是不是这些信任根签发的或者信任根证书的二级证书机构颁发的。
如何验证证书的有效性
黑名单方式和OCSP方式:黑名单方式就是定期从一个CA下载一个名单列表,里面有吊销的证书号,自己在本地对比一下就行,优点是效率高,缺点是不实时。OCSP是实时连接CA去验证,优点是实时,缺点是效率不高。
NAT协议
地址转换协议,局域网中的主机分配了本地IP地址,(即只在本局域网中使用的专用地址),如果想要与互联网上的主机通信,需要用到NAT协议,NAT服务器将本地地址转换为全球IP,与外部网络进行通信。
Http请求响应报文结构
一个Http请求报文由四个部分组成,请求行,请求头,空行,请求数据
1请求行:请求行由请求方法字段,URL,HTTP协议版本号三个字段组成,他们空格隔开,GET /data/info.html/ HTTP/1.1
HTTP1.0可以没有Host字段,HTTP1.1中必须有Host字段
2请求头:

常见请求头含义
Accept浏览器可接受的MIME类型
Accept-Charset浏览器可接受的字符集
Accept-Encoding浏览器能够解码的数据编码方式
Accept-Language浏览器所希望的语言种类
Content-Length表示请求消息正文的长度
Cookie通过Cookie向服务器携带数据
Connection是否是长连接

3空行
作用是通过一个空行,告诉服务器请求头部到此为止
4请求数据
如果方法字段是GET,此项数据为空
如果方法字段为POST,放置的为请求体数据,用&来连接各个字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值