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

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> Java岗 面试考点精讲(网络篇03期)

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

技术文章第一时间送达!

1. OSI七层模型

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

总结一下:

  • 应用用层按协议打包数据
  • 由传输层加上双方的端口号
  • 由网络层加上双方的IP地址
  • 由链路层加上双方的MAC地址,并将数据拆分成数据帧
  • 数模信号转换并由物理层传输到另一端
  • 由传输层加上双方的端口号

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

    每一层的协议

  • 物理层: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模型的一个浓缩版本,它只有四个层次:

  • 应用层,对应着OSI的应用层、表示层、会话层
  • 传输层,对应着OSI的传输层
  • 网络层,对应着OSI的网络层
  • 网络接口层,对应着OSI的数据链路层和物理层
  • 传输层,对应着OSI的传输层

    网络接口层,对应着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 握手过程

    第一次握手:客户端发送数据包将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. 为什么要三次握手?

  • 保持信息对等。
  • 防止请求超时导致脏连接。
  • 防止请求超时导致脏连接。

    8. 两次握手会怎样?

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

    9. 四次挥手

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

  • 客户端想要关闭连接,然后发送FIN信号并带上seq信息给服务器,
  • 服务器应答ACK告诉客户端可以断开,但是要等我把数据发送完喽。注意这时候客户端进入FIN_WAIT_2状态。
  • 服务器将数据发送完后发送FIN+ACK给客户端,告诉客户端OK了,然后自己进入CLOSE_WAIT状态。
  • 客户端收到后,给服务器发送ACK确认收到,然后自己进入TIME_WAIT状态。
  • 服务器应答ACK告诉客户端可以断开,但是要等我把数据发送完喽。注意这时候客户端进入FIN_WAIT_2状态。

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

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

    四次挥手白话文:

  • 客户端:我断连接了阿
  • 服务器:噢,好的知道了,不过要等等,我还有一些数据没传完,我传完了告诉你。
  • 服务器:小老弟,我传完了,可以关闭了,收到请回复(没有回复的话我过会重新喊你)
  • 客户端:收到(我得再等等,要确认我哥收到了我的回复)
  • 服务器:噢,好的知道了,不过要等等,我还有一些数据没传完,我传完了告诉你。

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

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

  • 客户端要确认服务器能收到ACK信号。(如果不确认这一点,服务器会认为客户端没有收到自己的FIN+ACK报文,所以会重发)
  • 防止失效请求。(为了防止已失效的连接的请求数据包和正常的混淆)
  • 防止失效请求。(为了防止已失效的连接的请求数据包和正常的混淆)

    10. TCP和UDP区别

  • TCP面向连接,UDP面向非连接
  • TCP提供可靠的服务(数据传输无差错、不丢失、不重复、按序到达),UDP不可靠
  • TCP面向字节流,UDP面向报文
  • TCP数据传输慢,UDP数据传输快
  • TCP首部开销20字节,UDP8字节
  • 11. 常用端口以及对应服务

    常见服务端口|------

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

  • DNS解析,找到对应ip地址
  • 客户端发起http/https请求,然后交给传输层
  • 传输层将请求分成报文段,添加目标源和端口,并随机用一个本地接口封装进报头,然后交给网络层。
  • 网络层加上双方的ip地址信息,并负责路由分发。
  • 链路层中,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包进行传输了,然后发送IP数据包到达服务器的地址。
  • 客户端发起http/https请求,然后交给传输层

    网络层加上双方的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是什么协议,简单语言解释一下工作原理

    地址解析协议。

  • 每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
  • 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP地址。
  • 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
  • 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
  • 广播发送ARP请求,单播发送ARP响应。

    15. DHCP协议有什么作用

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

    16. 子网掩码的作用

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

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

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

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

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

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

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

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

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

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

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

    原文始发于微信公众号(Java知音):

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> Java岗 面试考点精讲(网络篇03期)


     上一篇
    java面试之clone() java面试之clone()
    点击蓝字“程序员考拉”欢迎关注! 假如说你想复制一个简单变量。很简单: 12int apples = 5; int pears = apples; int apples = 5;int pears = apples
    2021-04-05
    下一篇 
    java面试之重载、重写、重构的区别 java面试之重载、重写、重构的区别
    点击蓝字“程序员考拉”欢迎关注!   1.重载 构造函数是一种特殊的函数,使用构造函数的目的是用来在对象实例化时初始化对象的成员变量。由于构造函数名字必须与类名一致,我们想用不同的方式实例化对象时,必须允许不同的构造方法同时存在,这就用
    2021-04-05