Java岗 面试考点精讲(网络篇03期)

2019 Java 开发者跳槽指南.pdf (吐血整理)….>>>

点击上方“Java知音”,选择“置顶公众号”

技术文章第一时间送达!


1. OSI七层模型

Java岗 面试考点精讲(网络篇03期)

总结一下:

  1. 应用用层按协议打包数据

  2. 由传输层加上双方的端口号

  3. 由网络层加上双方的IP地址

  4. 由链路层加上双方的MAC地址,并将数据拆分成数据帧

  5. 数模信号转换并由物理层传输到另一端

每一层的协议

  • 物理层: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

SSL工作在哪层

表示层

2. TCP/IP模型

TCP/IP模型实际上是OSI模型的一个浓缩版本,它只有四个层次:

  1. 应用层,对应着OSI的应用层、表示层、会话层

  2. 传输层,对应着OSI的传输层

  3. 网络层,对应着OSI的网络层

  4. 网络接口层,对应着OSI的数据链路层和物理层

OSI模型的网络层同时支持面向连接和无连接的通信,但是传输层只支持面向连接的通信;TCP/IP模型的网络层只提供无连接的服务,但是传输层上同时提供两种通信模式。

3. 说一下TTL

Time To Live

数据包再传输过程中每经过一个路由器,TTL就减1,直到TTL=0时,数据包被丢弃,并发送ICMP报文通知源主机防止重复发送。

4. ping和tracert命令用的什么协议

ICMP

5. MTU是什么

最大传输单元。

由于不同硬件的物理特性不同,对数据帧的最大长度都有不同的限制,这个最大长度称为MTU。

(然后通过路由对IP报文进行分片完成传输。)

6. 三次握手

6.1 部分报头信息声明

seq: 序列号,表示数据第一个字节的序号

ack: 确认序列号,表示期望收到的第一个字节的序号

6.1.1 FLAG位

常用的由SYN、ACK、FIN。

SYN:用作建立连接时的同步信号。

ACK:用于对收到的数据进行确认。

FIN:表示后面没有数据需要发送,连接需要关闭。

6.2 握手过程

Java岗 面试考点精讲(网络篇03期)

第一次握手:客户端发送数据包将SYN置1,表示希望建立连接,seq=x。发完后进入SYN_SEND状态。

第二次握手:服务器收到请求后,通过SYN确认是建立连接请求,然后发送一个响应包,将SYN=1 ACK=1 seq=y ack=x+1,然后进入SYN_RCVDz状态

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

7. 为什么要三次握手?

  1. 保持信息对等。

  2. 防止请求超时导致脏连接。

8. 两次握手会怎样?

如果两次握手就创建连接,传输完数据并释放连接后,第一个超时的连接请求才到达服务器,服务器会认为是客户端创建新连接的请求,然后创建连接。此时客户端的状态不是SYN_SENT,所以会直接丢弃服务器传来的确认数据,导致最后只是服务器单方面建立了连接。

9. 四次挥手

这个图不好画,网上找了一个。

Java岗 面试考点精讲(网络篇03期)


  1. 客户端想要关闭连接,然后发送FIN信号并带上seq信息给服务器,

  2. 服务器应答ACK告诉客户端可以断开,但是要等我把数据发送完喽。注意这时候客户端进入FIN_WAIT_2状态。

  3. 服务器将数据发送完后发送FIN+ACK给客户端,告诉客户端OK了,然后自己进入CLOSE_WAIT状态。

  4. 客户端收到后,给服务器发送ACK确认收到,然后自己进入TIME_WAIT状态。

经过2MSL,客户端没有收到服务器传来的报文,则确定服务器已经收到最后的ACK信号,连接正式释放。

四次挥手白话文:

  1. 客户端:我断连接了阿

  2. 服务器:噢,好的知道了,不过要等等,我还有一些数据没传完,我传完了告诉你。

  3. 服务器:小老弟,我传完了,可以关闭了,收到请回复(没有回复的话我过会重新喊你)

  4. 客户端:收到(我得再等等,要确认我哥收到了我的回复)

为什么不直接关闭而是进入TIME_WAIT呢?

  1. 客户端要确认服务器能收到ACK信号。(如果不确认这一点,服务器会认为客户端没有收到自己的FIN+ACK报文,所以会重发)

  2. 防止失效请求。(为了防止已失效的连接的请求数据包和正常的混淆)

10. TCP和UDP区别

  • TCP面向连接,UDP面向非连接

  • TCP提供可靠的服务(数据传输无差错、不丢失、不重复、按序到达),UDP不可靠

  • TCP面向字节流,UDP面向报文

  • TCP数据传输慢,UDP数据传输快

  • TCP首部开销20字节,UDP8字节

11. 常用端口以及对应服务

常见服务 端口
HTTP 80
FTP 21
DNS 53
POP3 110
SMTP 25
SSH 22
nginx 80
MEMCACHED 11211
MYSQL 3306
TOMCAT 8080
NFS 2049
TLENET 23
HTTPS 443
SAMBA UDP139 TCP139
POSTFIX 25
IMAP 143
ZABBIX 10051
DHCP 56

12. 在浏览器中输入网址之后执行会发生什么?

  1. DNS解析,找到对应ip地址

  2. 客户端发起http/https请求,然后交给传输层

  3. 传输层将请求分成报文段,添加目标源和端口,并随机用一个本地接口封装进报头,然后交给网络层。

  4. 网络层加上双方的ip地址信息,并负责路由分发。

  5. 链路层中,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包进行传输了,然后发送IP数据包到达服务器的地址。

有问题或者有漏掉的部分可以在评论区提出。

13. IP地址的分类

A类地址:以0开头,第一个字节范围:0~127(1.0.0.0 - 126.255.255.255);

B类地址:以10开头,第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);

C类地址:以110开头,第一个字节范围:192~223(192.0.0.0 - 223.255.255.255);

内部地址:10.0.0.0—10.255.255.255, 172.16.0.0—172.31.255.255, 192.168.0.0—192.168.255.255。

14. ARP是什么协议,简单语言解释一下工作原理

地址解析协议。

  1. 每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

  2. 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP地址。

  3. 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。

  4. 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

广播发送ARP请求,单播发送ARP响应。

15. DHCP协议有什么作用

一个局域网的网络协议,使用UDP协议工作,用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

16. 子网掩码的作用

子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

通过IP和子网掩码计算网络号(笔试题)

计算出IP二进制和子网掩码的二进制,然后取与

通过IP和子网掩码计算主机号(笔试题)

将子网掩码的二进制取反,然后与IP的二进制取与。

注:该面试题系列文章后续收录至公众号菜单栏,面试季专栏


加入Java知音技术交流,戳这里:Springboot技术交流群

更多Java技术文章,尽在【Java知音】网站。

网址:www.javazhiyin.com  ,搜索Java知音可达!


看完本文有收获?请转发分享给更多人

Java岗 面试考点精讲(网络篇03期)

原文始发于微信公众号(Java知音):Java岗 面试考点精讲(网络篇03期)