一.三次握手
1.客户端通过向服务器发送一个syn来创建一个主动打开,作为三次握手的一部分,客户端把这段连接设定为随机数a
2.服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK 的确认码应为 A+1,SYN/ACK 包本身又有一个随机序号 B。
3.最后,客户端再发送一个ACK。当服务端受到这个ACK的时候,就完成了三路握手,并进入了连接创建状态。此时包序号被设定为收到的确认号 A+1,而响应则为 B+1。
二.四次挥手
注意: 中断连接端可以是客户端,也可以是服务器端. 下面仅以客户端断开连接举例, 反之亦然.
1.客户端发送一个数据分段, 其中的 FIN 标记设置为1. 客户端进入 FIN-WAIT 状态. 该状态下客户端只接收数据, 不再发送数据.
2.服务器接收到带有 FIN = 1 的数据分段, 发送带有 ACK = 1 的剩余数据分段, 确认收到客户端发来的 FIN 信息.
3.服务器等到所有数据传输结束, 向客户端发送一个带有 FIN = 1 的数据分段, 并进入 CLOSE-WAIT 状态, 等待客户端发来带有 ACK = 1 的确认报文.
4.客户端收到服务器发来带有 FIN = 1 的报文, 返回 ACK = 1 的报文确认, 为了防止服务器端未收到需要重发, 进入 TIME-WAIT 状态. 服务器接收到报文后关闭连接. 客户端等待 2MSL 后未收到回复, 则认为服务器成功关闭, 客户端关闭连接.
3.ARP协议
地址解析协议(Address Resolution Protocol)其基本功能为透过目标设备的ip地址,查询目标的mac地址,以保证通信的顺利进行
它是ipv4网络层必不可少的协议,不过在ipv6中已经不再适用,并被邻居发现协议所替代.
4.urlib和urllib2的区别
1.urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。
2.urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以伪装你的User Agent字符串等。
5.post和get
GET和POST有什么区别?及为什么网上的多数答案都是错的 知乎回答
get: RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 post: RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
6.cookie和session
7.HTTP
https://www.jianshu.com/p/d398d920f24f
8.apache和nginx区别
nginx相对apache的优点
- 轻量级,同样起web服务,比apache占用更少的内存资源
- 抗并发,nginx处理请求是异步非阻塞的,支持更多的并发连接,而apache则是阻塞型的,在高并发nginx能保持低资源低消耗高性能
- 配置简洁
- 高度模块化设计,编写模块相对简单
- 社区活跃
apache 相比nginx的优点:
- rewrite ,比nginx的rewrite1强大
- 少bug,nginx的bug相对较多
- 超稳定
9.网站用户密码保存
- 明文保存
- 明文hash后保存,如md5
- MD5+Salt方式,这个salt可以随机
- 知乎使用了Bcrypy(好像)加密
10.http和https
http是一种应用最为广泛的协议,是客户端和服务端请求的标准
用于从www服务器上传输超文本到本地的传输协议,它可以让浏览器变的更加高效使网络传输减少。
https是以安全为目标的http通道,简单的讲就是http安全版,即http的安全版,即http下加了ssl层,http的安全基础是ssl,因此加密的详细内容就需要ssl
https协议的主要作用可以分为两种:一种是建立安全通道,来保证数据传输的安全;另一种就是确认网站的真实性
两者区别
- https协议需要到ca申请认证,一般免费认证比较少,因为需要一些费用
- http是超文本传输协议,信息明文传输,http则是具有安全性的ssi加密传输协议
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者80,后者443.
- http的连接很简单,是无状态的;https协议是由ssl+http协议构成的可进行加密传输,身份认证的网络协议,比http协议安全
11.xsrf和xss
- CSRF(Cross-site request forgery)跨站请求伪造
- XSS(Cross Site Scripting)跨站脚本攻击
csrf重点在请求,xss重点在脚本
12.SOAP
SOAP(原为Simple Object Access Protocol的首字母缩写,即简单对象访问协议)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构信息。SOAP为了简化网页服务器(Web Server)从XML数据库中提取数据时,节省去格式化页面时间,以及不同应用程序之间按照HTTP通信协议,遵从XML格式执行资料互换,使其抽象于语言实现、平台和硬件。
13.RPC
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
总结:服务提供的两大流派.传统意义以方法调用为导向通称RPC。为了企业SOA,若干厂商联合推出webservice,制定了wsdl接口定义,传输soap.当互联网时代,臃肿SOA被简化为http+xml/json.但是简化出现各种混乱。以资源为导向,任何操作无非是对资源的增删改查,于是统一的REST出现了.
进化的顺序: RPC -> SOAP -> RESTful
14.CGI和WSGI
CGI是通用网关接口,是连接web服务器和应用程序的接口,用户通过CGI来获取动态数据或文件等。 CGI程序是一个独立的程序,它可以用几乎所有语言来写,包括perl,c,lua,python等等。
WSGI, Web Server Gateway Interface,是Python应用程序或框架和Web服务器之间的一种接口,WSGI的其中一个目的就是让用户可以用统一的语言(Python)编写前后端。
15.中间人攻击
中间人攻击(Man-in-the-middle attack,通常缩写为MITM)是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
16.c10k问题
所谓c10k问题,指的是服务器同时支持成千上万个客户端的问题,也就是concurrent 10 000 connection(这也是c10k这个名字的由来)。 推荐: https://my.oschina.net/xianggao/blog/664275
17.mvcc
全称是Multi-Version Concurrent Control,即版本控制器,在mvcc协议下,每个操作会看到一个一致性的snapshot,并且可以实现非阻塞的读。mvcc允许数据具有多个版本,这个版本可以是时间戳或者全局递增的事物ID,在同一个时间点,不同的事物看到的事物是不一样的。
18.socket
推荐: http://www.360doc.com/content/11/0609/15/5482098_122692444.shtml
Socket=Ip address+ TCP/UDP + port
19.浏览器缓存
推荐: http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html
304 Not Modified
20.Ajax
AJAX,Asynchronous JavaScript and XML(异步的 JavaScript 和 XML), 是与在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术。
Unix进程间的通讯方式
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):主要作为进程间以及同一进程不同线程之间的同步手段。
8.套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。