之前介绍了TCP的报文格式(《TCP协议基本特性》),TCP的连接管理,学习了TCP如何建立连接,释放连接以及一些网络安装方面的问题,现在还剩下TCP的几个关键机制,主要是TPC的延迟应答和捎带应答、超时重传、快重传和快恢复、滑动窗口机制、拥塞避免算法;然后最后还记录了TCP的粘包问题和解决方案!
现在即将开始真正踏上构造自己的容器的道路。我们会基于当前的操作系统创建一个与宿主机隔离的容器环境,下面就开始吧。在开始之前我们需要先对Linux的proc文件系统做一个介绍:
如果你对这些基本知识已经很熟悉了,请直接略过。Linux下的/proc文件系统是由内核提供的,它其实不是一个真正的文件系统,只包含了系统运行时的信息(比如系统内存、mount设备信息、一些硬件配置等),它只存在于内存中,而不占用外存空间。它以文件系统的形式,为访问内核数据的操作提供接口。实际上,很多系统工具都是简单地去读取这个文件系统的某个文件内容,比如lsmod,其实就是cat /proc/modules。当遍历这个目录的时候,会发现很多数字,这些都是为每个进程创建的空间,数字就是它们的PID。
在之前的文章中我们探究了Docker是如何使用AUFS文件系统的,现在我们开始动手实践一下AUFS,用简单的命令来创建一个AUFS文件系统,感受下如何使用AUFS和COW实现文件管理。
Union File System,简称UnionFS,关于联合文件系统我之前的一篇博客里也写过的《Docker镜像与数据容器卷》,是一种为Linux、FreeBSD 和NetBSD操作系统设计的,把其他文件系统联合到一个联合挂载点的文件系统服务。它使用branch把不同文件系统的文件和目录“透明地”覆盖,形成一个单一一致的文件系统。这些branch或者是read-only的,或者是read-write的,所以当对这个虚拟后的联合文件系统进行写操作的时候,系统是真正写到了一个新的文件中。看起来这个虚拟后的联合文件系统是可以对任何文件进行操作的,但是其实它并没有改变原来的文件,这是因为unionfs用到了一个重要的资源管理技术,叫写时拷贝。