Java面试题之网络

1.OSI的七层协议

从上往下依次是:

应用层:

应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则,我们把应用层交互的数据单元称为报文,应用层协议如:域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议

表示层:

提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。数据压缩和加密也是也是表示层可提供的转换功能之一

会话层:

负责建立、管理和终止表示层实体之间的通信会话,该层的通信由不同设备中的应用程序之间的服务请求和响应组成

运输层:

运输层的任务是负责向两台主机中进程之间的通信提供通用的数据传输服务。所谓通用的,是指并不针对某个特定网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能,复用就是多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程

     运输层主要使用以下两种协议:

           传输控制协议TCP:提供面向连接的、可靠的数据传输服务,其数据传输的单位是报文段

           用户数据报协议UDP:提供无连接的、尽最大努力的数据传输服务,其数据传输的单位是用户数据报

网络层:

网络层负责为分组交换网上的不同主机提供通信服务

在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送,在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫做IP数据报,或者简称为数据报

无论在哪一层传送的数据单元,都可笼统的用分组来表示

数据链路层:

将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用的是MAC地址)来访问介质,并进行差错检测

物理层:

实际最终信号的传输是通过物理层实现的,通过物理介质传输比特流

2.TCP和UDP区别

TCP:

面向连接的传输层协议,在使用TCP协议之前,必须先建立TCP连接

每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)

TCP提供可靠交付的服务,通过TCP连接传输的数据,无差错、不丢失、不重复,并且按序到达

TCP提供全双工通信,TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设置有发送缓存和接收缓存,用来临时存放双向通信的数据。在发送时,应用程序在把数据传送给TCP的缓存后,就可以做自己的事情,而TCP在合适的时候把数据发送出去。在接收时,TCP把收到的数据放入缓存,上层的应用程序在合适的时候读取缓存中的数据

面向字节流,面向字节流的含义是:TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块大小一样(例如:发送方应用程序交给发送方的TCP10个数据块,但是接收方的TCP可能只用了4个数据块就把收到的字节流交付上层的应用程序),但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样

UDP:

无连接的,发送数据之前不需要建立连接

不保证可靠交付

面向报文的,在发送方,应用层交给UDP多长的报文,UDP就照常发送,即一次发送一个报文,在接收方,UDP一次交付一个完整地报文。应用程序必须选择合适大小的报文,若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率,若报文太短,UDP把它交给IP层后,会使IP数据报的首部相对长度太大,也会降低IP层的效率

UDP没有拥塞控制,因为没有拥塞控制,所以网络出现的拥塞不会使源主机的发送速率降低。在很多的实时应用中(IP电话,实时视频会议等)这很重要,要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延,UDP正好符合这种要求

UDP支持一对一,一对多,多对一,多对多的交互通信

UDP的首部开销小,只有8个字节,TCP首部有20个字节

3.TCP和UDP的首部字段

UDP:

源端口:源端口号

目的端口:目的端口号

长度:UDP用户数据报的长度,最小值是8,仅有首部

校验和:

检验UDP用户数据报在传输中是否有错,有错就丢弃

在计算校验和时,要在UDP用户数据报之前增加12个字节的伪首部。伪首部:并不是UDP用户数据报真正的首部,只是在计算校验和时,临时添加在UDP用户数据报前面,得到一个临时的UDP用户数据报。伪首部既不向下传送也不向上递交,仅仅是为了计算校验和

UDP计算校验和的方法:把首部和数据部分一起都检验。在发送方,首先先把全0放入校验和字段,再把伪首部以及UDP用户数据报看成是由许多16位的字串接起来的,若UDP用户数据报的数据部分不是偶数个字节,则要填入一个全0字节(此字节不发送),然后按照二进制反码计算出这些16位字的和,将此和的二进制反码写入校验和字段后,发送这个UDP用户数据报。在接收方,把收到的UDP用户数据报连同伪首部一起按照二进制反码计算出16位字的和,如果无差错其结果应全为1,否则表明有差错,接收方应该丢弃这个UDP用户数据报(也可以上交给应用层,但是要附上出现了差错的警告)

这种简单的校验方法能力并不强,但是好处是简单,处理起来较快

TCP:

源端口和目的端口:各占2个字节,分别写入源端口号和目的端口号

序号:占4字节,TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号

确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号

数据偏移:占4字节,它指出TCP报文段的数据起始处距离TCP报文段的起始有多远,实际上是指出TCP报文段的首部长度

保留:占6字节,保留为今后使用,但目前应置为0

紧急URG:当URG=1时,表明紧急指针有效

确认ACK:当ACK=1时确认号字段才有效,当ACK=0时,确认号字段无效

推送PSH:当两个应用进程进行交互式的通信后,有时在一端的应用进程希望在键入一个命令后就能够收到对方的响应,这时TCP就可以使用推送操作。发送方TCP把PSH置为1,并立即创建一个报文段发送出去,接收方TCP收到PSH=1的报文段,就尽快的交付接收应用进程,而不再等到整个缓存填满了后再向上交付

复位RST:当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接,还可以用来拒绝一个非法的报文段或者拒绝打开一个连接

同步SYN:SYN置为1,表示这是一个连接请求或者连接接受报文

终止FIN:当FIN=1时,表明此报文段的发送方的数据以发送完毕,并要求释放运输连接

窗口:占2个字节,窗口值作为接收方让发送方设置其发送窗口的依据

检验和:占2字节,和UDP一样,但应把伪首部第4个字段中的17改为6(TCP的协议号是6),把第5个字段中的UDP长度改为TCP长度。若使用IPV6,相应的伪首部也要改变

紧急指针:占2字节,紧急指针仅在URG=1时才有意义,紧急指针指出了紧急数据的末尾在报文段中的位置

选项:长度可变,最长可达40字节

4.TCP如何保证可靠性

1).超时重传

超时重传有两种情况:

一种是A在超时计时器设置的时间到期后,没有收到来自B的确认,这时候可能是A发送的分组丢失了,这是A就会重传这个分组

另一种是A没有收到B的确认,可能是来自B的确认迟到了,这时候A也会重传分组,B就会收到重复的分组,B会进行两个动作,第一,丢弃这个重复的分组,不向上层交付,第二,向A发送确认,A收到重复的确认,收下后就丢弃

2).确认应答

TCP传输过程中,接收方收到数据后,都会对发送方进行确认应答,也就是发送ACK报文,这个报文中带有相应的确认序列号,告诉发送方,接收到了哪些数据,下次的数据往哪里发

3).校验和

发送方在发送数据之前计算校验和,将校验和与数据一起发送,接收方收到后,会以同样的方式计算校验和,然后进行比较

4).流量控制

进行流量控制使发送方的发送速率不至于过快,让接收方来得及接收

5).拥塞控制

防止过多的数据注入到网络中,避免网络拥塞,保证传输的可靠性和高效性

5.TCP的拥塞控制

拥塞控制

拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载

进行拥塞控制的算法有4种

1).慢开始算法:

在刚刚开始发送报文段的时,先把初始拥塞窗口cwnd设置为1,每收到一个新的报文段的确认后,拥塞窗口cwnd就加倍,当拥塞窗口cwnd增长超过慢开始门限值时,就要改用拥塞避免算法

2).拥塞避免算法:

每经过一个往返时间RTT就把发送方的拥塞窗口加1,使拥塞窗口按线性规律缓慢增长,当网络出现超时,调整门限值为当前拥塞窗口的一半,同时设置拥塞窗口cwnd=1,进入慢开始

3).快重传算法:

当发送方一连收到3个重复确认,就应当立即重传接收方没有收到的报文段,这样就不会出现超时

4).快恢复算法:

当发送方收到3个重复确认ACK时,把慢开始门限值设为当前拥塞窗口的一半,拥塞窗口设置为改变后的门限值,然后开始拥塞避免算法,开始线性增长

6.TCP的流量控制

流量控制:

让发送方的发送速率不要太快,要让接收方来得及接收

1).在通信过程中,接收方根据自己接收缓存的大小,动态的调整接收窗口的大小,然后在首部字段中写入接收窗口的大小发送给发送方

2).发送方根据其对当前网络拥塞的估计确定拥塞窗口的大小,这个大小受网络带宽和时延的影响,发送方发送数据的大小是取接收窗口和拥塞窗口的最小值

7.TCP三次握手

一开始,B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求,然后服务器进程就处于LISTEN(收听)状态

A的TCP客户进程也是首先创建传输控制块TCB,然后向B发送连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x,这时TCP客户进程进入SYN-SENT(同步已发送)状态

B收到连接请求报文段后,如果同意建立连接,则向A发送确认,在确认报文段中应把SYN位和ACK位都置为1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y,这时TCP服务器进程进入SYN-RCVD(同步收到)状态

A的TCP客户进程收到B的确认后,还要向B给出确认,确认报文段的ACK置为1,确认号ack=y+1,自己的序号seq=x+1,这时TCP连接已经建立,A进入ESTABLISHED(已建立连接)状态

为什么是三次握手?

A最后要发送一次确认,主要是为了防止已失效的连接请求报文段突然又传送到了B

A发送的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达B,但B收到这个失效的连接请求报文段后,就误以为是A又发出一次新的连接请求,于是就向A发出确认报文段,同意建立连接,但是A并不会发送数据给B,B就一致等待A发送来数据,这样B的许多资源就这样白白浪费了

如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP设有一个保活计时器,如果客户端已经与服务器建立了TCP连接,但是后来客户端出现了故障,这样服务器就不能再收到客户端发来的数据。这时候就要使用保活计时器,服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是2小时,如果2小时没有收到客户端发来的数据,服务器就会发送一个探测数据报,以后每隔75秒发送一次,如果一连发送10个探测数据报仍然没有收到客户端的响应,服务器就认为客户端出现了故障,接着就关闭这个连接

8.TCP四次挥手

A和B都处于ESTABLISHED(已连接)状态,A的应用进程先向其TCP发出连接释放报文段,并停止发送数据,主动关闭TCP连接,A把连接释放报文段首部的终止控制位FIN置为1,其序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1,这时A进入FIN-WAIT-1(终止等待1)状态,等待B的确认

B收到连接释放报文段后发出确认,确认号是ack=u+1,序号seq=v,B进入CLOSE-WAIT(关闭等待)状态,这时的TCP连接处于半关闭状态,从A到B这个方向的连接已经关闭,但是从B到A这个方向的连接还没有关闭

A收到B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段

B发出的连接释放报文段使FIN=1,序号为W,确认号ack=u+1,这是B进入LAST-ACK(最后确认状态),等待A的确认

A在收到B的链接释放报文段后,对此发出确认,把ACK置为1,确认号ack=w+1,自己的序号seq=u+1,然后进入TIME-WAIT(时间等待)状态,必须经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态,MSL叫做最长报文段寿命

为什么要等待2MSL的时间?

1).为了保证A发送的最后一个ACK报文能够到达B,A最后发送给B的ACK报文段可能丢失,这样处于最后确认状态的B收不到A的确认,就会重传之前已经发送的FIN+ACK报文段,A就会重传一次确认,重新启动2MSL计时器,最后,A和B都正常进入到CLOSED状态。如果A不等待2MSL,发送完ACK报文段后立即释放连接,这样ACK报文段丢失,B会重传FIN+ACK报文段,A就收不到B重传的FIN+ACK报文段,也就不会重新发送一次确认,这样B就无法进入CLOSED状态

2).防止出现已失效的连接请求报文段,A等待2MSL时间就可以使连接中的所有报文段都消失,就可以使下一个新的连接中不会出现这种旧的连接请求报文段

为什么等待时间是2MSL?

MSL是最长报文段寿命,它是任何报文消失前在网络内的最长时间,2MSL就是一个发送和一个恢复的最长时间,这样就可以使连接中的所有报文段都消失,使下一个连接中不会出现这种旧的连接请求报文段

9.滑动窗口

TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小

10.几个常用协议

地址解析协议ARP(网络层协议):

完成IP地址到MAC地址的映射

工作原理:

每一台主机都设有一个ARP高速缓存,里面有本局域网上的各个主机和路由器的IP地址到MAC地址的映射表,当主机A向本局域网上的某个主机B发送IP数据报时,就先在ARP高速缓存中查看是否有主机B的IP地址,如果有,就可以直接查出对应的MAC地址,然后将此MAC地址写入MAC帧,通过局域网将该MAC帧发往此硬件地址。如果没有,就通过使用目的MAC地址为FF-FF-FF-FF-FF-FF的帧来封装并广播ARP请求分组,可以使同一个局域网中的所有主机都收到ARP请求,当主机B收到该ARP请求后,就会向主机A发送响应ARP分组,分组中包含B的IP地址和MAC地址的映射关系,主机A收到后将此映射写入ARP缓存中,然后按查询到的硬件地址发送MAC帧

动态主机配置协议DHCP(应用层协议):

用于给主机动态分配IP地址

 

网际控制报文协议ICMP(网络层协议):

 

域名解析系统DNS(应用层协议,使用UDP传输):

 

 

11.http的状态码

               http中的状态码

12.http和https的区别

http:

是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议

https:

是以安全为目标的的http通道,简单讲是http的安全版,即http下加入SSL层,https的安全基础是SSL,因此加密的详细内容就需要SSL。https协议的主要作用分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性

区别:

https协议需要用到ca申请证书,一般免费证书较少,因而需要一定的费用

http是超文本传输协议,信息是明文传输,https则是具有安全性的SSL加密传输协议

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

http的连接很简单,是无状态的,https协议是由SSL+HTTP协议构成的,可进行加密传输、身份认证的网络协议,比http协议安全

13.https的工作原理

客户端使用https的URL访问Web服务器,要求与Web服务器建立SSL连接

Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端

客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级

客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站

Web服务器利用自己的私钥解密出会话密钥

Web服务器利用会话密钥加密与客户端之间的通信

14.https的缺点

https协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电

https连接缓存不如http高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响

SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用

SSL证书通常需要绑定IP,不能在同一个IP上绑定多个域名,IPV4资源不可能支持这个消耗

https协议的加密范围比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到作用,最关键的是,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行

15.http请求中GET和POST的区别

                 HTTP中GET和POST的区别

16.http1.0、http1.1、http2.0区别

http1.0与http1.1:

 

http1.1与http2.0:

 

17.浏览器中输入一个网址发生了什么

DNS解析

建立TCP连接(TCP3次握手)

发送http请求

服务器处理请求

返回响应结果

关闭TCP连接(TCP4次挥手)

浏览器解析HTML,布局渲染

18.以太网中一个IP发给另一个要经过什么

 

19.http的请求头

 

 

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值