Java面试总结——计算机网络

1.OSI,TCP/IP,五层协议的体系结构,以及各层协议

(1)OSI七层:物理层(集线器,网卡,网线,中继器,调制解调器),数据链路层(网桥,交换机),网络层(路由器,决定使用哪条路径通道子网),传输层(完成向用户提供可靠的端到端的服务),会话层,表示层,应用层。
(2)TCP/IP协议包括两部分:传输控制协议/网际协议,5个相对独立的层次:应用层、传输层、互联网层,网络接口层和物理层。对应关系如图所示。
在这里插入图片描述
(3)每一层的协议如下:
物理层: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
(4)每一层的作用如下:
物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

2.IP地址的分类

A类地址:地址范围1.0.0.0到126.255.255.255
B类地址:地址范围128.0.0.0到191.255.255.255
C类地址:地址范围192.0.0.0到223.255.255.255
在这里插入图片描述

3.ARP是地址解析协议,简单语言解释一下工作原理。(ip->mac)

(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响应。

4.描述RARP协议(mac->ip)

RARP是逆地址解析协议,作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。工作流程:在网络中配置了一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络。

5.TCP三次握手过程?为什么采用三次握手,若采用二次握手可以吗?

TCP三次握手过程,如下图所示:
(1)客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
(2)服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
(3)客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
在这里插入图片描述
使用三次握手的原因如下:
是为了防止失效的连接请求报文段传到主机b从而产生错误。
感觉上面这句话过于抽象不利于理解,我赞同的答案是为了实现可靠数据传输,TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。通过这三次握手保证连接是双工的。
在叙述的同时可以对比四次握手和两次握手。

6.TCP四次挥手的过程,为什么TCP需要四次挥手,客户端发送确认后处于什么状态,为什么要等2MSL?

TCP四次挥手过程,如下图所示:
(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN(M)分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认ACK(M+1)。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN(N)。
(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN,ACK(N+1)。

在这里插入图片描述
   以客户端先挥手为例,在客户端发送一个FIN字节之后,客户端处于FIN_WAIT1状态。
  MSL是Maximum Segment LifeTime英文缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。当客户端进入TIME_WAIT状态的时候,也就是第四次挥手的时候,设置时间为2MSL的理由如下:
  (1)为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
  (2)他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。
注意:在服务器发送了FIN-ACK之后,会立即启动超时重传计时器。客户端在发送最后一个ACK之后会立即启动时间等待计时器。

7. 四次挥手是客户端还是服务器端先发起,为什么?

在调试客户端和服务器端(使用TCP套接字)的代码时我发现,如果先结束服务器端后结束客户端,紧接着再重启服务器端就会出现绑定失败的错误 OSError: [Errno 98] Address already in use 等待一段时间后大概一分钟左右就能正常重启服务器端。
  以客户端先挥手为例,在TCP处于TIME_WAIT状态时,客户端从TIME_WAIT状态到CLOSED状态需要2MSL,因为客户端要确定服务端收到了ACK,如果服务端没收到ACK,客户端则一定会在2MSL时间内再收到一次FIN。而在socket编程中客户端一般不需要绑定,而服务器端一般都要绑定,如果先结束服务器端则是服务器端先进行挥手操作,那么服务器端从TIME_WAIT到CLOSED状态则需要2MSL。这段时间服务器端绑定的端口号被占用了,套接字不会释放。所以这段时间重启了服务器之后,会出现绑定失败的错误OSError: [Errno 98] Address already in use。

8.TCP/IP三次握手和四次挥手的11种状态。

参考链接:
https://blog.csdn.net/qq_38950316/article/details/81087809(这个博主总结的很清楚!)
(1)三次握手的状态变化:
在这里插入图片描述
(2)四次挥手的状态变化:
在这里插入图片描述
注意到不论是四次挥手还是三次握手都会传递序列号和确认ACK,要理解传递序列号的规则首先就要清楚TCP报文的格式以及各部分的含义。
在这里插入图片描述
(1)序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号
(2)确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号
(3)确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效。
(4)同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。
(5)终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接
ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。
在这里插入图片描述

LISTEN:等待从任何远端TCP 和端口的连接请求。

SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。

SYN_RECEIVED:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。

ESTABLISHED:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。

FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。

FIN_WAIT_2:等待远端TCP 的连接终止请求。

CLOSE_WAIT:等待本地用户的连接终止请求。

CLOSING:等待远端TCP 的连接终止请求确认。

LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)

TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。
TIME_WAIT 两个存在的理由:
          1.可靠的实现tcp全双工连接的终止;
          2.允许老的重复分节在网络中消逝。

CLOSED:不在连接状态(这是为方便描述假想的状态,实际不存在)
9.如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

10.TCP和UDP的区别

TCP(面向连接、可靠的、基于字节流的传输控制协议):TCP用于应用程序之间的通信。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流,分成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元MTU的限制)
可靠的
  TCP为保证报文的传输的可靠,就给每个包一个序号,同时序号保证传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,难么对应的数据将会重传。为保证数据正确性和合法性,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;在保证可靠性,采用超时重传和捎带确认机制;流量控制上,采用滑动窗口协议,未经确认的分组需要重传。
面向连接的
三次握手、四次挥手
UDP(面向无连接的):面向无连接的用户数据报UDP协议,UDP的传送不保证数据不到达目的地,也不保证数据报的顺序,不提供重传机制;提供面向事务的简单的不可靠信息传送服务,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。UDP的报头由四个域组成,每个域各占用2个字节,分别为:源端口号;目标端口号;数据报长度;校验值;应用程序访问UDP层然后使用IP层传送数据报;IP层的报头指明了源主机和目的主机地址,而UDP层的报头指明了主机上的源端口和目的端口。UDP适合包总量较少的通信,如DNS,SNMP等。
在这里插入图片描述
TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的。
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

11.DNS域名系统,简单描述其工作原理。

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。
  在这里插入图片描述
  DNS的工作原理,以www.qq.com举例说明:
参考链接:
https://blog.csdn.net/zhouyongku/article/details/53694415
当 DNS 客户机需要查询程序中使用的名称时,它会查询本地DNS 服务器来解析该名称。客户机发送的每条查询消息都包括3条信息,以指定服务器应回答的问题。
指定的 DNS 域名,表示为完全合格的域名 (FQDN) 。
指定的查询类型,它可根据类型指定资源记录,或作为查询操作的专门类型。
DNS域名的指定类别
  对于DNS 服务器,它始终应指定为 Internet 类别。例如,指定的名称可以是计算机的完全合格的域名,如im.qq.com,并且指定的查询类型用于通过该名称搜索地址资源记录。
  DNS 查询以各种不同的方式进行解析。客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回至客户机。这个过程称为递归。
另外,客户机自己也可尝试联系其他的 DNS 服务器来解析名称。如果客户机这么做,它会使用基于服务器应答的独立和附加的查询,该过程称作迭代,即DNS服务器之间的交互查询就是迭代查询
在这里插入图片描述
  1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

12.在浏览器中输入www.baidu.com后执行的全部过程

参考链接:
https://blog.csdn.net/qq_16681169/article/details/50866290
网络模型的角度来分析问题的,主要涉及应用层:DNS,HTTP,传输层:TCP,网络层:IP和路由选择协议:RIP,OSPF(内部网关协议),BGP(外部网关协议)和数据链路层:ARP。
(1)应用层:客户端浏览器通过DNS(应用层协议)解析到www.baidu.com的IP地址220.181.27.48通过这个IP地址找到客户端到服务器端的路径。客户端浏览器发起一个HTTP会话到220.181.27.48,然后通过TCP进行封装数据包,输入到网络层。
DNS解析ip:
在这里插入图片描述
HTTP访问服务器:
在这里插入图片描述
(2)传输层:在客户端的传输层,把http会话请求分成报文段,添加到源和目的端口,如服务器使用80端口监听客户端请求,客户端由系统随机选择一个端口如5000端口,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后通过IP层的IP地址查找目的端。
在这里插入图片描述
(3)客户端的网络层不用关心应用层或传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是路由器来完成的工作。
在这里插入图片描述
(4)客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器地址。

13.各种协议的介绍

ICMP协议(网络层协议)控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。(ping、tracert
内部网关协议
(1)RIP(内部网关协议)
  RIP是一种基于距离向量的路由选择协议,RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。距离指经过路由器的个数。
(2)OSPF(开放式最短路径优先)
  OSPF是目前广泛使用的一种动态路由协议,它属于链路状态路由协议。通过可靠的泛洪与自治系统AS(Autonomous System)内的其他路由器周期性交互,学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路由器注入其他AS的路由信息。
实现过程:

  • 初始化形成端口初始信息:在路由器初始化或网络结构发生变化(如链路发生变化,路由器新增或损坏)时,相关路由器会产生链路状态广播数据包LSA,该数据包里包含路由器上所有相连链路,也即为所有端口的状态信息。
  • 2、路由器间通过泛洪(Floodingl机制交换链路状态信息:各路由器一方面将其LSA数据包传送给所有与其相邻的OSPF路由器,另一方面接收其相邻的OSPF路由器传来的LSA数据包,根据其更新自己的数据库。
  • 3、形成稳定的区域拓扑结构数据库:OSPF路由协议通过泛洪法逐渐收敛,形成该区域拓扑结构的数据库,这时所有的路由器均保留了该数据库的一个副本。
  • 4、形成路由表:所有的路由器根据其区域拓扑结构数据库副本采用最短路径法计算形成各自的路由表
    外部网关协议
    BGP(边界网关协议):
    BGP是不同自治系统(AS)的路由器交换路由信息的协议。边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由。
    BGP交换路由信息:
      一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话(session),利用BGP会话交换路由信息。使用TCP连接能提供可靠的服务也简化了路由选择协议。使用TCP连接交换路由信息的两个BGP发言人,彼此成为对方的邻站或对等站。
14.了解交换机、路由器、网关的概念,并知道各自的用途。

(1)交换机(数据链路层)
  它可以为接入交换机的任意两个网络节点提供独享的电信号通路,交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。
(2)路由器(网络层)
  路由器是一种计算机网络设备,提供了路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host与host之间的传输路径),这个过程称为路由,将路由输入端的数据包移送至适当的路由器输出端(在路由器内部进行),称为转送。
路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的路线。
(3)网关(网络层)
  网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值