MySQL的两大日志
两大日志Redo logredo log(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。有了redo log,InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe。
当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。
innodb_flush_log_at_trx_commit这个参数设置成1的时候,表示每次事务的redo log都直接持久化到磁盘。
BinlogMySQL数据库的数据备份、主备、主主、主从都离不开binlog(归档日志),需要依靠binlog来同步数据,保证数据一致性。
与redo log的区别:
redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。
redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的是这个 ...
链路层和局域网
链路层和局域网数据链路层提供相邻两个点的网络传输服务。物理层负责将数字信号转换为01的物理信号,并通过物理媒介(网线,光缆,电缆)传给相邻的网卡。
相关术语:
主机和路由器是节点(网桥和交换机也是):nodes
沿着通信路径,连接个相邻节点通信信道的是链路:links
有线链路
无线链路
局域网,共享性链路
第二层协议数据单元帧:frame
相关服务:
封装成桢,链路接入
将数据报封装在帧中,加上帧头、帧尾部
如果采用的是共享性介质,信道接入获得信道访问权
在帧头部使用“MAC”(物理)地址来标示源和目的
在(一个网络内)相邻两个节点完成可靠数据传递
流量控制
错误检测
差错纠正
差错检测和纠正差错检测(error detection),是指在发送的码序列(码字)中加入适当的冗余度以使得接收端能够发现传输中是否发生差错的技术。
EDC = 差错检测和纠正位(冗余位)
D = 数据由差错检测保护,可以包含头部字段
校验方式:
奇偶校验:根据校验和,检测单个bit级错误,检测和纠正单个bit错误
CRC(循环冗余校验):通过某种数学运算实现有效信息与校验位之间的循环校 ...
路由选择
路由选择路由选择算法路由选择算法(routing algorithm):网络层软件的一部分,完成路由功能,为转发提供路线。
路由的原则:
正确性(correctness):算法必须是正确的和完整的。
简单性(simplicity):算法在计算机上应简单。
健壮性(robustness):算法应能适应通信量和网络拓扑的变化。
稳定性(stability):产生的路由不应该摇摆。
公平性(fairness):对每一个站点都公平。
最优性(optimality):某一个指标的最优,时间上,费用上,等指标,或综合指标。
链路状态路由选择(link state routing)LS路由的基本工作过程:
发现相邻节点,获知对方网络地址
测量到相邻节点的代价(延迟,开销)
组装一个LS分组,描述它到相邻节点的代价情况
将分组通过扩散的方法发到所有其它路由器
通过Dijkstra算法找出最短路径(这才是路由算法)
距离矢量路由选择(distance vector routing)距离矢量路由选择的基本思想:
各路由器维护一张路由表
各路由器与相邻路由器交换路由表
根据获得的路由信息,更 ...
IP协议
IP协议IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。
IP主要包含三方面内容:
数据报格式
分组处理的约定
地址约定
IP 数据报格式:
IP 分片和重组:由于不同的网络链路有不同的MTU (最大传输单元),所以很多时候没办法直接将整个IP分组向下传输,大的IP数据报就需要在网络上被分片形成独立的分组(目标主机会启动定时器,如果规定时间之外任一一个分片没到就只能全部丢弃),并在最终的目标主机根据ID以及偏移量进行重组。
一个数据报被分割成若干个小的数据报:
相同的ID
不同的偏移量
最后一个分片fragflag标记为0
例子:
胖分组:
分片分组:
IP编址:32位标示,对主机或者路由器的接口编址;路由器通常拥有多个接口,主机也有可能有多个接口,IP地址和每一个接口关联。
IP地址是由网络地址与主机地址两部分所组成。
网络地址:网络地址可用来识别设备所在的网络,网络地址位于IP地址的前段。
主机地址:主机地址位于IP地址 ...
Java文件操作工具类
Java文件操作工具类Pathsjdk7 引入了 Path 和 Paths 类
Path 用来表示文件路径
Paths 是工具类,用来获取 Path 实例
1234567Path source = Paths.get("1.txt"); // 相对路径 使用 user.dir 环境变量来定位 1.txtPath source = Paths.get("d:\\1.txt"); // 绝对路径 代表了 d:\1.txtPath source = Paths.get("d:/1.txt"); // 绝对路径 同样代表了 d:\1.txtPath projects = Paths.get("d:\\data", "projects"); // 代表了 d:\data\projects
. 代表了当前路径
.. 代表了上一级路径
例子:
123Path path = Paths.get("d:\\data\\projects\\a\\..\\b");System ...
路由器的组成
路由器的组成通用路由器体系架构:
路由:运行路由选择算法/协议(RIP, OSPF, BGP)生成路由表
转发:从输入到输出链路交换数据报-根据路由表进行分组的转发
输入端:
接收物理层的Bit级数据
链路层协议动作、解封装
会进入队列(匹配瞬间的输入速率和输出速率的不一致性,但有可能遇到队头阻塞导致丢失),队头根据数据报头部的信息如:目的地址,在输入端口内存中的转发表中查找合适的输出端口
中间交换过程:将分组从输入缓冲区传输到合适的输出端口,有三种典型的交换机构:
通过内存交换
在CPU直接控制下的交换,采用传统的计算机
转发速率被内存的带宽限制(数据报通过BUS两遍)
一次只能转发一个分组
通过总线交换
数据报通过共享总线,从输入端口转发到输出端口
交换速度受限于总线带宽
1次处理一个分组
通过互联网络(crossbar等)的交换
Banyan(榕树)网络,crossbar(纵横)和其它的互联网络被开发,将多个处理器连接成多处理器
同时并发转发多个分组,克服总线带宽限制
输出端:
接收输出端口转发过来的分组;(当数据报从交换机构的到 ...
面向连接的传输:TCP
面向连接的传输:TCP传输控制协议(TCP,Transmission Control Protocol)是一种点对点、可靠的、按顺序的字节流(但是没有报文边界)、全双工、有流量控制拥塞控制、面向连接的传输协议。为了在不可靠的互联网络上提供可靠的点到点字节流而专门设计的一个传输协议。
报文段结构
序号:报文段首字节的在字节流的编号。
确认号:期望从另一方收到的下一个字节的序号,累积确认。
可靠数据传递TCP在IP不可靠服务的基础上建立了Rdt;结合了上面两种滑动窗口协议。
累积确认(像GBN,但是区别在于ACK的序号是期望收到的报文序号)
单个重传定时器(像GBN)
超时重传(只重发那个最早的未确认段:SR)
重复确认重传(收到了3次冗余确认,进行快速重传)
发送方事件
从应用层接收数据:
用nextseq创建报文段,发送报文启动定时器
超时重传:
重传后沿最老的报文段
重启定时器
收到确认:
更新已被确认的报文序号
如果当前还有未被确认的报文段,重新启动定时器
接收方事件
延迟的ACK。对另一个按序报文段的到达最多等待500ms。
如果下一个报文段在这个时间间 ...
可靠数据传输协议rdt
可靠数据传输协议(rdt)rdt在应用层、传输层和数据链路层都很重要,信道的不可靠特点决定了可靠数据传输协议( rdt )的复杂性。
Rdt1.0: 在可靠信道上的可靠数据传输
本层只需要直接将数据进行上下传输:
发送方将数据发送到下层信道
接收方从下层信道接收数据
Rdt2.0:具有比特差错的信道
本层需要采用差错控制编码进行差错检测。
发送方差错控制编码、缓存(以备检错重传 )
接收方使用编码检错
接收方的反馈:控制报文(ACK,NAK):接收方–>发送方
发送方收到反馈相应的动作
出错重传
改进一:为了防止ACK/NAK的信息丢失出错,引入了序号的新机制:
发送方:
必须检测ACK/NAK是否出错
在分组中加入序列号,因为 一次只发送一个未经确认的分组,两个序列号(0,1)就足够了
接收方:
必须检测接收到的分组是否是重复的
改进二:为了节省空间带宽,省去了NAK,只适用ACK;上一个ACK表示NAK。
Rdt3.0:具有比特差错和分组丢失的信道
首先基于Rdt2.0上解决了比特差错的问题,但是有可能分组会丢失,如果分组丢失,这样不但接收方 ...
传输层(一)
传输层(一)概述传输层是整个网络体系结构中的关键层次之一,主要负责向两个主机中进程之间的通信提供服务。传输层在终端用户之间提供透明的数据传输,向上层提供可靠的数据传输服务。传输层在给定的链路上通过流量控制、分段/重组和差错控制来保证数据传输的可靠性。主要的传输协议有TCP和UDP。
服务过程:
发送方:将应用层的报文分成报文段,然后传递给网络层
接收方:将报文段重组成报文,然后传递给应用层
服务类型:
可靠的、保序的传输: TCP
多路复用、解复用
拥塞控制
流量控制
建立连接
不可靠、不保序的传输:UDP
多路复用、解复用
没有为尽力而为的IP服务添加更多的其它额外服务
都不提供的服务:
延时保证
带宽保证
多路复用和解复用
在发送方主机多路复用:
从多个套接字接收来自多个进程的报文,根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装(该头部信息用于以后的解复用)
在接收方主机多路解复用:
根据报文段的头部信息中的IP地址和端口号将接收到的报文段发给正确的套接字(和对应的应用进程)
面向连接的解复用(TCP):
由于UDP的Socket需要关联 ...
套接字编程
套接字编程TCP套接字编程
服务器首先运行,等待连接建立(服务器进程必须先处于运行状态)
创建欢迎socket
和本地端口捆绑
在欢迎socket上阻塞式等待接收用户的连接
客户端主动和服务器建立连接
创建客户端本地套接字(隐式捆绑到本地port)
指定服务器进程的IP地址和端口号,与服务器进程连接
当与客户端连接请求到来时
服务器接受来自用户端的请求,解除阻塞式等待,返回一个新的socket(与欢迎socket不一样),与客户端通信
允许服务器与多个客户端通信,使用源IP和源端口来区分不同的客户端
连接API调用有效时,客户端P与服务器建立了TCP连接
UDP套接字编程UDP:在客户端和服务器之间没有连接
传输层提供端到端的进程之间的网络传输服务。
没有握手
发送端在每一个报文中明确地指定目标的IP地址和端口号(因为socket只绑定了本地的IP和端口)
服务器必须从收到的分组中提取出发送端的IP地址和端口号