计算机网络及JavaWeb

1)“四层/五层/七层”网络模型

  

 

  各层作用:

 

物理层:

 在物理媒介上进行传输数据,常用设备:网卡。

 

 

 

数据链路层:

 提供介质访问和链路管理(MAC地址),常用设备:网桥、交换机。

 

 

 

网络层:

 IP选址及路由选择,主要核心就是路由器的功能,例如路由(规划路线)、存储(缓存接收包)、转发拥塞控制等。

 

 

 

传输层:

 

   传输单位是,负责向两个主机中进程之间的通信提供服务,传输层的数据单元为数据包,TCP的数据单元称为,而UDP协议的数据单元称为“数据报”。传输层主要使用两种协议:传输控制协议TCP(面向连接的,可靠的交付)、用户数据报协议UDP(无连接的、尽最大努力的交付)。

 

 

会话层:

 不参与具体的传输,用于创建和管理会话。

 

 

表示层:

 主要解决信息的语法表示问题。

 

 

应用层:

 为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。

 

 

 

 

 


 

2)分层的作用

 

作用:有助于简化网络,方便网络的设计、建设和研究。

 

 

 

 


 

3)路由器与交互机的区别

  

(1)工作层次不同:交换机工作在数据链路层,路由器工作在网络层

 

(2)数据的转发对象不同:交换机是根据MAC地址转发数据帧,路由器则是根据IP地址来转发IP数据报/分组

 

(3)功能不同:交换机主要用于局域网内的数据转发,路由器主要负责让主机连接局域网和外网

 

 

 

 


 

4) TCP/UDP的对比与适合的场景

 

 

 

 


 

5) TCP三次握手,四次挥手

 

"三次握手":

 

  作用:用于建立客户端和服务端之间的连接。

 

 

第一次握手:

   客户端发起建立连接,会发送SYN包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认。

 

 

第二次握手:

     服务器收到SYN包,确认客户端的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,服务器进入SYN_RECV状态。(此时说明客户端的发送能力和服务器的接收能力没问题,但是不确定客户端的接收能力和服务器的发送能力,因此要进行第三次握手)

 

 

第三次握手:

      客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(连接成功)状态,完成三次握手。(该握手保证了客户端的接收能力和服务器的发送能力没问题)

 

 

 

 

"四次挥手":

 作用:用于释放客户端和服务器之间的连接。

    

  

第一次挥手:

  客户端发出连接释放报文,并且停止发送,释放数据报文首部,FIN=1seq=u,此时,客户端进入FIN-WAIT-1终止等待1)状态。

 

第二次挥手:

  服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,携带自己的序列号seq=v,此时,服务器进入了CLOSE-WAIT关闭等待)状态(TCP服务器会通知应用进程,这时客户端向服务器的方向就释放了,该状态会持续一段时间,因为服务器若发送数据,客户端依然要接收),客户端收到服务器的确认请求后,此时,客户端进入FIN-WAIT-2终止等待2)状态,等待服务器发送连接释放报文。(在这之前还需要接收服 务器发送的最后的数据)。

 

第三次挥手:

  服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1ack=u+1,由于此时处于半关闭状态,服务器可能又发送了一些数据,假定此时的seq=w,此时,服务器就进入LAST-ACK最后确认)状态,等待客户端的确认。

 

第四次挥手:

  客户端收到服务器的连接释放报文,发出确认,ACK=1ack=w+1,而自己的序列号seq=u+1,此时,客户端进入TIME-WAIT时间等)状态,(注意此时TCP连接并没有释放,必须经过2MSL(最大报文段生存时间)才能返回到CLOSE状态,因为网络不可靠,有可能最后一个ACK丢失,若在2MSL 里面没有再次收到服务器的FIN,说明ACK被服务器接收了,则结束TCP连接

 

 

 

 


 

6) TCP的流量控制与拥塞控制分别是做什么的?

 

流量控制:

 

问题:

  双方在通信时,当发送方与接收方的速率不一致时,接收方会将未处理的数据存放在缓冲区,如果缓冲区满了,而发送方仍然在发送大量的数据,接收方就会从缓冲区中丢掉数据,导致浪费大量的网络资源

 

目的:为了防止接受方的缓冲区大小不够发生溢出,所以减小接收窗口。

 

方式:使用滑动窗口协议,即接收方在TCP报文的窗口字段限制发送方的发送速率。(是点对点的通信量控制)

 

 

拥塞控制:

 

问题:当发送方发送大量的数据会注入到网络,如果没有限制,网络就会就会超负荷变卡。

 

目的:防止过多的数据注入网络,造成网络中的路由器过载。

 

方式:发送方自己检测网络的状态,如遇到超时、重复确认包时,对拥塞窗口进行调整。拥塞控制的有四种算法:慢开始拥塞避免快重传快恢复。

        

 

 

 


 

7) 什么是滑动窗口协议

 

滑动窗口协议:

  发送方和接收方各有一个缓存数组,发送方存放着:已发送且成功确认包序号、已发送未确认包序号 ,未发送包序号。接收方存放着:已接受包序号、正在接收包序号、未接收包序号。每个数组有个两个扫描指针,开头和结尾,一起向后扫描,两者形成一个窗口,所以被称为窗口协议

  

 

主要有两类协议: 

 GBN(回退N重传协议):

  GBN协议的确认是累积确认,例如,窗口大小为4,则传输0,1,2,3四个数据包,若发送方收到0,1的确认包,则继续发送4,5的数据包,若此时超时未收到2的数据包,则会重新发送2,3,4,5的数据包

 

 SR(选择重传协议):

  设置缓存机制,例如,窗口大小为4,发送0,1,2,3,当发送方收到0,1的确认包,就继续发送4,5的数据包,接收方此时会缓存4,5的数据包,当发送方接收2的确认包时间超过规定时间,就只需要重新发送2的数据包,不需要重新发送4,5的数据包                                                                                   

 

 

 


 

8)拥塞控制四种算法

 

1、慢开始

  将拥塞窗口(cwnd)的值设为1,发送方先发送一个数据报文段,接收方收到后发送一个确认报文段,发送方接收到确认报文段后,拥塞窗口的值加倍增大变为2(该过程就是一个RTT)。经过多个RTT后,拥塞窗口的大小变为16,达到慢开始的限值,之后改用拥塞避免算法。

 

 

 

2、拥塞避免

 

超时重传机制:

  在发送一个数据之后,就开启一个计时器,若是在这个时间内没有ACK确认报文,则对这个数据报文段进行重传,当达到一定次数后还没有成功,就会放弃并发送一个复位信号。

 

过程:

  开启拥塞避免之后,拥塞窗口(cwnd)的值每次只能线性加1,就像(16+1.....24)直到24,假设24个报文段在传输过程中丢失了4个,接收方只收到20个报文段,就只能给发送方回复20个确认报文段,一段时间后,丢失的4个报文的重传计时器超时,发送方就判断可能出现拥塞,就更改cwndssthresh,并重新开始慢开始算法。

 

 

 

3、快重传

  发送方先发送1号报文段,在接收方回复1号确认报文段的时候,发送方可以继续发送2号报文段,发送方发送到3号报文段时,发生丢失,此时接收方未收到3号报文段,因此向发送方重复发送2号确认报文段,发送方收到2号确认报文段后继续发送4号,5号报文段,接收方没有收到3号报文段,故重复发送了三次2号确认报文段,这时发送方收到了三次2号确认报文段,判断3号报文段丢失,就立即重传3号报文段,接收方收到3号报文段后,就会把最后一个5号确认报文段回复给发送方,表明序号到5为止的报文段都收到了。

 

 

4、快恢复

  发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段,于是不开启慢开始算法,而执行快恢复算法:

     · 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半,开始执行拥塞避免算法

     · 或者将快恢复开始时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh+3。

 

 

 

 

 


 

9)HTTP请求报文与响应报文的组成部分

 

 

请求报文组成部分:

 

  请求行:请求方法、URL、以及协议版本  例如:POST /search?source=baidu HTTP/1.1

         · 其中常见的请求方法有:GET、POST、PUT、DELETE

 

  请求头:为请求报文添加一些信息,由"名/值"对组成,每行一对,名和值之间使用冒号隔开

      例如:Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel    

          Accept-Language: zh-cn  

 

  空行:最后一个请求头之后是一个空行,通知服务器以下不会再有请求头

 

  请求数据:请求体(在POST、PUT方法中支持传递请求体,GET、HEAD不支持)例如:{"name":"zhangsan","sex":"man"}

 

 

 

响应报文组成部分:

 

  状态行:由HTTP协议的版本、响应状态代码、状态代码的文本描述三部分组成,例如:HTTP/1.1 200 OK

 

  响应头:描述服务器的基本信息,以及数据的描述

 

  响应正文:传递的数据

 

 

 


 

10)常见的HTTP响应状态码

 

  1xx——信息类:表示收到http请求,正在进行下一步处理。

 

  2xx——成功类:表示用户请求被正确接收、理解和处理。

      · 200(OK):请求成功

      · 201(Created):已创建

 

  3xx——重定向类:表示没有请求成功,必须采取进一步的动作。

      · 301 (Moved Permanently):资源被永久移动

      · 302 (Found):资源临时移动

 

  4xx——客户端错误:表示客户端提交的请求包含语法错误或不能正确执行

      · 400 (Bad Request):客户端请求地址不存在或者包含不支持的参数

      · 401 (Unauthorized):未授权,或认证失败。对于需要登录的网页,服务器可能返回此响应状态码

      · 403 (Forbidden):没权限,服务器收到请求,但拒绝提供服务

      · 404 (Not Found):请求的资源不存在。例如请求的url错误

 

  5xx——服务端错误:表示服务器不能正确执行一个正确的请求

 

 

 

 


 

11)GET与POST的区别

 

 POST更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)

 

 POST发送的数据更大(GET有url长度限制,这里的限制是指浏览器对url长度的限制,不是HTTP协议对url长度的限制)

 

 POST能发送更多的数据类型(GET只能发送ASCII字符)

 

 POST比GET慢(因为GET会把Header和Data一并发送出去,服务器响应200,ok;POST先发送Header先响应100,continue,再发送Data,响应200,ok)

 

 POST可以通过URL传值和请求体传值,GET只能通过URL传值

 

 

 


 

12)session是如何实现的

 

 session,也叫会话,一个浏览器窗口从打开到关闭可以叫一次会话。

 

 常用的实现方式为Cookie实现:客户端浏览器请求服务器,如果服务器需要记录该用户的状态,就会用response向客户端浏览器发送一个Cookie,浏览器会把这个Cookie保存起来,当再次请求服务器的时候,就会把这个Cookie也提交给服务器,服务器就会检查这个Cookie,以此来辨认用户状态。(注意:Cookie不能跨域)

 

 

 


 

13)session与cookie的区别

 

 session数据保存在服务端,cookie数据保存在客户端。

 

 cookie是session的一种实现方式,session还有其他实现方式。

 

 cookie安全性低(可能遇到CSRF攻击),session安全性高。

      

 


 

14)HTTP 1.1/2.0 做了哪些改进

 

 1、2.0采用了二进制格式解析

 

 2、2.0是完全多路复用,而非有序阻塞,即只需要一个连接即可实现并行

 

 3、压缩了Header,减少了Header(例如,每次不会改变的UserAgent、Cookie等,第一次请求时,会发送全部Header,后面再次请求,就会减少冗余数据)

 

 4、服务器主动推送响应到客户端缓存中

 

 

 


 

15)Servlet的生命周期

 

四个阶段:

 

加载和实例化阶段:由servlet容器负责,可以发生在容器启动时,也可以发生在有请求需要处理时。

 

初始化阶段:调用init()方法,只运行一次。

 

响应客户请求阶段:调用service(()方法,根据请求方法,分别执行doGET(),doPOST()等抽象方法。

 

终止阶段:调用destroy()方法,只运行一次。

 

  注意servlet线程不安全

 


 

16)servlet与tomcat的关系

  

servlet:处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,由容器托管,用于生成动态内容。 

servlet容器:是web容器的一部分,提供基于请求/响应发送模型的网络服务

web容器:也叫web server,提供web服务的软件程序

 

关系: 

 tomcat即是Web容器,也是Servlet容器,

 tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户. 

 Servlet是一种运行在支持Java语言的服务器上的组件,并且不能单独运行,必须运行在servlet容器内,且servlet容器需要配合web容器

 

 

从HTTP协议的请求和响应可知,浏览器发出的请求是一个请求文本,接收的也是一个响应文本,其中的过程实现:

  当浏览器发送一个HTTP请求到web服务器后,web服务器会接收请求并且交给servlet容器处理,

  servlet容器根据servle配置选择相应的servlet,并使用代表请求和响应对象的参数进行调用。

  servlet通过请求对象得到请求头、请求行、请求体参数。servlet就执行编写的逻辑,然后动态产生响应内容发送回客户端

  servlet完成请求的处理后,将控制权还给web服务器。

 

 

 


 

17)为什么tomcat既是web容器又是servlet容器

 

  因为启动tomcat后,它会读取server.xml配置文件,启动配置的web应用,当从浏览器发送一个HTTP请求,tomcat作为web容器就会接收这个请求及对应的参数,为每个应用创建了一个servletContext对象,这个servletContext对象是由servlet容器生成,用来处理请求和响应结果给浏览器,所以tomcat既是一个servlet容器也是一个web容器

  

       

posted @ 2022-01-25 21:43  Zsbinup  阅读(95)  评论(0)    收藏  举报