http请求报文,响应报文

 

301 Moved Permanently 和 404 Not Found

301,服务器会返回新的 URL,客户端应该用新的 URL 进行访问。

 

502 错误意味着代理服务器和上游服务器无法通信,比如上游服务器故障

504 Gateway Time-out 上游服务器响应超时

 

HTTP 的 Keep-Alive 参数--->长连接

 

 

  ⚠️数据在经过 TCP 传输时,由于网络层或者传输层的限制,被分成多个小包发送到接收端,服务器先收到一个消息头,里面包含了

Content-Length ,  后续会收到多个数据包,数据包有自己在数据流的序列号,服务器按照序列号重新组装数据,通过content-length

可以知道某个消息是否全部收完

粘包解决方式:

  • 利用"Content-Length"等协议字段明确数据的长度,这样知道何时收到了完整的数据。等

一个进程可以通过监听(bind)某个端口来接收来自客户端的网络请求

 

 

http为什么不安全?明文传输

 

HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,  防止篡改,加密传输,身份验证

 

https比较http?  加入SSL/TLS更安全,端口不同(443),有数字证书身份验证

 

https握手? client和server三次握手通信,向对方发送一个自己生成的随机数(Client Random、Server Random、pre-master key),

而且约定一个后面使用的加密算法。

 

第四次握手,双方都用加密算法生成本次通信的「会话秘钥,  以后通信都会使用它

https防范中间人攻击?中间人攻击的关键在于攻击者冒充服务器与客户端建立连接 ,https四次握手保证安全(比如数字证书

 

HTTP是应用层协议,定义了客户端和服务器之间交换的数据格式和规则;HTTP是应用层协议,定义了客户端和服务器之间交换的数据格式和规则;

DNS解析过程?

client与本地dns服务器递归;  递归解析器接收到权威 DNS 服务器的响应后,会将 IP 地址返回给用户的操作系统

 

每个请求都是相互独立的,因此讲http是无状态的

 

server集群情况下,JWT令牌为什么可以解决登录状态共享问题?

server不保存 session 数据了,所有数据都保存在客户端,每次请求都发回服务器, 比如JWT就是这样

jwt保证不同服务器都使用同一个公钥/私钥签名机制

 

TCP头部的内容和作用

序列号,确认应答号,控制位(ack,syn,fin)

 

三次握手:

  过程: client: client_isn =x ;   server: server_isn=y, ack_number=x+1;  client: ack_number=y+1

 

  ⚠️为什么要三次?

1. 防止旧的连接初始化引发混乱:

   比如如果2次握手,服务端收到syn序号后就进入establish状态,客户端收到ack发现是旧连接的ack,就发送RST,

  在它到达之前,服务器都可以发送数据

2.同步双方初始序列号

 

第三次发送的确认包丢失了发生什么? server触发超时重传,有次数限制

  

三次握手结束,连接会被保存到内核的全连接队列, 调用 accpet 就是从把连接取出来给用户程序使用。

 

第一个 SYN 报文,服务器没有收到怎么办? 客户端超时重传syn

第二次握手SYN + ACK 报文丢了怎么办? 客户端(SYN) 和服务端(SYN+ACK)都会重传,超过一定次数断开连接

第一次握手,客户端发送SYN报后,服务端回复ACK报,那这个过程中服务端内部做了哪些工作

内核把连接加入半连接队列

 

大量SYN包发送给服务端服务端会发生什么事情?

半连接队列满了,拒绝新连接请求

防御手段:1.限制 SYN-ACK重试次数 2.限制半连接队列的大小

 

 

四次挥手

过程如下  

  client send FIN  

  server send ACK  

  server send FIN  

  client send ack

 

为什么4次握手中间两次不能变成一次?

服务端应用程序可能还有数据要发送,等待没有数据要发送,应用程序调用了关闭连接的函数,内核发送FIN报文

 

第三次挥手一直没发,会发生什么

客户端进入 FIN_WAIT_2 状态并等待,然后超时退出状态

 

客户端最后等待TIME_WAIT 目的?

客户端第四次挥手发送ack,服务端如果没有收到这个 ACK,会重发 FIN 包,

所以等待一段时间,防止收不到重发 FIN 包

 

出现大量TIME_WAIT 原因?

1. 没有使用http长连接

2.长连接超时( tcp_keepalive_time)

3.长连接请求数量达到上限

 

 

网页加载慢,怎么排查?

dns解析,http状态码,tcp连接,网络接口层

 

posted on 2024-10-02 14:29  towboat  阅读(1)  评论(0编辑  收藏  举报