计算机网络复习(二)

接上一篇计算机网络复习(一)

HTTP的报文结构

在这里插入图片描述

HTTP的请求协议有哪些

在这里插入图片描述

HTTP的状态码

在这里插入图片描述

Session和Cookie的区别

  • 储存位置:Cookie是客户端会话技术,数据保存在客户端,Session是服务器端会话技术,数据保存在服务器端;
  • 存储容量:Cookie一般小于4KB,Session无限制;
  • 跨域支持:Cookie支持跨域,Session不支持;

Cookie的知识点

概念

客户端会话技术,将数据保存在客户端。

使用步骤

  1. 创建Cookie对象,绑定数据:new Cookie(Cookie cookie) ;
  2. 发送Cookie对象:response.addCookie(Cookie cookie) ;
  3. 获取Cookie,拿到数据:Cookie[] request.getCookies() ;

实现原理

基于响应头的set-cookie和请求头cookie实现。

关于Cookie的一些细节

  • 一次可不可以发送多少个Cookie?
    • 可以,可以创建多个Cookie对象,使用response调用多次addCookie方法发送多个Cookie;
  • Cookie在浏览器中保存多长时间?
    • 默认情况下,当浏览器关闭,Cookie数据被销毁

Cookie的持久化存储

cookie.setMaxAge(int seconds)
正数:将Cookie数据写到硬盘的文件中,持久化存储;
负数:默认情况;
0:删除Cookie;

Cookie能不能存中文

在tomcat 8之前不能存储,tomcat 8之后可以。

Cookie的共享问题

同一个Tomcat服务器多个项目之间Cookie的共享问题

假设在一个tomcat服务器,部署了多个项目,那么在这些项目中Cookie能不能共享?
默认情况下不能共享。
setPath(String path):设置Cookie的取值范围,默认情况下,设置当前虚拟目录,如果要共享,可以将path设置为“/” 。

不同的tomcat服务器间Cookie的共享问题

setDomain(String path):如果设置一级域名相同,那么多个服务器之间Cookie可以共享
Cookie的特点和作用

Cookie特点:

  1. Cookie储存数据在客户端浏览器;
  2. 浏览器对於单个Cookie的大小有限制(4KB)以及对于同一域名下的总Cookie数量也有限制(20个);

Cookie的作用:

1.Cookie一般用于存储少量的不太敏感的数据;
2.在不登陆的情况下,完成服务器对客户端的身份识别;

如何设计API的安全性

  • Token授权机制
  • 时间戳超时机制
  • 签名机制
  • 拒绝重复调用

HTTP攻击有哪些

  • 跨站脚本攻击(XSS)
  • Dos攻击
  • SQL注入攻击
  • OS命令注入攻击
  • HTTP头部攻击
  • 目录攻击
  • 开放重定向攻击

HTTP和WebSocket的联系和区别,什么情况下用WebSocket

HTTP1.x是半双工通信,客户端请求服务器响应,是无状态的,如果要实现实时通讯需要长轮询或者长连接的方式,这两种方式带来资源浪费。WebSocket是HTML5以后基于TCP协议应用层的一种全双工实时通讯协议。客户端和服务端可以进行信息的相互传递。它是借Http请求产生握手,在Http的头部会包含WebSocket协议的请求,所以握手之后,协议进行一个升级,转成TCP协议进行交流。WebSocket可以应用于聊天和即时信息。

WebSocket通信流程

  1. 建立socket通信,包括客户端和服务器端创建套接字(socket方法),服务器端绑定端口(bind方法),建立监听(listen方法),客户端创建连接(connect方法);
  2. TCP三次握手建立连接;
  3. 客户端服务器端收发数据(send方法、recv方法),读写数据(read方法、write方法);
  4. TCP四次挥手关闭连接;
  5. 关闭socket(close方法);

Socket编程主要大的步骤

  1. 创建套接字(socket方法);
  2. 客户端建立连接(connect方法),服务器端绑定端口(bind),建立监听(listen方法);
  3. 写入数据(write方法),发送数据(send方法),接收数据(recv方法)读取数据(read方法);
  4. 关闭连接(close方法);

DHCP原理

DHCP是动态主机配置协议,服务器端控制了一个范围内的IP地址,当客户端访问服务端的时候,客户端就可以自动获得服务端控制的该范围内的某一个IP地址并使用。
在这里插入图片描述
在这里插入图片描述

  1. DHCP服务器被动打开UDP端口67,等待客户端发来的报文。
  2. DHCP客户从UDP端口68发送DHCP发现报文。
  3. 凡收到DHCP发现报文的DHCP服务器都发出DHCP提供报文,因此DHCP客户
    可能收到多个DHCP提供报文。
  4. DHCP客户从几个DHCP服务器中选择其中的一个,并向所选择的DHCP服务器
    发送DHCP请求报文。
  5. 被选择的DHCP服务器发送确认报文DHCPACK。从这时起,DHCP客户就可以使
    用这个IP地址了。这种状态叫做已绑定状态
    DHCP客户现在要根据服务器提供的租用期T设置两个计时器T]和T2,它们的超.
    时时间分别是0.5T和0.875T。当超时时间到了就要请求更新租用期。,
  6. 租用期过了一半(T1时间到),DHCP发送请求报文DHCPREQUEST要求更新租
    用期。
  7. DHCP服务器若同意,则发回确认报文DHCPACK。DHCP客户得到了新的租用
    期,重新设置计时器。
  8. DHCP服务器若不同意,则发回否认报文DHCPNACK。这时DHCP客户必须立即
    停止使用原来的IP地址,而必须重新申请IP地址(回到步骤2)。
  9. 若DHCP服务器不响应步骤6的请求报文DHCPREQUEST,则在租用期过了
    87.5%时(T2 时间到),DHCP客户必须重新发送请求报文DHCPREQUEST (重复
    步骤6),然后又继续后面的步骤。
  10. DHCP客户可以随时提前终止服务器所提供的租用期,这时只需向DHCP服务器发
    送释放报文DHCPRELEASE即可。

DNS域名系统

DNS 被设计为一个联机分布式数据库系统,并采用客户服务器方式。DNS 使大多数名字都在本地进行解析,仅少量解析需要在互联网上通信,因此 DNS 的效率很高。由于 DNS 是分布式系统,即使单个计算机出现了故障也不会妨碍到整个 DNS 系统的正常运行。

DNS解析过程

主机—>本地域名服务器—>根域名服务器

  • 主机向本地域名服务器的查询一般都采用递归查询,递归查询指如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份向其他根域名服务器继续发出查询请求报文。递归查询额结果是要查询的 IP 地址,或者是报错,表示无法查询到所需的 IP 地址。
  • 本地域名服务器向根域名服务器查询通常采用迭代查询,迭代查询指当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉它该向哪一个域名服务器进行查询。本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文设置的查询方式。
    在这里插入图片描述
    在这里插入图片描述

FTP的两种模式

主动和被动都是相对于服务端而言的;

  • 主动模式:服务端主动建立数据连接;服务端的端口号是20;客户端的端口号随机,但是必须大于1024,因为0-1023都是熟知端口号;
  • 被动模式:客户端主动建立数据连接;客户端的端口号由客户端自己指定,服务端的端口号随机;

三、传输层

TCP三次握手(建立连接)

在这里插入图片描述
TCP是全双工通信,任何一方都可以发起建立连接的请求,假设A是客户端,B是服务器。

  • 初始状态:初始时A和B均处于CLOSED状态,B会创建传输进程控制块TCB,然后处于LISTEND状态,监听端口是否收到了TCP请求以便及时响应。
  • 第一次握手:当A要发生数据时,就向B发送一个连接请求报文,TCP规定连接请求报文的SYN=1,ACK=0,SYN表示synchronization(同步信号位,也可理解为建立连接),ACK表示acknowledgement(确认标志位),SYN不可以携带数据,但要消耗一个序号,此时A发送的序号seq假设为x。发送完之后,A就进入了SYN-SENT同步已发送状态。
  • *第二次握手:当B收到了A的连接请求报文后,如果B同意建立连接,会发送给A一个确认连接请求报文,其中SYN=1,ACK=1,ack=x+1,seq=y,ack的值为A发送的序号加1,ACK可以携带数据,如果不携带的话,则不消耗序号。发送完之后,B进入SYN-RCVD 同步已接收状态。
  • 第三次握手:当A收到了B的确认连接请求报文后,还要对该确认再进行一次确认,报文的ACK=1,ack=y+1,seq=x+1,发送之后A处于established状态,当B接收到该报文后也进入established状态。

为什么要三次握手?

  1. 第二次握手时A知道了自己的发送和接收是没有问题的,如果没有第三次握手,那么服务端B是不知道自己的发送有没有问题,所以要有第三次握手。
  2. 三次握手为了防止了已失效的连接请求问题,假设这样一种正常情况,A发送的第一个连接请求报文丢失了,之后超时重传,建立了连接,通信之后释放了连接。但假设A第一个发送的连接请求报文并没有丢失,而是在网络中某结点停滞了,之后又到达了B。如果是两次握手,此时B会以为是A请求建立连接,同意之后并不会收到任何数据,因为A已经关闭了,此时B的资源就会被白白浪费。

TCP四次挥手(断开连接)

在这里插入图片描述

  • 第一次挥手:当A已经没有要发送的数据了,决定释放连接,就会发送一个终止连接报文,其中FIN=1,seq=u,u的值为之前A发送的最后一个序号+1。此时A进入FIN-WAIT-1状态。
  • 第二次挥手:B收到该报文后,发送给A一个确认报文,ACK=1,ack=u+1,seq=v,v的值为B之前发送的最后一个序号+1。此时A进入了FIN-WAIT-2状态,但B进入了CLOSE-WAIT状态,但连接并未完全释放,B会通知高层的应用层结束A到B这一方向的连接,此时TCP处于半关闭状态。
  • 第三次挥手:当B发送完数据后,准备释放连接时就向A发送连接终止报文,FIN=1,同时还要重发ACK=1,ack=u+1,seq=w(在半关闭状态B可能又发送了一些数据)。此时B进入LAST-ACK状态。
  • 第四次挥手:A收到连接终止报文后还要再进行一次确认,确认报文中ACK=1,ack=w+1,seq=u+1。发送完之后进入TIME-WAIT状态,等待2MSL之后进入CLOSED状态,B收到该确认后也进入CLOSED状态。

为什么要有TIME_WAIT?

  1. 为了保证在四次挥手中A端的最后一次发送的ACK确认报文能够达到B端。因为这个ACK确认报文有可能会丢失,那么A如果不在TIME_WAIT状态等待2MSL,A发送完确认以后,A就进入CLOSED状态,即A关闭了;如果这个确认丢失了,那么B就无法收到确认,B也就无法进入CLOSED状态。所以需要有TIME_WAIT。
  2. 2MSL时间之后,本连接中的所有报文就都会从网络中消失,防止出现三次握手中的已失效的连接请求问题,影响下一次的TCP连接。

ack的值与seq的关系

  • 建立连接:ack=seq+1;
  • 传输数据:ack=seq+传输的数据的字节数+1;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章