Samba是开放源代码的GPL自由软件,可以说又是自由软件界的一个重大贡献。Samba的出现彻底解决类UNIX与Windows之间的资源共享与访问,它以其简洁、实用、灵活配置、功能强大的特点受到越来越广泛的关注。也是因为这个原因现在几乎所有的类UNIX都可以使用Samba服务。
由于Samba是作为类UNIX系统和Windows的通信的桥梁,在设计上是让类UNIX系统加入到Windows网络中,而不是让Windows加入类UNIX网络中,因此需先简单了解一下Windows网络的工作原理。Windows 9x、Windows Me及Windows NT中SMB使用137(UDP)、138(UDP)及139(TCP)端口,Windows 2000以后的版本中使用445(TCP)端口。SMB与OSI 7层类型的对应关系如图6-1所示。
Samba服务主要提供以下功能。
(1)共享类UNIX系统上的资源(目录、打印机)。
(2)使用Windows上的共享资源(目录、打印机)。
(3)通过Windows对使用Samba资源的用户进行认证。
(4)使用WINS服务进行名称解析及浏览。
(5)通过SSL实现安全的数据传输。
Samba服务主要由以下两个进程组成。
(1)nmbd:进行NetBIOS名称解析,并提供浏览服务显示网络上的共享资源列表。
(2)smdb:管理Samba服务器上的共享目录、打印机等。主要是针对网络上的共享资源进行管理的服务。当要访问服务器时,要查找共享文件,这时要靠smdb这个进程来管理数据传输。
Samba服务与Samba客户端的工作流程如下。
(1)协议协商:客户端在访问Samba服务器时,发送negprot命令包,告知目标计算机其支持的SMB类型。Samba服务器根据客户端情况,选择最优的SMB类型,并做出回应。
(2)建立连接:当SMB类型确认后,客户端会发送session setup命令数据包,提交账号、密码,请求与Samba服务器建立连接。如果客户端通过身份验证,Samba服务器会对session setup报文做出回应,并为用户分配惟一的UID,在客户端与其通信。
(3)访问共享资源:客户端访问Samba共享资源时,发送tree connect命令数据包,通知服务器需要访问的共享资源名,如果设置允许,Samba服务器会为每个客户与共享资源的连接分配TID,客户端即可以访问需要的共享资源。
(4)断开连接:共享完毕,客户端向服务器发送tree disconnect报文关闭共享。
参考: