常见的状态码即问题解决

目录

常见的返回码

2xx(成功)

3xx(重定向)

4xx(请求操作)(客户端)

5xx(服务器错误)

案例问题:

Tcp三次握手和四次挥手的几种状态


常见的返回码

2xx(成功)

200  (成功)  服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。这是正常情况下最希望看到的

3xx(重定向)

301 moved permanently,永久性重定向,表示资源已被分配了新的 URL

302 found,临时性重定向,表示资源临时被分配了新的 URL

303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源

304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况

307 temporary redirect,临时重定向,和302含义相同

4xx(请求操作)(客户端)

400(错误请求) 服务器不理解请求的语法。

401(未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。

403(禁止) 服务器拒绝请求。

404(未找到) 服务器找不到请求的网页。

405(方法禁用) 禁用请求中指定的方法。

406(不接受) 无法使用请求的内容特性响应请求的网页。

407(需要代理授权) 此状态代码与 401(未授权)类似但指定请求者应当授权使用代理。

408(请求超时)  服务器等候请求时发生超时。

409(冲突)  服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。

410(已删除)  如果请求的资源已永久删除,服务器就会返回此响应。

411(需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。

412(未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。

413(请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。

414(请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。

415(不支持的媒体类型) 请求的格式不受请求页面的支持。

416(请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。

417(未满足期望值) 服务器未满足"期望"请求标头字段的要求。

5xx(服务器错误)

500(服务器内部错误)服务器遇到错误,无法完成请求。

501(尚未实施)服务器不具备完成请求的功能例如服务器无法识别请求方法时可能会返回此代码。

502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。

503(服务不可用)服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。

505(HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

案例问题:

  1. 用户访问服务端,因为服务端的“资源"压力过大,导致客户端访问失败,请问此时是什么报错

HTTP错误503在源站Web服务器过载时发生。可能的原因有两种,可通过错误消息来辨别

解决方案:联系您的主机提供商,以核实是否针对您的源站Web服务器的请求实施了速率限制。

5s Sevice navelable消息,表示您需要联系托管服务提供商以寻求帮助或查看本地错误日志。上游503可以指示资源耗尽或失败的进程,并且应从服务器或应用程序日志中清除确切原因。

free -h 内存占用情况

top 查看进程情况

netstat -natp查看网络连接状态

2. Socket.connect连接超时有二种情况:

(1).由于网络的问题,TCP/IP三次握手时间>timeout的设置时间。这在国外访问weibo时,并且网络环境极差的情况下有可能发生。

(2).如果timeout设置的时间足够,但是由于服务器端的处理能力较差

分别对应:408,413

解决方案:增加timeout的时间,提高服务器性能

3. 用户访问服务端,服务端直接丢i其访问的数据包,请问此时是什么问题

个人认为是防火墙问题,用户无法与服务器端口连接,通常解决方案为查看防火墙策略,查看配置了DROP策略的防火墙策略。

其状态码应为:403(禁止) 服务器拒绝请求

解决方案:iptables -L INPUT --line-number

根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务

发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,

vi /etc/sysctl.conf 

编辑文件,加入以下内容:

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

然后执行 /sbin/sysctl -p 让参数生效。 

1.net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。

2.net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

3.net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

4.net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

修改滑动窗口亦可以解决此类问题

滑动窗口:窗口大小说明本地可接收数据段的数目。这个值的大小是可变的,当网络通畅时接收端响应消息会将这个窗口值变大以加快传输速度,当网络不稳定时减小这个值可保证网络数据的可靠传输,TCP中的流量控制机制就是依靠变化窗口的大小实现的。

(1)vi/etc/sysctl.conf

(2)添加参数net.nf_conntrack_max = 655360 单位为字节

(3)sysctl-p

Tcp三次握手和四次挥手的几种状态

  1. tcp报文中存在几个重要的控制位

ACK:确认位,只有当ACK=1时,确认序列号字段才有效,当ACK=0时,确认号字段无效

PSH:急迫位,标志位位1时,要求接收方尽快将数据段发送到应用层。

SYN:同步位,同步序号位,TCP需要建立连接时,将这个值设为1.

FIN:断开位,当TCP完成数据传输需要断开连接时,提出断开连接的一方将这个值设为1

  1. 三次握手的报文类型

发送SYN报文(Seq=x,SYN=1)

发送SYN+ ACK报文(Seq=y,Ack=x+1,SYN=1,ACK =1)

发送ACK报文(Seq=x+1,Ack=y+1,ACK=1)

  1. 三次握手的几次状态

首先双方皆为close状态,服务器端先开始进入listen状态即监听状态,当客户端发送syn报文请求连接时,客户端进入sys_sent状态即发送请求后的状态,当服务端收到syn请求报文后发送syn ack报文,此时服务端进入syn_rcvd状态即等待恢复状态,此时客户端收到syn,ack报文后发送ack报文,当服务端收到后进入进入established状态即连接完成的状态。

  1. 四次挥手的几种状态以及发送的报文

初始状态为established状态即双方还是保持连接的状态,此时客户端发送fin报文断开请求报文时,客户端进入fin_wait_1状态,此时服务器端接受到后发送ack确认报文,此时,服务器端进入close_wait状态,客户端进入fin_wait_2状态,此时服务器端向客户端发送fin ack报文时候,服务器端进入last_ack状态此时客户端进入time_wait状态,此时客户端发送ack确认报文后完成最后的挥手,全部进入close状态

  1. 为何不是二握,三挥?
  1. 二握

防止出现脏连接,假如客户端向服务端进行握手,进行第一次请求时,可能会遇到网络信号差或者服务器负载过多,导致这个握手请求没有立即达到服务端这就形成了一个失效的握手连接,但是服务端接收到失效的请求报文就会误认为是客户端又发了一次连接请求,服务端就会进行第二次握手。

如果说TCP握手是两次的话,只要服务端确认消息就算建立连接了,这是不可靠的。且要包获赠两台机器信息对等,确保两台机器都没有问题。

  1. 三挥

主要原因是tcp是全双工的因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值