I. NGUYÊN TẮC LÀM VIỆC CỦA NETBIOS.
NetBIOS là chương trình cơ sở nhằm cung cấp các dịch vụ Network để xây dựng các chương trình ứng dụng chạy trên hệ điều hành đơn nhiệm và hệ điều hành đa nhiệm. NetBIOS cung cấp các dịch vụ giữa chương trình ứng dụng và phần cứng của LAN tương tự như IO.SYS và BIOS cung cấp các dịch vụ giữa các ứng dụng chương trình và các phần cứng của thiết bị ngoại vi. Vị trí của nó trong mối quan hệ giữa phần mềm mạng được chỉ ra sau đây:

Trong hình trên. REDIRERTOR là một phần mềm bảo đảm chuyển hướng đối với yêu cầu của chương trình sử dụng phần mềm hệ thống PC. Trong chuẩn OSI NETBIOS nằm giữa mức 5 và mức 6:

Trên hình trên, ta thấy được quá trình truyền dẫn thông tin từ một ứng dụng này đến một ứng dụng khác xảy ra như thế nào trong mô hình OSI. Mỗi lớp trong PC cần gởi trực tiếp các thông tin đến các lớp liền kề với nó ( Dạng truyền tin này gọi là truyền tin liền kề (adjacent layre)), mặc khác mỗi lớp trong mỗi máy có thể gởi một cách gián tiếp khi thông báo của mình cho lớp ngang hàng với mình ở máy kia, dạng này gọi là truyền ngang hàng (per layer).
Trong các IBM PC NETWORK ADAPTER CARD, các giao thức (Protocol) từ mức 1 đến mức 5 đã được cài đặt như là một chương trình cơ sở, nghĩa là mọi thủ tục từ mức 1 đến mức 5 đã được cài sẵn. NETBIOS cũng được sử dụng trong IBM TOKENRING NETWORK, nhưng TOKENRING NETWORK CARD chỉ chứa protocol mức 1 và 2, từ mức 3 đến mức 5 được thực hiện nhờ phần mềm.
Một trong các khía cạnh chưa tương thích của NETBIOS là quan hệ của nó với các phần mềm ứng dụng trong các mạng NETWORK mà không phải của hãng IBM. Hiện nay nhiều mạng đề cập đến vấn đề tương thích của NETBIOS “NETBIOS Compatibility” nhưng ý nghĩa của nó là gì và tác động của nó đến sự hoạt động của mạng như thế nào ? Nó có thực sự cần thiết không ? Trả lời vấn đề này sẽ rất có ý nghiã đối với những người quản lý mạng vì họ sẽ phải thực hiện nhiệm vụ chọn phần mềm mạng tối ưu.
Để trả lời câu hỏi này thì cần xem xét là ngoài chức năng gọi hàm thì NETBIOS còn có chức năng nào khác. Đối với IBM PC NETWORK, NETBIOS bao gồm phần chương trình cơ sở đang cài đặt sẵn, và người ta quan niệm nó như là LOCAL NET PC PROTOCOL.
Đa số người sử dụng dùng NETBIOS để thực hiện một lệnh nào đó được hỗ trợ bằng NETBIOS PC NETWORK. Dạng chương trình ứng dụng khác là có thể truy xuất đến các dịch vụ do NETBIOS hỗ trợ qua một hay hai lệnh gọi là hợp ngữ. Một lệnh được gọi là ngắt mềm 5Ch, gọi địa chỉ trực tiếp của IBM PC ADAPTER CARD; lệnh còn gọi là ngắt mềm 2Ah, lệnh này không phụ thuộc IBM PC ADAPTER CARD hiện thời. Một chương trình mô phỏng NETBIOS, chúng ta thấy rất rõ trong các mạng không phải của IBM, có thể hỗ trợ các ứng dụng phần mềm giống như các dịch vụ của NETBIOS. Nếu chương trình ứng dụng được viết và sử dụng ngắt 2Ah, chương trình mô phỏng sẽ bảo đảm tiêu chuẩn xử lý tuần tự, chương trình ứng dụng cung cấp các yếu tố dữ liệu cần thiết, các yếu tố này được cài đặt vào trong NCB ( NETWORK CONTROL BLOCK). Khi lệnh gọi ngắt 2Ah được thực hiện, bộ mô phỏng sẽ xử lý các đòi hỏi xử lý của LAN.

Thuận lợi của chương trình này là người lập trình ứng dụng có thể sử dụng NCB tiêu chuẩn để cài đặt LAN như một thiết bị vào ra. Để làm việc đó, NETBIOS tổ chức đặt tên cho các máy trạm WORK STATION hoặc máy chủ FILE SERVER có trong mạng. Tên được gán một cách logic đến một đối tượng được kích hoạt. Ví dụ các thư mục dùng chung có các tên của mình, các máy in được kết nối cũng có tên... Mỗi WORK STATION hoặc FILE SERVER có tên riêng của mình. IBM PC NETWORK ADAPTER CARD có thể gán 16 tên cho một thiết bị, một trong số 16 tên này hỗ trợ cho chính thiết bị.
Vai trò của NETBIOS đối với mạng IBM và không IBM được mô tả trên hình trên.
NETBIOS cung cấp 4 hỗ trợ cơ bản sau đây:
-NETBIOS name support.
-NETBIOS datagram support
-NETBIOS session support.
-NETBIOS general support.
1. NETBIOS name support.
Một khả năng mà NETBIOS LAN dùng để phân biệt các adapter khác trên mạng, đặt tên mạng (Network name). Nó cho phép các ứng dụng mạng gởi các thông điệp (massages) của chúng đến adapter đích cần thiết và xác định adapter nguồn của message.
Mỗi network name có 16 ký tự (có phân biệt chữ hoa và chữ thường). IBM dành riêng giá trị từ 00h đến 1Fh cho ký tự thứ 16. Như vậy ta có 15 ký tự cho IBM PC LAN name.
Chỉ số tên (number of name) cho một adapter có thể được sử dụng với số lượng lớn. Trước khi một adapter được sử dụng với một tên nào đó, tên đó phải được đăng ký và tên đó được sử dụng trong mạng LAN hiện hành. NETBIOS đăng ký tên theo hai loại: Add name và Addgroup name. Group name thường được sử dụng để gởi messages đến một nhóm các máy trạm (workstation) còn Add name thường được sử dụng để gởi message đến một máy trạm.
Nếu một đăng ký tên không thành công thì một thông báo sẽ được báo cho ứng dụng của máy trạm (workstation) một mã lỗi (error return code). Trong trường hợp không có lỗi, NETBIOS đặt tên vào NETBIOS name table, sau đó sẽ báo cho ứng dụng của LAN biết là việc đăng ký tên thành công với một giá trị một byte.
Byte không dấu này được gọi là NetBIOS name number, name number này là một chỉ số, được sử dụng trong các lệnh của NetBIOS dùng để liên hệ với name của nó. NETBIOS gán giá trị cho name number tăng dần, module 255 và quay vòng. Giá trị 00 và 255 không được gán.
NetBIOS name table là một bảng tạm thời ở trong RAM và nó được tạo lại mỗi khi hệ thống khởi động hay khởi động adapter. Nếu một NetBIOS module cung cấp nhiều hơn một LAN adapter trong một máy trạm workstation, mỗi adapter có một NetBIOS name table độc lập nhau.
2. Datagram support và session support.
Khi một adapter được phép hoạt động trong một mạng, các chương trình ứng dụng trong một máy trạm workstation có thể sử dụng NetBIOS để kết nối với các ứng dụng khác trong cùng một workstation hay trên các workstation khác. Các ứng dụng có thể sử dụng datagram support hay session support.
a/ Datagram support.
Datagram là một thông báo ngắn có kích thước thay đổi tùy theo NetBIOS. Nó không đảm bảo là các thông tin đến nơi an toàn hay không vì không có một xác nhận nào được cung cấp bởi NetBIOS. Trạng thái của máy nhận có thể là:
-Không hoạt động.
-Nguồn bị tắt.
-Không sẵn sàng chờ một datagram nào.
Một datagram có thể không bao giờ được nhận bởi bất kỳ một workstation nào. Kết nối kiểu datagram là kết nối kiểu gởi và mời. Thuận lợi của kết nối datagram là nó ít tốn tài nguyên hơn kết nối session.
Có hai kiểu kết nối datagram:
-Broadcast datagram
-Plain datagram.
Trong cả hai trường hợp, lệnh NetBIOS truyền datagram đều tham chiếu đến number name NetBIOS cục bộ. Plain datagram được truyền đến các group names, và broadcast datagram có độ an toàn dữ liệu rất thấp, vì nó có thể bị cản trở bởi một tác động rất nhỏ.
Broadcast datagram không phân biệt các datagram được truyền với lệnh NetBIOS SEND broadcast datagram. Bất kỳ một adapter nào, kể cả adapter truyền tin, đều có thể nhận datagram nếu trước đó lệnh NetBIOS RECEIVER broadcast datagram được phát đi. Nên tránh truyền broadcast datagram, bởi vì hai ứng dụng trong cùng một workstation có thể dể dàng nhận broadcast datagram của ứng dụng khác.
Plain datagram thì phân biệt các datagram được truyền với lệnh NetBIOS SEND datagram. Không như lệnh NetBIOS SEND broadcast datagram, các ứng dụng đặc tả NetBIOS name nhận trong lệnh NetBIOS SEND datagram.
Nếu một ứng dụng đặc tả name number là Ffh, ứng dụng này có thể nhận một datagram của bất kỳ name trong NetBIOS name table. Điều này gọi là Receive any_datagram.
b/ Session Support.
NetBIOS session support tạo sự kết nối để truyền dữ liệu hai chiều giữa hai ứng dụng trong một thời gian dài.
Khởi tạo session:
Các session được tạo khi một ứng dụng phát hiện NetBIOS Listen tham chiếu đến một tên trong NetBIOS name table của nó, các trình ứng dụng có thể sử dụng một tên có trong NetBIOS name table hay là thêm tên vào trong bảng đó. Trình ứng dụng thứ hai phát hiện NetBIOS Call với tên tham chiếu là tên mà ứng dụng thứ nhất đang đợi. Nếu phù hợp thì hai lệnh Listen và Call thực hiện thành công, session đã được khởi tạo.
Mỗi ứng dụng sẽ nhận thông báo session đã thiết lập bằng một giá trị một byte không dấu hoặc là NetBIOS Local Session Number (LSN) để adapter liên hệ với session. NetBIOS gán giá trị LSN tăng dần, module 255 quay vòng, giá trị 00 và 255 không bao giờ được gán vì đó là cận trên và cận dưới.
Đặc tính của lệnh Receive:
Sau khi thiết lập session, hai bên có thể phát lệnh NetBIOS Send và Receive để truyền dữ liệu. Nếu một tên cho trước được dùng để tạo nhiều session, ứng dụng có thể phát hiện NetBIOS Receive_any_for_a_specified_name (Receive_any) để nhận dữ liệu của bất kỳ session đã liên hệ với tên được đặc tả. Một ứng dụng có thể phát hiện NetBIOS Receive_any_for_any_name (Receive_any_any) để nhận dữ liệu của bất kỳ session hiện hành.
Thứ tự ưu tiên như sau:
1.Receive.
2.Receive_any_for_a_specified_name.
3.Receive_any_for_any_name.
Đặc tính của lệnh gởi:
Các ứng dụng phát hiện NetBIOS Send để truyền dữ liệu đến các ứng dụng khác. Lệnh Send cho phép các ứng dụng gửi các thông báo có kích thước từ 0 byte đến 64kB trừ một byte dữ liệu. Các dữ liệu phải liên tục trong bộ nhớ. Ứng dụng có thể phát lệnh NetBIOS Chain Send cho phép dữ liệu ở trong hai Buffer nằm ở hai vùng lưu trữ khác nhau.
Với lệnh Chain Send, dữ liệu ở trong mỗi Buffer phải được bố trí liên tục trong bộ nhớ còn giữa hai Buffer này không được bố trí liên tục. Hơn nữa, mỗi khối dữ liệu có kích thước 0 byte đến 64 kB trừ một byte. Như vậy, cho phép 128kB trừ 2 bytes dữ liệu có thể được truyền với lệnh Chain Send.
Lưu ý về lệnh Send và Receive:
Chú ý đầu tiên là có lệnh NetBIOS Chain Send, nhưng không có lệnh NetBIOS Chain Receive. NetBIOS cho phép các ứng dụng nhận một phần của lượng tin và phát hiện NetBIOS Receive để nhận phần còn lại. Điều này đúng cho các thông báo bắt nguồn từ hai lệnh Send và Chain Send. Ngược lại một lệnh đơn NetBIOS Receive thường thường nhận các thông báo được truyền với lệnh Chain Send nếu thông báo không quá lớn. Trong bất kỳ sự kiện nào, ứng dụng nhận không thể biết được thông báo được truyền với lệnh Send hay Chain Send, trừ khi nó có kích thước vược quá 64kB trừ 1 byte. Bởi vì trong lệnh Chain Send, dữ liệu khởi đầu trong hai Buffer riêng biệt và luôn luôn không liền một khối và không có sự hiển thị nào về ranh giới cuả các Buffer nguồn.
Các ứng dụng nhận từng phần của thông báo và không được giữ chậm quá lâu để nhận toàn bộ thông báo. Nói rõ hơn, khi một session được thiết lập, mỗi bên cần đặc tả thời hạn time_out cho lệnh Send và Receive. Nếu lệnh gởi vượt quá ngưỡng giới hạn trước khi thông báo được nhận hoàn tất, lệnh gởi sẽ bị time_out và session bị kết thúc bởi adapter gởi. Trong trường hợp này, cả hai bên sẽ được thông báo về hậu quả của việc gởi không thàng công này.
Chấm dứt Session:
Session được chấm dứt bởi một hay cả hai bên phát lệnh NetBIOS Hang Up và chỉ rõ số LSN của session được chấm dứt, ứng dụng khác được thông báo về session chấm dứt khi nó phát lệnh session đến sau. Một ứng dụng có thể phát lệnh NetBIOS Session để biết trạng thái của một session đang hiện hành hay đã bị hủy bỏ.
3. General support.
Lệnh NetBIOS General cung cấp các hỗ trợ NetBIOS sau:
-Reset
-Adapter Status
-Cancel hay Unlink
-Find Name
-Trace
Lệnh RESET:
Lệnh RESET đưa Adapter về trạng thái khởi tạo. Chấm dứt tất cả Session và xoá tất cả các tên trong NetBIOS name table ngoại trừ Permanent Note name. Lệnh Reset sẽ đặc tả số lượng tối đa cho phép các lệnh của NetBIOS gắn vào cùng một thời điểm, và số lượng tối đa các Session hiện hành có trong Adapter.
Lệnh ADAPTER STATUS:
Lệnh ADAPTER cho ta biết được các thông tin về trạng thái của Adapter cũng như xác định những lỗi của LAN và NetBIOS name table.
Lệnh CANCEL và UNLINK:
Lệnh NetBIOS CANCEL cho phép các ứng dụng hủy bỏ các lệnh chưa được hoàn tất. Lệnh NetBIOS UNLINK cho phép PC NetBIOS LAN Adapter không nối kết nữa.
Lệnh FIND NAME:
Lệnh NetBIOS FIND NAME sẽ xác định các Adapter có các symbolic name được đặc tả trong lệnh NetBIOS FIND NAME.
Lệnh TRACE:
Lệnh TRACE thực hiện từng bước tất cả các lệnh đã được đưa ra cho giao diện NetBIOS. Điều này giúp cho việc phân tích các chương trình.
4. Phát các lệnh của NetBIOS:
Các ứng dụng phát lệnh NetBIOS cần có một vùng đệm 64 bytes trong bộ nhớ. Trình ứng dụng sử dụng vùng đệm này để xây dựng Network Control Block (NCB). Sau khi hoàn thành việc điền các Field của NCB thì có thể phát lệnh NetBIOS.
Sau khi điền đầy đủ vào NCB, Ứng dụng sử dụng cặp Register ES:BX để chỉ vào vị trí của NCB, và phát yêu cầu qua ngắt 5Ch.
III. NETWORK CONTROL BLOCK (NCB):
1. Cấu trúc của NCB
Các ứng dụng truy xuất các hỗ trợ NetBIOS cần sử dụng Network Control Block. NCB có 64 bytes, với 14 fields và 14 bytes danh dự trữ. Các field của NCB được mô tả như sau:
Typedef struct
{
byte NCB_COMMAND;
byte NCB_RETCODE;
byte NCB_LSN;
byte NCB_NUM;
void far *NCB_BUFFER_PTR;
word NCB_LENGTH;
byte NCB_CALLNAME[16];
byte NCB_NAME[16];
byte NCB_RTO;
byte NCB_STO;
void interrupt (*POST_FUNC)(void);
byte NCB_LANA_NUM;
byte NCB_CMD_CPLT;
byte NCB_RECEIVE[14];
}
NCB;

2. NCB_COMMAND:
Field NCB_COMMAND là một byte dùng để đặc tả mã lệnh NetBIOS. Nếu bit cao nhất của mã lệnh là zero, NetBIOS chấp nhận yêu cầu và trở về ứng dụng khi lệnh hoàn tất. Nó được tham chiếu đến như là lựa chọn wait (wait option). Tại một thời điểm chỉ có một lệnh với lựa chọn wait có thể được gán vào.
Một vài lệnh như Reset, Cancel, Unlink phải đảm bảo được hoàn thành, các lệnh khác phải được thực hiện với vài điều kiện. Nếu một lệnh không hoàn tất được thì NetBIOS không bao giờ trở về và máy bị treo ngay. Để tránh tình trạng này, các ứng dụng có thể đặt bit cao nhất của mã lệnh trong field command là 1 đối với các lệnh, ngoại trừ lệnh Reset, Cancel, Unlink. Điều này được tham chiếu như là lựa chọn no_wait. Trong trường hợp này NetBIOS cung cấp một mã trả về (return code) chứa trong AL (đối với IBM PC) ngay sau khi lệnh được khởi tạo. Mã trả về thứ hai gọi là mã trả về cuối cùng (final return code) sẽ được trả về khi lệnh hoàn tất.
Mã trả về thứ nhất không phải là 00h thì NetBIOS không chấp thuận và không xử lý.
RETURN code (RETCODE):
Field Return code là một byte, chứa giá trị của mã trả về cuối cùng (final return code) khi NetBIOS hoàn tất lệnh.
Nếu lựa chọn no_wait được sử dụng, cả hai field NCb Command complete và NCB Return code chứa final return code sau khi lệnh hoàn tất:
-Mã trả về có giá trị 00h, xác nhận lệnh hoàn tất thành công.
-Mã trả về có giá trị từ 1 đến 254(Feh) xác nhận lệnh chấm dứt không thành công.
Local session number (LSN):
Field NCB Local session number gồm 1 byte, chứa chỉ số session cục bộ liên hệ với lệnh NetBIOS. Nó được gán bằng một giá trị tăng dần với module 255 quay vòng (Lưu ý là giá trị 00 và 255 không bao giờ được gán).
Name number (NUM):
Field NCB Name number gồm 1 byte, chứa name number trong NetBIOS name table liên hệ với lệnh. NetBIOS gán giá trị cho name number tăng dần, module 255, quay vòng. Name number one luôn luôn được gán cho chỉ số của Permanent node name.
Giá trị Ffh của field name number đặc tả với lệnh Receive_Any và receive datagram để xác định rằng dữ liệu có thể được tiếp nhận đối với bất kỳ session hiện hành hay name đã được đăng ký.
Buffer Address (NCB_BUFFER_PTR):
Field NCB Buffer address gồm 4 byte, chứa pointer chỉ đến buffer dữ liệu. Trong IBM PC, điạ chỉ có dạng OFFSET: SEGMENT.
Đối với lệnh Adapter Status và Session Status, Field này chứa địa chỉ nơi NetBIOS có thể đặc thông tin trả về. Đối với lệnh Cancel, Field này trỏ đến một NCB chỉ định cho việc huỷ bỏ. Đối với lệnh Chain Send, Send, Send Datagram và Send Broadcast Datagram thì field này đặc tả địa chỉ nơi dữ liệu được chứa và được truyền đi. Đối với lệnh Receive, Receive_Any, Receive Datagram và Receive Broadcast Datagram, field này chỉ định kích thước của buffer nhận dữ liệu.
Buffer length ( NCB_LENGTH):
Field NCB buffer length gồm hai byte, xác định kích thước của Buffer được chỉ định trong Field NCB Buffer address. Đối với lệnh Chain Send, Send, Send Datagram và Send Broadcast Datagram, Field này chỉ định kích thước của buffer nhận dữ liệu.
Call (remote) name(NCB_CALLNAME):
Field NCB Call name gồm 16 byte, chứa remote name liên hệ với yêu cầu:
Đối với lệnh Call, Listen và Send Datagram, field này chứa tên ứng dụng muốn kết nối. Tên luôn luôn là remote name, tuy thế, tên có thể là local name đối với local session. Trong trường hợp lệnh Listen, ký tự asterist(*) ở vị trí đầu tiên của Field này xác định rằng Listen có thể thoả mãn yêu cầu của lệnh Call bất kỳ gọi tới tên được đặc tả trong Field local name. Đối với lệnh Chain Send Field này dùng để đặc tả kích thước( 2byte đầu) và điạ chỉ (4 byte tiếp theo) của Buffer thứ hai.
Local Name (NCB_NAME):
Field NCB (local) name gồm 16 bytes, chứa local name liên quan với yêu cầu. Ký tự đầu tiên không được đặt là dấu (*).
Đối với lệnh Add Name và Add group Name, Field này chứa tên mà ứng dụng yêu cầu NetBIOS đăng ký vào NetBIOS name table. Đối với lệnh Delete thì Field này chứa tên mà ứng dụng yêu cầu xoá khỏi NetBIOS name table. Đối với lệnh Call hay Listen thì Field này chứa tên Localnetwork mà ứng dụng muốn sử dụng để xây dựng session
Receive time out ( NCB_RTO):
Field NCB receive time out gồm 1 byte, được sử dụng trong lệnh Call và Listen. Nó xác định số lượng nửa giây một mà lệnh Receive cần phải phải chờ trước khi time out và trả về một lỗi. Nếu field này có giá trị là 00 thì không có ngưỡng time out đối với lệnh Receive.
Thời hạn time out có thể khác nhau với mỗi session, nhưng khi đã được ấn định cho session nào thì không có khả năng thay đổi khi session đã được thiết lập.
Khi hết hạn time out của lệnh Receive any hay receive, session không bị kết thúc.
Send Time out (NCB_STO):
Field NCb Send time out gồm một byte, được sử dụng trong lệnh Call và Listen. Nó xác định số nữa giây lệnh Send có thể chờ được khi time out và trả về một mã lỗi. Nếu lệnh Send time out, session sẽ kết thúc. Nếu field này có giá trị là 00 thì không có ngưỡng time out.
Post routine address (NCB_POST_FUNC):
Field NCB Post routine address gồm 4 bytes, chứa con trỏ chỉ đến routine sẽ được thực hiện khi lệnh hoàn tất. NetBIOS chỉ xem xét Field này khi lệnh được đặc tả lựa chọn no wait.
Nếu điạ chỉ này là 00_00 NetBIOS không gọi Post Routine. Nếu điạ chỉ của Post Routine khác không thì NetBIOS sẽ gọi Post Routine như là một ngắt. NetBIOS sử dụng thanh ghi AL để lưu mã trở về. Thanh ghi CS:IP trỏ đến Post Routine và ES:BX trỏ đến NCB đã hoàn thành. Post Routine sẽ trở về NetBIOS bằng lệnh IRET.
Lana adapter number (NCB_LANA_NUM):
Field NCB Lana number gồm 1 byte, xác định adapter sẽ xử lý lệnh.
Command complete flag (NCB_CMB_CPLT):
Field NCB Command complete flag gồm một byte được xác định khi lệnh được đặc tả với lựa chọn no wait hoàn tất. Nếu field này có giá trị là Ffh thì lệnh chưa được hoàn thành. Nếu khác, field này chứa Final Command return code.
IV. CÁC LỆNH CỦA NETBIOS:
Lệnh của NetBIOS được thực hiện:
Khi một ứng dụng phát một lệnh đến NetBIOS, NetBIOS sẽ cung cấp một mã trả về cho yêu cầu của ứng dụng. Thành phần này phụ thuộc vào lệnh đặc tả lựa chọn wait hay no_wait. Nếu bít cao nhất của mã lệnh là 1 thì No_wait được lựa chọn. Ngược lại thì wait được lựa chọn.
Nếu lệnh đặc tả chọn wait, quyền điều khiển không trả về ứng dụng cho đến khi adapter hoàn thành lệnh. Khi lệnh hoàn thành, final return code sẽ được chứa trong thanh ghi AL, cũng như trong field NCB Return code và Field NCB Command complete.
Nếu lựa chọn no_wait, NetBIOS đưa ra từ mã trả về. Sau khi khởi tạo NCB, quyền điều khiển trả về sau ngắt yêu cầu NetBIOS với mã trả về chứa trong thanh ghi AL. Nếu mã trả về khác 00h nghĩa là adapter không thành công khi thi hành lệnh. Nếu mã trả về là 00h, adapter xếp hàng yêu cầu và cung cấp mã final return code khi adapter hoàn thành lệnh.
Khi ứng dụng kiểm tra Field NCB Command complete mà giá trị đó khác Ffh thì xác nhận lệnh hoàn tất và giá trị này là Final return code. Trình ứng dụng không nên sử dụng vòng lặp dựa trên Field NCB Return code để chấm dứt vòng lặp. Bởi vì NCB Return code được đặt trước tiên, sau khi hoàn thành NCB Return code, NCB có thể được đặt trong hàng đợi xử lý bên trong NetBIOS POST. Field NCB Command Complete không được đặt cho đến khi NCB ra khỏi hàng đợi xử lý POST.
1.
Lệnh Adapter status:
( 33h: wait – B3h: no_wait)
Lệnh adapter status yêu cầu NetBIOS cho biết trạng thái của local hay remote adapter.
NCB Callname đặc tả adapter. Field này có thể là Permanent node name, group name hay unique name. Thông tin trạng thái được trả về trong buffer được chỉ định trong field NCB Buffer@. Kích thước tối thiểu của buffer tối thiểu là 60 bytes. Kích thước tối đa là 60 nhân với 18 lần tối đa số name.
Thông báo trạng thái không được đầy đủ (06h), có hai lý do làm xuất hiện thông báo này:
1.Buffer không dủ lớn để chứa thông tin.
2.Thông tin trạng thái cho bởi lệnh remote adapter status vượt quá kích thước tối đa của datagram.

2. Lệnh add
group name:
( 36h: wait; B6h: no_wait )

3. ADD Name:
( 30h: wait; B0h: no_wait )

Lệnh ADD name thêm unique name vào NetBIOS name table của adapter. Đó là tên mà adapter biết và phải là duy nhất trong mạng adapter trả về number name trong field NCB Num. Chỉ số này được dùng trong datagram support đối với lệnh receive_any.
4. Lệnh Call:
( 10h: wait; 90h: no_wait )

Lệnh Call mở một session với tên nơi đến được đặc tả trong field NCB Call Name. Lệnh này được sử dụng local name, được đặc tả trong NCB Name. Adapter của tên nơi đến phải có lệnh listen gắn vào. Khi lệnh Call hoàn tất, NetBIOS gắn local session number (LSN) đến session vừa được thành lập.
5. Lệnh
Cancel:
( 35h:wait )

Lệnh Cancel huỷ bỏ các lệnh của NetBIOS của NCB có địa chỉ cho bởi NCB Buffer@. Ta không được huỷ bỏ các lệnh: Add Group Name, Add name, Cancel, Delete Name, Reset, Send datagram, Send broadcast datagram, Session Status, Unlink.
6.
Lệnh Chain send:
( 17h: wait; 97h: no_wait )

Lệnh Chain Send gởi dữ liệu trên session được đặc tả bởi NCB Lsn. Dữ liệu trong hai buffer độc lập được chỉ ra bởi NCB Buffer@ và NCB Callname. NetBIOS nối dữ liệu của Buffer thứ hai vào dữ liệu của buffer thứ nhất,và gởi dữ liệu tập hợp được như là một gói tin. Mỗi Buffer có thể chứa 0 -> 64 kB trừ một byte.
7. Lệnh Delete
name:
( 31h: wait; B1h: no_wait )

Lệnh Delete name xoá tên ra khỏi NetBIOS Name table.
8. Lệnh Hang
Up:
( 12h: wait; 92h: no_wait )

Lệnh Hang Up đóng session được đặc tả trong field NCB Lsn. Nếu lệnh Send và Chain Send đang được gắn với session thì lệnh Hang Up được hoãn lại cho đến khi lệnh Send và Chain Send hoàn tất.
9. Lệnh
Listen:
( 11h: wait; 91h: no - wait )

Lệnh Listen mở một session với tên được đặc tả trong field NCB Callname. Lệnh này sử dụng Local name được đặc tả trong NCB Name.
10. Lệnh
Receive:
( 15h: wait; 95h: no_wait )

Lệnh Receive tiếp nhận dữ liệu từ thành phần của session đã được đặc tả và có lệnh Send, Chain Send gửi dữ liệu đó. Nếu hơn một lệnh có thể tiếp nhận dữ liệu trên session được chỉ định, chúng được xử lý theo ưu tiên sau:
-Receive
-Receive – Any – for – a specified – Name
-Receive – Any – for – Any.
Nếu Buffer của receive không đủ lớn để tiếp nhận thông báo, thông báo message incomplete status (06h) được trả về. Để tiếp nhận phần còn lại trước khi Send time out xảy ra, ứng dụng có thể phát lệnh Receive hay Receive Any khác.
11. Lệnh
Receive_Any:
(16: wait; 96h: no_wait)

Lệnh Receive_Any tiếp nhận dữ liệu đến từ session bất kỳ. Giá trị time_out được đặc tả trong lệnh Call và Listen không ảnh hưởng trong lệnh này.
12. Lệnh
Receive Broadcast Datagram:
( 23h: wait; A3h: no_wait )

Lệnh Receive Broadcast Datagram tiếp nhận Datagram từ bất kỳ Datagram gọi lệnh Send Broadcast Datagram. Không có time_out đối với lệnh này.
13. Lệnh
Receive Datagram:
( 21h: wait; A1h: no_wait)

Lệnh receive Datagram tiếp nhận Datagram. Lệnh này không tiếp nhận Broadcast Datagram. Không có time_out đối với lệnh này.
14.
Lệnh Reset:
( 32: wait)

Lệnh Reset sẽ Reset Adapter được đặc tả. Nó xóa NetBIOS name và session table và huỷ bỏ bất kỳ Session nào đang hiện hữu của adapter.
15.
Lệnh Send:
( 14h: wait; 94h: no_wait)
Send No_Ack(
71: wait; F1: no_wait )

Lệnh Send gởi thông báo đến thành phần của Session được đặc tả bởi giá trị NCB Lsn. Lệnh Send không đi tương xứng với lệnh Receive sẽ làm lãng phí tài nguyên của NetBIOS.
16.
Lệnh Send Broadcast Datagram:
( 22h: wait; A2h: no_wait )

Lệnh Send Broadcast Datagram gửi Datagram đến mọi Adapter trong mạng. Các Remote Adapter không có lệnh receive Broadcast Datagram gắn vào sẽ không nhận được Datagram. Nếu một Adapter gọi lệnh Send Broadcast Datagram và có Receive Broadcast Datagram gắn vào thì sẽ nhận được Datagram của chính nó. Nếu một Adapter có vài lệnh Receive Broadcast Datagram gắn vào thì lệnh Send Broadcast Datagram sẽ thỏa mãn tất cả lệnh Receive Broadcast Datagram.
17. Lệnh Send
Datagram:
( 20h: wait; A0h: no_wait)

Lệnh Send Datagram gửi Datagram đến Network name đã đặc tả.
Những Adapter có tên được đặc tả nhưng không có lệnh Receive Datagram gắn vào, thì lệnh Send Datagram chỉ thoả mãn cho một lệnh Receive Datagram gắn vào.
18. Lệnh
Session status:
( 34h: wait; B4h: no_wait )

Lệnh Session Status sẽ thông báo trạng thái của một hay nhiều Session liên quan đến Local name. Kích thước tối thiểu hợp lệ của buffer là 4 bytes. Trạng thái kích thước không hợp lệ của buffer (01h) được trả về nếu NCB Length nhỏ hơn 4. Trạng thái message incomplete (06h) được trả về nếu NCB Length nhỏ hơn dữ liệu trạng thái gửi về.
Lệnh Remote Adapter Status thất bại nếu nó không thành công trước khi time_out của hệ thống hết hạn.
19. Lệnh
Unlink:
( 70h: wait )

Lệnh Unlink cung cấp tương thích với PC Network LANA NetBIOS dùng để tháo bỏ nối kết ra khỏi RPL Server.
Chỉ có giá trị 00h là hợp lệ trong NCB Lana Num.
V. Mã trả về và cách khắc phục:
00h: Thực hiện thành công. Trở về tốt.
Ý nghĩa: Lệnh thực hiện không có lỗi.
Yêu cầu hành động: Không.
01h: Kích thước buffer không hợp lệ.
Ý nghĩa: Lệnh Send Datagram hay lệnh Send broadcast Datagram không thể gởi hơn 512 bytes.
Yêu cầu hành động: Đặc tả lại hợp lý kích thước của buffer và cố gắn phát lệnh lần nữa.
03h: Lệnh không hợp lệ.
Ý nghĩa: mã lệnh sử dụng không hợp lệ.
Yêu cầu hành động: Phát lại lệnh hợp lệ.
05h: Lệnh time_out.
Yêu cầu hành động: Đối với lệnh Send, session đã bị kết thúc. Thiết lập session khác.
06h: Thông báo nhận chưa đầy đủ.
Ý nghĩa: Một phần thông báo đã được nhận, vì kích thước buffer không đủ lớn nên không nhận được đầy đủ thông báo.
Yêu cầu hành động: Phát lệnh Receive khác để nhận phần còn lại.
07h: Lệnh local no_ack thất bại.
08h: Local Session Number không hợp lệ.
Ý nghĩa: Đặc tả Session Number của Session không hành động.
Yêu cầu hành động: Phát lại lệnh với đặc tả Session hoạt động.
09h: Không đủ tài nguyên.
Ý nghĩa: Session không thể thiết lập với chương trình ứng dụng từ xa vì không còn chỗ trống trong session table.
Yêu cầu hành động: Phát lại lệnh vào một thời gian sau.
0Ah: Session đã đóng.
0Bh: Lệnh đã được hủy bỏ.
0Dh: Trùng tên trong local NetBIOS name table.
Ý nghĩa: Lệnh Add name đã đặc tả một tên đã có trong local Name table.
Yêu cầu hành động: Phát lại lệnh với đặc tả tên khác.
0Eh: NetBIOS Name Table đã đầy.
Yêu cầu hành động: Chờ cho đến khi có một tên bị xoá.
0Fh: Tên có trong session hoạt động, bây giờ bị xoá đăng ký.
Ý nghĩa: Tên được đặc tả trong lệnh delete có trong một Session, nhưng bây giờ bị đánh dấu không đăng ký. Tên đó không còn khả năng sử dụng trong bất kỳ Session mới nào khi vẫn còn Session đó và chiếm chỗ trong bảng.
Yêu cầu hành động: Đóng tất cả các Session sử dụng tên đó đến khi tên bị xoá.
11h: Session từ chối mở vì không có lệnh Listen.
Ý nghĩa: Không có lệnh Listen gắn vào giao diện NetBIOS từ xa.
Yêu cầu hành động: Chờ cho đến khi có lệnh Listen được phát ra trong giao diện NetBIOS từ xa.
12h: Từ chối mở Session vì không có Listen.
13h: Name Number không hợp lệ.
Ý nghĩa: Tên được đặc tả không còn hiện hữu hay không được đặc tả.
Yêu cầu hành động: Sử dụng chỉ số hợp lệ đã gán cho tên.
14h: Không tìm thấy tên được gọi hay không có trả lời.
Ý nghĩa: Không nhận được đáp ứng lệnh Call.
Yêu cầu hành động: Cố gắn gọi lại lệnh Call sau đó.
15h: Không tìm thấy tên.
Ý nghĩa: Tên được đặc tả không có trong NetBIOS name table.
Yêu cầu hành động: Cố gắn với một tên hợp lệ.
16h: Tên được sử dụng trên Remote Adapter.
Ý nghĩa: Tên được đặc tả đã được đăng ký tại một bảng khác.
Yêu cầu hành động: Đặc tả một tên khác hay dùng một tên đã bị xoá.
17h: Tên đã bị xoá
Ý nghĩa: Tên đã bị xoá và không được sử dụng.
Yêu cầu hành động: Thêm tên đó vào NetBIOS name table và phát lệnh.
18h: Kết thúc session không bình thường.
Ý nghĩa: Lệnh Send chấm dứt vì hết hạn time_out hay có vấn đề về phần cứng
Yêu cầu hành động: Phát lệnh Remote Adapter status xem trạng thái của các adapter khác và kiểm tra lại dây cáp, thiết lập lại Session đồng bộ mới.
19h: Tên liên kết bị đụng độ.
1Ah: Thiết bị remote không tương thích.
Ý nghĩa: Không mong đợi gói protocol vừa nhận được.
21h: Giao diện bận.
Yêu cầu hành động: Cố gắn lệnh sau đó.
22h: Quá nhiều lệnh được gán vào.
23h: Chỉ số trong field NCB Lana Num không hợp lệ.
24h: Lệnh đã hoàn thành trong khi Cancel xảy ra.
25h: Tên dành riêng được đặc tả đối với Add Group Name.
26h: Lệnh không hợp lệ đã hủy bỏ.
40h: Lỗi hệ thống.
Ý nghĩa: không có tài nguyên.
41h: Quá tải từ Remote adapter.
Ý nghĩa: Remote adapter đã quá tải.
Yêu cầu hành động: Huỷ bỏ adapter ra khỏi mạng và tắt máy trước khi muốn sử dụng mạng lần nữa.
50h_FEh: Hàm của adapter không tốt.
Yêu cầu hành động: Sử dụng adapter khác.
Fbh: Chương trình NetBIOS không được nạp vào PC.
Yêu cầu hành động: Nạp và bắt đầu chương trình IBM LAN Support và phát lại lệnh hay điều chỉnh khối control.
Fdh: Không mong đợi adapter đóng.
Ý nghĩa: Adapter bị đóng trong khi giao diện NetBIOS đang thực hiện lệnh.
Yêu cầu hành động: Phát lệnh Reset.
FFh: Trạng thái lệnh đang gắn vào.
Tải file nguồn của chương trình truyền dẫn thông báo
DDo^~ Nam Tha'i.
===============
Trung tam Tin hoc ABC
Trung tam Tin hoc Tot nhat Mien Bac
Cac co so tai Tp. Yen Bai - Viet Nam:
So 525 - Dien Bien
So 26 - Ly Thuong Kiet
So 377 - Dinh Tien Hoang
Giai dap Tin hoc tu A den Z
Mailto:tinabc@hn.vnn.vn
Website1:
http://www.bangden.com/soncuoc
Website2:
http://groups.yahoo.com/group/NhungNguoiYeuVietnam/
PcLeHoan
1996 - 2002
Mirror :
http://www.pclehoan.com
Mirror :
http://www.lehoanpc.net
Mirror :
http://www.ktlehoan.com