Monday, November 1, 2010

[Samba]Samba_Protocols

Samba là một tiện ích giúp ta chia sẻ tài nguyên giữa các máy sử dụng Windows và Linux. Đây là phần đầu tiên nói về Samba trên blog của tôi. Phần này sẽ nói về các giao thức chính mà Samba sử dụng đến.

Các giao thức liên quan đến Samba



CIFS là giao thức đảm nhiệm việc chia sẻ tài nguyên và các Windows-based sử dụng chúng cho việc chia sẻ lẫn nhau. CIFS thực ra là một phiên bản mới dựa trên SMB.
CIFS là một giao thức kiểu connection-oriented và stateful và cung cấp 3 dịch vụ chính:
  •     -dịch vụ chuyển đổi tên
  •     -gửi các datagrams đến 1 hoặc 1 nhóm các hosts
  •     -thiết lập một kết nối lâu dài giữa client và server
1. TÌm hiểu về NetBIOS
NetBIOS giải quyết việc name-to-address bằng cách cho phép mỗi host khai báo 1 tên riêng trong mạng, từ đó có thể dịch sang địa chỉ IP để cho host hiểu đc
2.Trong NetBIOS, mỗi khi 1 máy online nó sẽ xin 1 tên, quá trình này gọi là name registration. Trong 1 mạng thì ko thể có tình trạng 2 host có cùng tên để đảm bảo cho việc truyền tải giữa các host đc toàn vẹn. Có 2 cách để thực hiện việc này:
  •     -Cho phép mỗi host trong mạng tự định nghĩa 1 tên cho nó, ko đếm xỉa gì đến việc tên này đã đc sử dụng hay chưa? Tên sẽ đc khai báo bằng các gửi broadcast cho toàn mạng
  •     -Sử dụng WINS server để lưu lại các bản ghi của các hosts đã registered với 1 NetBIOS. Điều này là cần thiết khi các hosts nằm trong các segments mạng khác nhau mà gói tin broadcast ko thể đến đc.
Việc dịch tên host sang ip gọi là name resolution. Có 2 cách để quản lý quá trình này:
    -Mỗi host sẽ thông báo lại IP của nó khi nghe thấy 1 gói tin broadcast từ NetBIOS name.
    -Sử dụng WINS để giải quyết vấn đề trên
==============
Kết nối đến một CIFS server

Giả sử ta có 2 máy muốn chia sẻ dữ liệu cho nhau là host1 và host2 và host2 đóng vai trò là host chia sẻ.Ta giả sử rằng host1 đã phân giải được tên host2 sang IP. CIFS hỗ trợ nhiều kiểu xác thực khác nhau nên việc kết nối đến các tài nguyên đc chia sẻ ko giống nhau hoàn toàn. Giả sử quá trình diễn ra theo sơ đồ sau:
   host1=============================host2
                      thoả thuận ban đầu
step1:    --------------------------------------->

               đáp trả lại giao thức sẽ dùng
step2:    <---------------------------------------

        client đưa ra thông tin để thiết lập kết nối
step3:    --------------------------------------->

                       server trả về vuid
step4:    <---------------------------------------

            gửi tcon với vuid đã đc đưa ra trước đó
step5:    --------------------------------------->

            trả lại tid nếu xác thực thành công
step6:    <---------------------------------------

step1

Bước đầu tiên là phải thoả thuận xem 2 bên sẽ sử dụng giao thức nào. Phía client sẽ gửi 1 list các giao thức mà nó có thể hiểu được và server sẽ chọn 1 trong các giao thức đó.Các giao thức hỗ trợ ở đây khá nhiều.

step2

 Các thông tin từ Negotiate Protocol(negprot) của server như hỗ trợ mã hoá pass, mức độ bảo mật được sử dụng khi kết nối đến dữ liệu đc chia sẻ...Server sẽ trả lại cho user 1 kết quả để cả 2 sẽ sử dụng.

 step3:
Một khi cả 2 bên đã thoả thuận đc thì bước tiếp theo sẽ chứng thực một credentials của user(nôm na là thông tin để user chứng thực). Trong khi quá trình thiết lập diễn ra (sesssetup) việc đồng bộ login name có thể dưới các dạng khác nhau(dưới dạng plaintext hay mã hoá....)

step4:
Nếu user chứng thực thành công server sẽ trả về cho client một virtual uid(vuid), đây là 1 key 16-bit.

step5:
Nếu phiên thiết lập tiếp tục thành công, client sẽ đưa vuid vào tree connection(tcon) request, đây chính là request để tạo nên một kết nối thật cho việc chia sẻ. Tại đây, server sẽ làm công việc chứng thực lại xem các thông số có đc chấp nhận hay ko dựa vào vuid đã đc gán trước đó.
Nếu phiên làm việc bị gián đoạn, server sẽ phải yêu cầu user chứng thực lại và đưa ra một vuid mới trước khi phiên kết nối đc tái thiết lập.

step6:
Nếu user vượt qua đc việc chứng thực thì sẽ có quyền kết nối đến dữ liệu chia sẻ của server, server sẽ reply với tree connection ID(tid)
Đến bước này, client có thể thực hiện các công việc trên tài nguyên chia sẻ, khi muốn làm việc với tài nguyên nào thì sẽ đưa ra tid để trỏ đến hệ thống tài nguyên đó và sử dụng vuid dành cho việc chứng thực của server.

No comments:

Post a Comment