So sánh các giao thức chia sẻ tệp CIFS và SMB: Giải thích sự khác biệt

Khi nói đến việc lựa chọn giao thức để chia sẻ tệp qua mạng, bạn thường bắt gặp các thuật ngữ SMB và CIFS trong giao diện phần mềm và tài liệu hướng dẫn. Một số người dùng cho rằng SMB và CIFS là một, và việc phân biệt rõ ràng sự khác biệt giữa hai khái niệm này có thể khá khó khăn. Tuy nhiên, hãy cùng tìm hiểu lý do tại sao CIFS không thể được coi là từ đồng nghĩa với SMB. Tìm hiểu về sự khác biệt giữa các giao thức SMB và CIFS cũng như cách sử dụng các thuật ngữ này.

NAKIVO để sao lưu dữ liệu NAS

NAKIVO để sao lưu dữ liệu NAS

Sao lưu và khôi phục nhanh chóng hàng gigabyte dữ liệu trên các thiết bị NAS cũng như các thư mục chia sẻ trên Windows và Linux. Khôi phục bất kỳ dữ liệu nào bạn cần, bất cứ khi nào bạn cần, chỉ trong vài giây.

SMB là gì?

SMB (viết tắt của Server Message Block) là một giao thức mạng hoạt động ở lớp ứng dụng của mô hình truyền thông OSI. SMB được sử dụng để cung cấp quyền truy cập chia sẻ vào các tài nguyên qua mạng. Giao thức SMB được sử dụng rộng rãi để chia sẻ tệp trên máy chủ tệp, chia sẻ tệp giữa các máy tính người dùng và sao chép tệp giữa các máy tính.

Ngoài việc thao tác với tệp, các trường hợp sử dụng khác của SMB bao gồm nhắn tin và in ấn (giao dịch từ xa đa năng), cũng như duyệt các máy tính trong mạng. IBM đã phát triển SMB vào năm 1983, và kể từ đó giao thức này đã được cải tiến nhiều lần.

Chia sẻ tệp SMB là gì?

Chia sẻ tệp SMB là các thư mục trên máy chủ từ xa được cung cấp thông qua giao thức SMB. Chúng được cấu hình trên máy chủ tệp, và quyền truy cập đọc và ghi có thể được thiết lập cho các chia sẻ này. Một máy chủ tệp có thể có nhiều chia sẻ SMB.

Cách thức hoạt động của SMB: SMB làm gì?

SMB hoạt động dựa trên nguyên tắc mạng máy khách-máy chủ. Giao thức này sử dụng một tập hợp các gói dữ liệu chứa yêu cầu do máy khách gửi hoặc phản hồi do máy chủ gửi. Máy khách có thể kết nối với máy chủ bằng cách sử dụng địa chỉ IP hoặc tên máy chủ. Các gói dữ liệu SMB này có thể được phân loại như sau:

  • Các gói điều khiển phiên, dùng để thiết lập/ngắt kết nối với các thư mục chia sẻ
  • Các gói truy cập tệp, như tên gọi, dùng để truy cập các thư mục chia sẻ và thao tác với các tệp
  • Các gói tin chung

SMB mở một phiên sau khi thiết lập kết nối và hoàn tất quá trình xác thực. Sau đó, các tin nhắn SMB có thể được truyền qua phiên này. Khi khởi tạo phiên, máy khách SMB sẽ gửi danh sách các tính năng của mình (các tính năng này phụ thuộc vào phiên bản SMB của máy khách).

Giao thức SMB có thể hoạt động:

  • trực tiếp qua TCP bằng cách sử dụng cổng 445 (không qua NetBIOS) – đây là phương pháp hiện đại.
  • qua API NetBIOS bằng cách sử dụng các cổng UDP 137 và 138 cùng các cổng TCP 137 và 139 – đây là phương pháp cũ được sử dụng cho đến Windows 2000. Các phiên bản đầu tiên của SMB sử dụng NetBIOS qua TCP/IP làm giao thức truyền tải.

Giao thức SMB hỗ trợ tính năng gộp lô (batching), tức là nhóm nhiều tin nhắn lại và gửi chúng trong một lần truyền để cải thiện hiệu suất.

Các tính năng bổ sung bao gồm cơ chế khóa tệp để bảo vệ các tệp được chia sẻ khi nhiều người dùng mở cùng một tệp. Việc khóa tệp giúp tránh tình trạng nhiều người dùng ghi dữ liệu vào cùng một tệp đồng thời, từ đó ngăn ngừa sự không nhất quán dữ liệu trong tệp. IPC (kết nối giữa các tiến trình) còn gọi là kết nối phiên không. Ổ chia sẻ IPC$ tạo bởi Windows sử dụng với kết nối tạm thời giữa máy khách và máy chủ. Ổ chia sẻ ẩn này tạo để chia sẻ dữ liệu không phân loại là tệp/thư mục và máy in, ví dụ, người dùng và liệt kê chia sẻ.

Hệ thống Windows có máy khách và máy chủ SMB bản địa. Tuy nhiên, phiên bản Windows client giới hạn số lượng người dùng có thể kết nối với máy chủ, khác với phiên bản Windows Server không có giới hạn đó.

  • Windows XP và Vista – tối đa 10 kết nối đồng thời
  • Windows 7 và Windows 10 – tối đa 20 kết nối đồng thời

Máy chủ SMB trên Linux cài khi cấu hình Samba, là bản thực hiện máy chủ SMB miễn phí cho Linux. Lưu ý rằng Samba cho phép kết nối Linux với miền Active Directory và Linux hoạt động như bộ điều khiển miền. Phần mềm máy khách SMB cũng có trên Linux (miễn phí) và các hệ điều hành khác.

CIFS là gì?

CIFS, hay Common Internet File System, là một phiên bản cụ thể hay phương ngữ của SMB do Microsoft phát triển năm 1996 sau khi giới thiệu Windows 95. Phương ngữ là phiên bản và không phải giao thức độc lập. Phương ngữ là gói tin gửi/nhận để giao tiếp giữa máy chủ định nghĩa phía phiên bản giao thức cụ thể. CIFS không phải hệ thống tệp, khác với tên gọi.

CIFS dựa trên đặc điểm kỹ thuật giao thức SMB gốc nhưng thêm tính năng từ Microsoft. Microsoft hiện thực kết nối trực tiếp qua TCP và cổng 445 không dùng NetBIOS qua TCP (được dùng trên SMB 1 đầu tiên). CIFS là bản thực hiện SMB 1 và không phải công cụ chia sẻ tệp riêng biệt.

Các phương ngữ giao thức SMB

Thảo luận về hiện thực SMB1 của Microsoft, dùng thuật ngữ CIFS. Trong tất cả các trường hợp khác, SMB là thuật ngữ đúng đề cập giao thức này. Xem kỹ hơn các phiên bản SMB giới thiệu sau CIFS để hiểu khác biệt giữa CIFS và phương ngữ SMB hiện đại mới.

SMB 2.0

Microsoft giới thiệu SMB 2.0 (hoặc SMB2) năm 2006 với Windows Vista. Phiên bản này đáng tin cậy hơn SMB 1.0/CIFS, và không phải là CIFS. Số lượng lệnh truyền tệp giảm từ hơn 100 còn 20. Hiệu suất cao hơn nhờ vào cơ chế xử lý đường ống, tức là, khả năng gửi một yêu cầu bổ sung trước khi nhận được phản hồi cho yêu cầu trước đó. Gói nhiều hành động vào một yêu cầu giảm số lượng yêu cầu đến một máy khách, điều này cải thiện hiệu suất.

SMB 2.1

SMB 2.1 cung cấp cải tiến không đáng kể về hiệu suất và cơ chế chặn so với SMB 2.0. Phiên bản giao thức này được phát hành cùng với Windows 7 và Windows Server 2008 R2.

SMB 3.0

Ban đầu, phiên bản giao thức này được gọi là SMB 2.2, nhưng sau đó được đổi tên thành SMB 3.0 với Windows 8. Phiên bản SMB 3.0:

  • thêm SMB Direct (truy cập trực tiếp vào bộ nhớ), SMB Đa kênh và Chuyển đổi dự phòng SMB
  • cải thiện bảo mật
  • thêm hỗ trợ cho mã hóa từ điểm đầu đến điểm cuối
  • cải thiện hiệu quả mạng bằng cách giảm độ trễ

SMB 3.0.2

SMB 3.0.2 hoặc 3.02 đã có sẵn từ Windows 8.1 và Windows Server 2012 R2. Trong phiên bản này, khả năng tương thích SMB 1.0 có thể được tắt để cải thiện bảo mật.

SMB 3.1.1

Phiên bản này có sẵn bắt đầu từ Windows 10 và Windows Server 2016. Những cải tiến bao gồm mã hóa tốt hơn (AES 128 GCM và AES 128 CCM) và băm SHA-512 để kiểm tra tính toàn vẹn trước khi xác thực.

SMB trong Windows và Máy chủ Microsoft

SMB có sẵn trong Windows bắt đầu từ Windows 3.1 (Windows dành cho nhóm làm việc). Các phiên bản SMB và khả năng tương thích cho các phiên bản Windows khác nhau được giải thích trong bảng.

Các cột và hàng chứa các phiên bản Windows có thể chạy máy khách SMB hoặc máy chủ SMB (các cột và hàng có thể hoán đổi). Một ô tại giao điểm của một cột và hàng hiển thị phiên bản giao thức SMB nào được sử dụng để giao tiếp giữa các phiên bản Windows tương ứng.

Windows 10

Máy chủ 2016 và mới hơn

Windows 8.1

Máy chủ 2012 R2

Windows 8

Máy chủ 2012

Windows 7

Máy chủ 2008 R2

Windows Vista

Máy chủ 2008

Win XP, Máy chủ 2003 và cũ hơn
Windows 10

Máy chủ 2016 và mới hơn

SMB 3.1.1 SMB 3.02 SMB 3.0 SMB 2.1 SMB 2.0 SMB 1.0
Windows 8.1

Máy chủ 2012 R2

SMB 3.02 SMB 3.02 SMB 3.0 SMB 2.1 SMB 2.0 SMB 1.0
Windows 8

Máy chủ 2012

SMB 3.0 SMB 3.0 SMB 3.0 SMB 2.1 SMB 2.0 SMB 1.0
Windows 7

Server 2008 R2

SMB 2.1 SMB 2.1 SMB 2.1 SMB 2.1 SMB 2.0 SMB 1.0
Windows Vista

Server 2008

SMB 2.0 SMB 2.0 SMB 2.0 SMB 2.0 SMB 2.0 SMB 1.0
Win XP, Server 2003 và cũ hơn SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0

CIFS với SMB: Nguồn gốc có thể của sự nhầm lẫn

Cùng tìm hiểu vì sao các thuật ngữ CIFS và SMB vẫn bị nhầm lẫn bởi người dùng qua ví dụ sau. Để làm điều đó, giả sử chúng ta đang sử dụng một máy chủ với một chia sẻ SMB được cấu hình trên Windows Server 2019 và một máy Linux kết nối với máy chủ tập tin này qua giao thức SMB. Ubuntu 20.04 là phiên bản Linux mà chúng tôi đang sử dụng trong ví dụ này. Lưu ý rằng cấu hình là giống nhau cho Ubuntu 22.

Chúng tôi có cấu hình như sau trong các môi trường của chúng tôi:

  • Windows Server 2019: 192. 168.101.209
  • Linux Ubuntu 20.04: 192. 168.101.210
  • Chia sẻ SMB trên Windows Server: 192.168.101.209share

Trong Windows Server 2019, giao thức SMB 1.0/CIFS đã vô hiệu hóa theo mặc định. Để kiểm tra cài đặt này và kích hoạt/vô hiệu hóa khách hàng và máy chủ SMB 1.0/CIFS một cách thủ công, hãy đi đến Server Manager > Add Roles and Features > Features.

Chúng tôi giữ giao thức SMB 1.0/CIFS vô hiệu hóa trên máy Windows Server 2019 của chúng tôi. Điều này có nghĩa rằng SMB 3 được sử dụng theo mặc định với khả năng chuyển sang SMB 2 để tương thích với khách hàng sử dụng phiên bản SMB 2 (biến thể).

CIFS vs SMB – SMB 1.0/CIFS is disabled by default in Windows Server 2019

Giao thức CIFS đã vô hiệu theo mặc định trong các phiên bản Windows hiện đại như Windows 10 để đảm bảo an ninh tốt hơn, và bạn có thể kích hoạt nó thủ công nếu cần thiết.

Lưu ý: Năm 2017, các cuộc tấn công ransomware toàn cầu khổng lồ (WannaCry và NotPetya) đã được thực hiện bằng cách sử dụng các lỗ hổng SMB 1. Những lỗ hổng này đã được đặt tên là EternalBlue, EternalRomance và EternalChampion. Microsoft đã phát hành các bản vá bảo mật cho hệ điều hành của mình bắt đầu từ Windows XP và Windows Server 2003, mặc dù thực tế rằng các hệ điều hành này không còn là một phiên bản được hỗ trợ chính thức tại thời điểm đó. Microsoft khuyến nghị sử dụng SMB 2 và SMB 3 (hỗ trợ tính toàn vẹn xác thực trước) thay vì sử dụng SMB 1.0/CIFS. Như đã đề cập ở trên, tên của máy chủ SMB cho Linux là Samba ( samba là tên gói). Chúng tôi sử dụng một máy chủ SMB trên Windows. Vì vậy, chúng tôi không cần Samba trong ví dụ này, mà cần một máy khách SMB cho Ubuntu Linux.

Một khách hàng SMB cho Linux được bao gồm trong Linux CIFS Utils ( cifs-utils là tên gói). Đây là nơi sự nhầm lẫn xuất phát. Phiên bản đầu tiên của khách hàng này cho Linux được tạo ra vào thời điểm SMB 1.0/CIFS được sử dụng rộng rãi. Giao thức SMB đã được cập nhật, phiên bản SMB 2 và 3 đã được phát hành, nhưng tên của khách hàng SMB Linux vẫn giữ nguyên, và gói bao gồm khách hàng SMB vẫn được gọi là CIFS Utils. Gói cifs-utils không phải là một phần của samba .

Chúng tôi sẽ kết nối từ Linux sử dụng CIFS Utils tới một chia sẻ tệp SMB nằm trên Windows Server 2019 để tìm hiểu xem CIFS có được sử dụng hay không. Để cài đặt CIFS Utils, hãy chạy lệnh sau với quyền root:

sudo apt-get install cifs-utils

Tạo một thư mục để sử dụng làm điểm gắn kết cho chia sẻ tệp SMB:

mkdir /mnt/share

Kết nối với chia sẻ tệp SMB nằm trên máy chủ tệp Windows từ xa:

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator

Chúng tôi sử dụng tài khoản người dùng quản trị viên Windows làm ví dụ của chúng tôi cho mục đích giáo dục.

What is SMB file share – connecting to the share from Linux

CIFS so với SMB – cái nào được sử dụng trong phiên giao dịch hiện tại để kết nối với máy chủ tệp? Kiểm tra phiên bản SMB của các máy khách kết nối với chia sẻ tệp SMB trên Windows Server bằng câu lệnh PowerShell trên Windows Server 2019:

Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect

Như chúng ta thấy trong xuất ra của PowerShell, SMB 3.1.1 được sử dụng cho kết nối của chúng tôi từ Ubuntu Linux. SMB 1.0/CIFS không được sử dụng khi chúng tôi kết nối với cifs-utils và lệnh mount.cifs tới một máy chủ tệp được cấu hình trên Windows Server 2019.

What is SMB file share – how to check the SMB dialect used

Chúng tôi cũng có thể kiểm tra phiên bản giao thức SMB trong /proc/mounts với lệnh cat /proc/mounts trong Linux. Chúng tôi có thể sử dụng câu lệnh sau để lọc chỉ các kết quả cần thiết:

cat /proc/mounts | grep cifs

Như chúng tôi thấy trong xuất ra, phiên bản giao thức để kết nối với chia sẻ tệp được đánh dấu cifs, nhưng phiên bản hiển thị là 3.1.1 (vers=3.1.1), không phải là một phiên bản của CIFS. Đây là một ví dụ nữa cho thấy cách mà các thuật ngữ SMB so với CIFS có thể bị nhầm lẫn.

CIFS vs SMB – checking which SMB version is used for the current connection

Trong thực tế, SMB 3.1.1 đang được sử dụng chứ không phải CIFS. Chúng tôi có thể chứng minh điều đó bằng một phương pháp khác bằng cách sử dụng nmap, công cụ phát hiện mạng miễn phí được sử dụng để phân tích và khắc phục sự cố.

Để cài đặt nmap trong Ubuntu, hãy chạy lệnh như root:

sudo apt-get install nmap

Để quét tất cả các máy chủ vật lý đang trực tuyến và kết nối với mạng 192.168.101.0/24 của chúng tôi, chúng tôi sử dụng lệnh sau:

nmap --script smb-protocols 192.168.101.0/24

Chúng tôi rất quan tâm đến việc xem kết quả cho địa chỉ IP 192.168.101.209, đây là địa chỉ IP của máy chủ Windows Server 2019 đang hoạt động như một máy chủ chia sẻ tệp. Hệ điều hành Linux được kết nối với chia sẻ tệp trên máy chủ này. Trong đầu ra, chúng tôi thấy rằng các phương ngữ cho các giao thức SMB được hỗ trợ bởi Windows Server của chúng tôi là 2.02, 2.10, 3.00, 3.02 và 3.11. Không có SMB 1.0/CIFS, mặc dù thuật ngữ CIFS vẫn được sử dụng trong các tệp cấu hình Linux và các lệnh.

CIFS vs SMB – checking which SMB dialects are supported on the server

Chúng tôi có thể buộc sử dụng CIFS thủ công bằng cách thêm tham số vers=1.0 vào lệnh mount trong hệ điều hành Linux (ở phía máy khách) để chỉ sử dụng giao thức SMB 1.0/CIFS khi kết nối với một chia sẻ tệp trên máy chủ từ xa.

mount -t cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0

hoặc

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0

Kết quả như sau:

Máy chủ đột ngột đóng kết nối. Điều này có thể xảy ra nếu máy chủ không hỗ trợ phiên bản SMB mà bạn đang cố gắng sử dụng. Phiên bản SMB mặc định gần đây đã thay đổi từ SMB1 sang SMB2.1 và cao hơn .

Kết quả này khớp với kết quả trước đó của cuộc điều tra SMB vs CIFS của chúng tôi trên các hệ điều hành hiện đại. CIFS không được sử dụng và SMB 1.0/CIFS đã vô hiệu hóa trên Windows Server của chúng tôi.

Nếu chúng tôi đặt nó để sử dụng ít nhất SMB 2.0, thì chúng tôi có thể kết nối với máy chủ (nhớ danh sách các phương ngữ SMB được hỗ trợ bởi Windows Server 2019 của chúng tôi hiển thị trong nmap ):

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0

Connecting to an SMB share using the SMB2 dialect from Linux

Khi sử dụng giao diện người dùng đồ họa trong các hệ điều hành Linux hoặc khác, sử dụng smb:// trong dòng địa chỉ khi xác định giao thức mạng sẽ được sử dụng để kết nối với một chia sẻ tệp trên máy chủ từ xa.

Khi nhập địa chỉ vào một chia sẻ tệp SMB, bạn nên sử dụng:

smb://server-name/share-name

Không sử dụng:

cifs://server-name/share-name

vì máy khách sẽ cố gắng kết nối bằng giao thức SMB1.0/CIFS, có thể đã vô hiệu hóa trên máy chủ (nếu máy khách thậm chí hỗ trợ cú pháp cifs://).

Kết luận

Bây giờ, giao thức CIFS đã lỗi thời, SMB là một trong những giao thức được sử dụng để kết nối với không gian lưu trữ chia sẻ trên các máy chủ tệp và NAS (nfs là một giao thức khác thường được sử dụng). Với lưu trữ chia sẻ đặc biệt dễ bị hỏng dữ liệu, ransomware và các mối đe dọa khác có thể dễ dàng lây lan qua mạng, hãy đảm bảo sao lưu các tệp và thư mục được lưu trữ trên các tài nguyên chia sẻ để tránh mất mát dữ liệu. Việc lây nhiễm máy tính của một người dùng có quyền viết vào các tệp chia sẻ có thể gây mất mát dữ liệu cho tất cả người dùng. NAKIVO Backup & Replication là một giải pháp bảo vệ dữ liệu hỗ trợ sao lưu gia tăng qua SMB và NFS đối với dữ liệu được lưu trữ trên các thiết bị NAS và máy chủ tệp Windows/Linux.

Dùng thử NAKIVO Backup & Replication

Dùng thử NAKIVO Backup & Replication

Đăng ký dùng thử miễn phí để khám phá toàn bộ các tính năng bảo vệ dữ liệu của giải pháp này. 15 ngày miễn phí. Không có bất kỳ giới hạn nào về tính năng hay dung lượng. Không cần thẻ tín dụng.

Có thể bạn cũng quan tâm