TCP协议中的三次握手和四次挥手及其他

cookie和session的区别:
1、cookie是保存在本地的键值对,有有效期,session是保存在服务端的一个键值对
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
3、session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
5、所以个人建议:
将登陆信息等重要信息存放为session
其他信息如果需要保留,可以放在cookie中

 

进程和线程的区别:
1、线程是处理器调度的基本单位,而进程是操作系统分配资源的最小单位
2、一个程序至少有一个进程,一个进程至少有一个线程
3、进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间,某进程内的线程在其他进程不可见
4、调度和切换:线程上下文切换比进程上下文切换要快得多

 

TCP协议和UDP协议的差别:

TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢、建立连接需要开销较多(时间,系统资源)
UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快、开销小

 

TCP

UDP

是否连接

面向连接

面向非连接

传输可靠性

可靠

不可靠

应用场合

传输大量数据

少量数据

速度

网络开销

昂贵

开销小

一个TCP连接必须要经过三次对话才能建立起来,是基于连接的协议,就是在正式收发数据前,必须和对方建立可靠的连接,三次对话的简单过程
第一次对话:主机A向主机B发出连接请求数据包:"我想给你发数据,可以吗?"
第二次对话:主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:"可以,你什么时候发?"
第三次对话:主机A再发出一个数据包确认主机B的要求同步:"我现在就发,你接着吧!"
三次对话的目的是使数据包的发送和接收同步,经过三次对话之后,主机A才向主机B正式发送数据

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:

中断连接端可以是Client端,也可以是Server端

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 后未收到回复,则认为服务器成功关闭,客户端关闭连接

 

urllib和urllib2的区别

1、urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。urllib2可以Post而urllib不可以,这是为何urllib常和urllib2一起使用的原因
2、urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以伪装你的User Agent字符串等

 

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议,它是面向非连接的协议,它不与对方建立连接,直接把数据包发送过去,UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境,ping命令没有建立连接,QQ就使用UDP发消息

 

全双工(Full Duplex)是通讯传输的一个术语,通讯允许数据在两个方向上同时传输(A->B的同时B->A,是瞬间同步的)
半双工(Half Duplex)只允许甲方向乙方传送信息,乙方不能向甲方传送,半双工已经退出历史舞台了

 

TCP/IP是一个协议组,分为网络层、传输层、应用层
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层有TCP协议和UDP协议
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议

 

HTTP与HTTPS的区别:
1、https协议需要申请证书,一般免费证书较少,因而需要一定费用
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全

 

GET和POST本质上有什么区别:
1、最直接的区别,GET请求的参数是放在URL里的,POST请求参数是放在请求body里的
2、GET请求的URL传参有长度限制,而POST请求没有长度限制
3、GET请求只能进行url编码,而POST支持多种编码方式
4、GET比POST更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息
5、GET请求参数会被完整保留在浏览历史记录里,而POST中的参数不会被保留

 

http请求状态码:
200:2开头的代表请求成功
301、302:3开头的代表重定向,博客迁移了,请求的地址不存在了,还用原来的请求访问跳转到另外的地址
404:4开头的代表客户端发出去的请求有问题
500、502:5开头的代表服务端有问题

XSRF和XSS:
CSRF(Cross-site request forgery)跨站请求伪造
XSS(Cross Site Scripting)跨站脚本攻击
CSRF重点在请求,XSS重点在脚本

RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用
RPC(Remote Procedure Call Protocol)——远程过程调用协议,SOAP(原为Simple Object Access Protocol——简单对象访问协议),进化的顺序: RPC -> SOAP -> RESTful

post请求不符合幂等性,get、delete、put请求符合幂等性

AJAX,Asynchronous JavaScript and XML(异步的JavaScript 和 XML), 是与在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术

PATCH请求PUT请求类似,同样用于资源的更新,二者有以下两点不同:
1、但PATCH一般用于资源的部分更新,而PUT一般用于资源的整体更新
2、当资源不存在时,PATCH会创建一个新的资源,而PUT只会对已在资源进行更新

Redis的特点:
因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB,Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上,另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一个功能加强版的Memcached来用,集群的原理是在master宕机时会自动将slave提升为master,继续提供服务,Redis是单进程单线程的

 

Redis与Memcache的相同之处:
1、Redis是一个key-value存储系统,和Memcache类似,为了保证效率,数据都是缓存在内存中

Redis与Memcache的区别都有哪些:
1、存储方式
Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小,Redis有部份存在硬盘上,这样能保证数据的持久性,redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了主从同步
2、数据支持类型
Memcache对数据类型支持相对简单,Redis支持存储的数据类型相对更多,包括string(字符串)、hash、list(列表)、set(集合)和sorted set(有序集合)
3、使用底层模型
它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求
4、value大小
Memcache只有1MB,而Redis最大可以达到1GB
5、Redis的查找速度比Memcached快很多

 

子网的计算

首先,我们看一个CCNA考试中常见的题型:一个主机的IP地址是202.112.14.137,掩码是255.255.255.224,要求计算这个主机所在网络的网络地址广播地址

常规办法是把这个主机地址和子网掩码都换算成二进制数,两者进行逻辑与运算后即可得到网络地址。其实大家只要仔细想想,可以得到另一个方法:255.255.255.224的掩码所容纳的IP地址有256-224=32个(包括网络地址和广播地址),那么具有这种掩码的网络地址一定是32的倍数。而网络地址是子网IP地址的开始,广播地址是结束,可使用的主机地址在这个范围内,因此略小于137而又是32的倍数的只有128,所以得出网络地址是202.112.14.128。而广播地址就是下一个网络的网络地址减1,而下一个32的倍数是160,因此可以得到广播地址为202.112.14.159

还有一种题型,要你根据每个网络的主机数量进行子网地址的规划和计算子网掩码,这也可按上述原则进行计算

比如一个子网有10台主机,那么对于这个子网就需要10+1+1+1=13个IP地址,(注意加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网络地址和广播地址)13小于16(16等于2的4次方),所以主机位为4位,而256-16=240,所以该子网掩码为255.255.255.240

如果一个子网有14台主机,不少同学常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址,这样就错误了,因为14+1+1+1=17 ,大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网,这时子网掩码为:255.255.255.224

 

子网掩码是一个32位地址,是与IP地址结合使用的一种技术,它的主要作用有两个:

一是用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上

二是用于将一个大的IP网络划分为若干小的子网络

 

tracert后面加IP地址,可以查所有经过的路由

 

目前关于网站架构流行的架构方案:Web前端采用Nginx/HAProxy + keepalived做负载均衡器,后端采用MySQL数据库一主多从和读写分离

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障,LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,一个LVS服务会有两台服务器进行keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,不管谁是MASTER,对外都是相同的MAC和IP

Node.js是一个基于chrome V8引擎的JavaScript运行环境,PM2是一个带有负载均衡功能的应用进程管理器,安装PM2命令是npm install -g pm2,主备节点存储数据,仲裁节点不存储数据,客户端同时连接主节点与备节点,不连接仲裁节点

 

并发收集:垃圾回收线程(回收内存)和程序运行线程(分配内存)同时运行,这种方式下解决了暂停的问题,但是因为需要在新生成对象的同时又要回收对象,算法复杂性会大大增加,系统处理能力也会相应降低

VPN(Virtual Private Network),虚拟专用网络,功能是在公用网络上建立专用网络,进行加密通讯。VPN属于远程访问技术,有了VPN技术,用户无论是外地出差还是在家中办公,只要能连上互联网就能利用VPN访问内网资源

PPTP(Point to Point Tunneling Protocol),即点对点隧道协议

L2TP(Layer 2 Tunneling Protocol),即第二层隧道协议

在计算机网络中,TUN和TAP是操作系统内核中的虚拟网络设备,服务器如果拥有TUN和TAP,就可以开启VPN代理功能

posted @ 2018-04-10 11:25  laosun0204  阅读(188)  评论(0编辑  收藏  举报