2019-09-0118:00:48
即将毕业的PHP小学生,在网上看了很多面试资料和相关东西,在这里记录下来,有些地方可能会涉及到别人的原创,但是当时做笔记时候没有添加,如果冒犯,请告诉我,我会补充上注明来源。(学习路上有很多错误,和忽略的地方,希望大家能多多指正,谢谢!!!)
一、计算机网络基础
1.TCP/IP三次握手(建立TCP连接)
- 服务器进程先创建传输控制块 TCB,并处于监听状态,等待客户端的连接请求
- 客户端创建传输控制块 TCB,并向服务器发出连接请求报文段
- 服务器收到连接请求报文段后,如同意建立连接,则发送确认报文段
- 客户端进程收到服务器的确认报文段后,立即回复确认报文段,并进入已建立连接状态
- 服务器收到确认报文段之后,也进入已建立连接状态
首先是服务器处于LISTEN(监听状态),等待客户端的连接请求。
在网上看过的建立连接这一部分,很清晰的一种解释方法就是:
客户端:我要开始了
服务端:好的
客户端:那我真的开始了
为什么是三次握手,而不是两次?
防止失效的连接请求到达服务器,让服务器打开错误连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端就是忽略服务器之后发送的对滞留请求的连接确认,不进行第三次握手,因此就不会再次打开连接。
2.TCP/IP四次挥手(TCP连接的释放)
- 客户端应用进程发出连接释放报文段,并停止再发送数据,进入 FIN-WAIT-1(终止等待1)状态,等待服务器确认
- 服务器收到连接释放报文段后即发出确认,进入 CLOSE-WAIT(关闭等待)状态,服务器若发送数据,客户端扔要接收
- 客户端收到来自服务器的确认后,进入 FIN-WAIT-2(终止等待2)状态,等待服务器发出连接释放报文段
- 服务器没有要发送的数据,发出连接释放报文段,进入 LAST-ACK(最后确认)状态,等待客户端确认
- 客户端收到连接释放报文段后,发出确认,进入 TIME-WAIT(时间等待)状态,经过时间等待计时器设置的时间 2MSL 后,进入 CLOSED(关闭) 状态
- 服务器收到客户端报文段后,进入 CLOSED 状态
很清晰的一种解释方法:
客户端:我要结束
服务端:好的,等我把数据发完
服务端:我发完了
客户端:那我真结束了
为什么要四次挥手?
客户端发送了FIN连接释放报文之后,服务器收到了这个报文,就进入了CLOSE-WAIT状态。这个状态是为了让服务器端发送还未传完的数据,传送完毕之后,服务器会发送FIN连接释放报文。
TIME_WAIT是什么,为什么必须等待2mls?
TIME_WAIT是一种TCP状态。等待2mls可以保证客户端最后一个报文段能够到达服务器,如果未到达,服务器则会超时重传连接释放报文段,使得客户端、服务器都可以正常进入到CLOSE(关闭)状态。
三次握手和四次挥手,我觉得挺多都会问的,但是我所了解的,就这样,还需要在去深入了解。
OSI七层:
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
一次HTTP请求的过程(web请求过程)
- 输入网址
- DNS解析
- 建立TCP连接(三次握手)
- 客户端发送HTTP请求
- 服务器处理请求
- 服务器响应请求(状态码)
- 浏览器展示HTML
- 浏览器发送请求获取其他在HTML的资源。
(有的地方不在准确,不够深入细致,欢迎纠正)
状态码分类
状态码 | 整体范围 | 已定义范围 | 含义 |
1XX | 100~199 | 100-101 | 信息提示 |
2XX | 200~299 | 200-206 | 成功 |
3XX | 300~399 | 300-305 | 重定向 |
4XX | 400~499 | 400-415 | 客户端错误 |
5XX | 500~599 | 500-505 | 服务器错误 |
常见协议端口
ftp | 21 |
ssh | 22 |
telnet | 23 |
http | 80 |
smtp | 25 |
snmp | 161 |
https | 443 |
…… | & |
常见端口:
200 请求成功 400 告知客户端发送了错误请求
206 部分请求 403 请求被服务器拒绝
301 在请求的链接被移除时使用 404 无法找到请求的URL
302 在请求临时的链接使用 413 请求实体过大
304 资源未被修改可以使用旧资源 500 服务器遇到错误
307 在请求临时的链接使用 502 代理或网关错误
503 无法为请求提供服务 504 代理或网关超时
在做东西时候,碰见过返回413,但是在网上找资料找了下。
我当时修改了nginx.conf中的client_max_body_size;php.ini中的upload_max_filesize(限制PHP处理上传问价你的最大值,此值必须要是postmaxsize)、post_max_size(限制通过POST方法可以接受的信息最大量)
然后重启php和nginx就ok了。
做的这一部分笔记就这样,会记录学习过程相关的部分知识。谢谢!欢迎纠正。