1.客户端经过向服务器端发送一个SYN来建立一个主动打开,做为三路握手的一部分。客户端把这段链接的序号设定为随机数 A。 2.服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK 的确认码应为 A+1,SYN/ACK 包自己又有一个随机序号 B。 3.最后,客户端再发送一个ACK。当服务端受到这个ACK的时候,就完成了三路握手,并进入了链接建立状态。此时包序号被设定为收到的确认号 A+1,而响应则为 B+1。 通俗描述3次握手就是: A对B说:个人序号是x,我要向你请求链接;(第一次握手,发送SYN包,而后进入SYN-SEND状态) B听到以后对A说:个人序号是y,期待你下一句序号是x+1的话(意思就是收到了序号为x的话,即ack=x+1),赞成创建链接。(第二次握手,发送ACK-SYN包,而后进入SYN-RCVD状态) A听到B说赞成创建链接以后,对A说:与确认你赞成与我链接(ack=y+1,ACK=1,seq=x+1)。(第三次握手,A已进入ESTABLISHED状态) B听到A的确认以后,也进入ESTABLISHED状态。
通俗得描述四次挥手就是: 1.A与B交谈结束以后,A要结束这次会话,对B说:我要关闭链接了(seq=u,FIN=1)。(第一次挥手,A进入FIN-WAIT-1) 2.B收到A的消息后说:确认,你要关闭链接了。(seq=v,ack=u+1,ACK=1)(第二次挥手,B进入CLOSE-WAIT) 3.A收到B的确认后,等了一段时间,由于B可能还有话要对他说。(此时A进入FIN-WAIT-2) 4.B说完了他要说的话(只是可能还有话说)以后,对A说,我要关闭链接了。(seq=w, ack=u+1,FIN=1,ACK=1)(第三次挥手) 5.A收到B要结束链接的消息后说:已收到你要关闭链接的消息。(seq=u+1,ack=w+1,ACK=1)(第四次挥手,而后A进入CLOSED) 6.B收到A的确认后,也进入CLOSED。
地址解析协议(Address Resolution Protocol): 根据IP地址获取物理地址的一个TCP/IP协议
这个面试官确实问过,当时答的urllib2能够Post而urllib不能够. 1.urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为什么urllib常和urllib2一块儿使用的缘由。 urllib2能够接受一个Request类的实例来设置URL请求的headers,urllib仅能够接受URL。这意味着,你不能够假装你的User Agent字符串等。
GET和POST有什么区别?及为何网上的多数答案都是错的 get: RFC 2616 – Hypertext Transfer Protocol — HTTP/1.1 post: RFC 2616 – Hypertext Transfer Protocol — HTTP/1.1
Cookie | Session 储存位置:客户端 | 服务器端 目的: 跟踪会话,也能够保存用户偏好设置或者保存用户名密码等 | 跟踪会话 安全性:不安全 | 安全 session技术是要使用到cookie的,之因此出现session技术,主要是为了安全。
nginx 相对 apache 的优势:linux
1.轻量级,一样起web 服务,比apache 占用更少的内存及资源apache 相对nginx 的优势:nginx
1.rewrite ,比nginx 的rewrite 强大
2.模块超多,基本想到的均可以找到
3.少bug ,nginx 的bug 相对较多
4.超稳定web
1.明文保存 2.明文hash后保存,如md5 3.MD5+Salt方式,这个salt能够随机 4.知乎使用了Bcrypy(好像)加密
状态码 | 定义 1xx 报告 接收到请求,继续进程 2xx 成功 步骤成功接收,被理解,并被接受 3xx 重定向 为了完成请求,必须采起进一步措施 4xx 客户端出错 请求包括错的顺序或不能完成 5xx 服务器出错 服务器没法完成显然有效的请求 403: Forbidden 404: Not Found HTTPS握手,对称加密,非对称加密,TLS/SSL,RSA
CSRF(Cross-site request forgery)跨站请求伪造 XSS(Cross Site Scripting)跨站脚本攻击 CSRF重点在请求,XSS重点在脚本
1.管道(Pipe):管道可用于具备亲缘关系进程间的通讯,容许一个进程和另外一个与它有共同祖先的进程之间进行通讯。 2.命名管道(named pipe):命名管道克服了管道没有名字的限制,所以,除具备管道所具备的功能外,它还容许无亲缘关系进程间的通讯。命名管道在文件系统中有对应的文件名。命名管道经过命令mkfifo或系统调用mkfifo来建立。 3.信号(Signal):信号是比较复杂的通讯方式,用于通知接受进程有某种事件发生,除了用于进程间通讯外,进程还能够发送信号给进程自己;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又可以统一对外接口,用sigaction函数从新实现了signal函数)。 4.消息(Message)队列:消息队列是消息的连接表,包括Posix消息队列system V消息队列。有足够权限的进程能够向队列中添加消息,被赋予读权限的进程则能够读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺 5.共享内存:使得多个进程能够访问同一块内存空间,是最快的可用IPC形式。是针对其余通讯机制运行效率较低而设计的。每每与其它通讯机制,如信号量结合使用,来达到进程间的同步及互斥。 6.内存映射(mapped memory):内存映射容许任何多个进程间通讯,每个使用该机制的进程经过把一个共享的文件映射到本身的进程地址空间来实现它。 7.信号量(semaphore):主要做为进程间以及同一进程不一样线程之间的同步手段。 套接口(Socket):更为通常的进程间通讯机制,可用于不一样机器之间的进程间通讯。起初是由Unix系统的BSD分支开发出来的,但如今通常能够移植到其它类Unix系统上:Linux和System V的变种都支持套接字