java面试--计算机网络

 计算机网络体系结构

java面试--计算机网络_第1张图片

 计算机网络五层体系结构

1、应用层

应用层的任务是通过应用进程之间的交互来完成特定网络应用。应用层协议定义的是应用进程之间的通信与交互规则。对于不同的网络应用需要不同的用用层协议。比如DNS(域名系统),HTTP协议,支持电子邮件的SMTP协议等等。应用层交互的数据单元为报文。

  1. 域名系统:作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网不必记住IP地址。
  2. HTTP协议(超文本传输协议):所有的www文件都得遵循HTTP协议,涉及HTTP是为了提供一种帆布和接收HTML页面的方法
  3. SMTP协议:

2、传输层

传输层的主要任务就是负责向两台主机的进程之间的通信提供通用的数据传输服务。应用进程利用该服务传输应用层报文,“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。传输层具有复用(多个应用层进程同时使用传输层服务)与分用(传输层将相应的数据报分别交付到相应的进程)的功能。在传输层中主要有两种协议UDP与TCP协议

  1. UDP:UDP是无连接的;UDP尽最大努力交互但是不保证可靠交付;UDP是面向报文的;UDP没有拥塞控制,因此出现网络拥挤的时候,也不会降低源主机的放发送速率(实时视频会议,IP电话);UDP支持一对一,一对多,多对一,多对多;UDP的首部开销小,只有8个字节。TCP首部为20~60个字节不等。
  2. TCP:TCP是面向连接的;TCP提供可靠交付,通过TCP传输的数据无差错,不丢失,不重复,有序;每一个TCP连接只能有两个端点,是一对一的;TCP是面向字节流的;TCP提供全双工通信,TCP允许通信的双方的应用进程在任何时候都可以接收或发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;

3、网络层

网络层的任务为实现两个主机系统之间的数据透明传输,其实现了同一个子网的其具体功能有路由,路由选择,逻辑寻址。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、ICMP(因特网控制报文协议),IGMP(因特网组管理协议)

网络层中,不仅负责对子网之间的数据包进行路由选择,另外,网络层还可以拥塞控制,国际互连等功能;其基本数据单位为IP数据报;其重要的设备为路由器。

4、数据链路层

数据链路层最基本的服务为将源自网络层的数据可靠的传输到相邻节点的网络层。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装程帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。数据的基本单位是帧。主要的协议为以太网协议。主要的设备为网桥和交换机

5、物理层

 物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。其主要设备为集线器与中继器

每一层的协议如下

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

应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS、DHCP

java面试--计算机网络_第2张图片

其中,基于TCP的有:
Telnet(Teletype over the Network, 网络电传) ,通过一个终端(terminal)登陆到网络。FTP(File Transfer Protocol, 文件传输协议) ,由名知义。SMTP(Simple Mail Transfer Protocol,简单邮件传输协议) ,用来发送电子邮件。POP3(Post Office Protocol 3)邮件读取协议,协议通常被用来接收电子邮件。HTTP。HTTPS

基于UDP的有:
NFS(网络文件系统)。TFTP。SNMP(Simple Network Management Protocol, 简单网络管理协议) ,用于网络信息的收集和网络管理。DHCP。NTP(Network Time Protocol,网络时间协议) ,用于网络同步。BOOTP(Boot Protocol,启动协议) ,应用于无盘设备
基于UDP和TCP的有:
DNS(Domain Name Service,域名服务) ,用于完成地址查找,邮件转发等工作
ECHO(Echo Protocol, 回绕协议) ,用于查错及测量应答时间

 

 三次握手与四次挥手

1、三次握手

java面试--计算机网络_第3张图片

 为什么要三次握手?为了建立可靠的通信通道。

第一次握手:Client什么都不能确认,Server确认了对方的发送正常

第二次握手:Client确认了自己的发送,接受正常,对方的发送,接收正常;Server确认了自己接收正常,对方的发送正常

第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送接收正常

为什么传回syn? 

为了告诉发送端,我接收到的信息确实是你发送的信号 

传了 SYN,为啥还要传 ACK?

传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。

四次挥手

java面试--计算机网络_第4张图片

  1.  客户端发送一个FIN,用来关闭客户端到服务器的数据传送
  2. 服务器收到FIN,发挥一个ACK,确认序号为收到的序号加1
  3. 服务器关闭与客户端之间的链接,发送一个FIN
  4. 客户端返回ACK报文确认,并将确认序列号设置为收到的序列号+1

为什么要四次挥手?

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

为什么是2倍的MSL?

  • 原因一:保证TCP全双工连接的可靠释放

解析:假设场景为客户端主动向服务器发起断开连接,假如在主动方(客户端)最后一次发送的ACK在网络中丢失,根据TCP的超时重传机制,被动方(服务器)需要重新向客户端发送FIN+ACK,在FIN未达到之前,必须维护这条连接;并且要接收到客户端发出的ACK确认后才能终止连接;如果直接在重传的FIN到达之前而关闭连接,当FIN到达后会促使客户端TCP传输层发送RST重新建立连接,而本质上这是一个正常断开连接的过程。

  • 原因二:为了使就得数据包在网络中因过期而失效

 解析:假设没有time_wait状态时,A刚刚与B断开连接,C又以和A相同的ip和port和B建立起连接,TCP协议栈无法区分A和C是不同的连接, 这时,A连接发送的数据到达B之后会被B的TCP传输层当做当下正常的连接发来的数据进行处理,实际上这时上一条连接的脏数据;所以在time_wait等待2MSL(报文在网络最大生存时间),将此连接的数据全部收到并丢弃,才能保证这些数据不会造成错误;

TCP如何保证可靠传输?

  • 应用数据被分割成TCP认为最适合发送的数据块。

  • 超时重传: 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

  • TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。

  • 校验和: TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。

  • TCP的接收端会丢弃重复的数据。

  • 流量控制: TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的我数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。 (TCP利用滑动窗口实现流量控制)

  • 拥塞控制: 当网络拥塞时,减少数据的发送。①窗口机制:通过调节窗口的大小实现对发送数据速率的调整。②窗口调整的基本策略:AIMD(Additive Increase,Multiplicative Decrease)加性增加,乘性减少;网络未发生拥塞时,逐渐“加性”增加窗口大小,当网络拥塞时“乘性”快速减小窗口大小。③TCP的拥塞控制算法:包括了慢启动拥塞避免快速重传快速恢复4部分。

  • 停止等待ARQ协议(stop and wait) 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组
     

在浏览器中输入url地址 ->> 显示主页的过程?

 

java面试--计算机网络_第5张图片

java面试--计算机网络_第6张图片

 

各种协议与HTTP协议之间的关系

java面试--计算机网络_第7张图片

 

 HTTP长连接、短连接

在HTTP1.0中,默认使用的是短连接,即客户端与服务器每进行一次HTTP请求,就会建议一次链接。任务结束链接就中断。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

从HTTP1.1起,默认使用长连接,会在响应头加入如下代码:

Connection:keep-alive

 Http1.0,Http1.1,Http2.0

点击查看详情

 HTTP与HTTPS的区别

Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;
Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。Https的加密机制是一种共享秘钥加密和公开秘钥加密并用的混合加密机制
二者存在以下不同:

  • 端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
  • 资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
  • 开销:Https通信需要证书,而证书一般需要向认证机构购买;

HTTP中Cookie和Session的作用和区别?

HTTP协议是一种无状态协议,在数据交换完毕后,服务端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。此时,服务器无法从链接上跟踪会话。cookie和session可以跟踪会话,弥补HTTP无状态协议的不足。session机制采用的是在服务端保持状态的方案,而cookie机制则是在客户端保持状态的方案

cookie原理

  • 服务器创建cookie对象,把会话数据存储到cookie对象中;

  • 服务器发送cookie信息到浏览器;

  • 浏览器得到服务器发送的cookie,然后保存在浏览器端;

  • 浏览器在下次访问服务器时,会带着cookie信息;

  • 服务器接收到浏览器带来的cookie信息。

Session原理:

  • 第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID;

  • 把JSESSIONID作为Cookie的值发送给浏览器保存;

  • 第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器;

  • 服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象;

  • 如果找到对应编号的session对象,直接返回该对象;

  • 如果找不到对应编号的session对象,创建新的session对象。

 

 

于2020/10/10完成

参考链接:

https://www.imooc.com/article/286193

https://www.imooc.com/article/309775

https://www.imooc.com/article/68603

https://www.imooc.com/article/48819

 

 

状态码

你可能感兴趣的:(春招)