5. Nôi dung của ựề tài
3.1.2. Lập chương trình cho mạng truyền
Việc lập chương trình cho một liên kết nối tiếp trở nên phức tạp khi có hơn 3 node cùng nối vào ựường truyền. Mỗi node cần biết khi nào có thể truyền dữ liệu và khi nào dữ liệu truyền ựến là dành cho nó.
Một trong các vấn ựề cần quan tâm là làm sao mạng quản lý ựược ựường thông tin của nó. Có nhiều dạng mạng khác nhau và cũng có nhiều cách lập trình cho chúng, nhưng phần lớn ựề có chung các ựặc ựiểm sau :
- Mỗi node ựều có thể truyền và nhận.
ựường dây ở mức
Trường đại học Nông Nghiệp Hà Nội Ờ Luận văn thạc sĩ khoa học kỹ thuật ẦẦẦẦẦẦẦẦẦ.. 40
- Chỉ có một node ựược truyền tại một thời ựiểm
- Mỗi node cần nhận biết và trả lời ựối với message dành cho nó và bỏ qua (ignore) các message khác.
- Node truyền phát hiện khi nào message ựược gửi ựi không ựược nhận hay không hiểu bởi node nhận và phải có hành ựộng thắch hợp.
Ớ Các giao thức quản lý mạng
Có nhiều lựa chọn ựối với các giao thức hay các quy tắc ựể thực hiện các công việc trên. Một vài trong số ựó là Chủ/Tớ (Master/Slave), Chuyển thẻ bài (Token passing) và Phát hiện xung ựột (Collision detecting).
- Giao thức Chủ / Tớ (Master/Slave)
Master Hỏi Slave 1
Slave 1 Slave 2 Slave 3
Master Slave 1trả lời
Slave 1 Slave 2 Slave 3
Master Hỏi Slave 2
Slave 1 Slave 2 Slave 3
Master Slave 2 trả lời
Slave 1 Slave 2 Slave 3
Hình 3.5: Hoạt ựộng của giao thức Master/Slave
Master/Slave là giao thức ựơn giản nhất. Một node ựược thiết kế là Master và sẽ chịu trách nhiệm ựiều khiển toàn bộ ựường thông tin mạng. để bảo ựảm mọi node ựều có thể phát, Master sẽ dùng hình thức hỏi vòng, lần lượt gửi thông ựiệp ựến từng Slave, trong thông ựiệp có thể chỉ là một Acknowledge ựơn giản, một data theo yêu cầu, một thông báo lỗi hay bất cứ thông tin nào khác. Một Slave sẽ chỉ truyền message sau khi ựược Master yêu cầu. Bất cứ message nào muốn truyền từ Slave này ựến Slave khác ựều phải qua Master .
Trường đại học Nông Nghiệp Hà Nội Ờ Luận văn thạc sĩ khoa học kỹ thuật ẦẦẦẦẦẦẦẦẦ.. 41
Bất lợi chắnh của giao thức này là thời gian delay, mỗi node phải chờ ựược hỏi nếu muốn truyền và không thể truyền trước khi ựược hỏi. Tùy theo mục ựắch và tốc ựộ của mạng mà thời gian delay này dài hay ngắn, có thể không gây ra vấn ựề gì hoặc trở nên quá dài trong thực tế.
- Chuyển thẻ bài (Token passing)
Giao thức Token passing tránh ựược tình trạng chỉ có một Master và cho phép bất cứ node nào ựều có thể thực hiện việc ựiều khiển mạng. Node ựang ựiều khiển sẽ giữ một thẻ bài (token). Chỉ có một node tại một thời ựiểm ựược giữ thẻ. Node nào ựang giữ thẻ ựược quyền phát dữ liệu. Khi ựã phát hết dữ liệu hoặc không còn gì ựể phát, node sẽ gởi token sang node kế tiếp.
6) Chuyển token cho B 1) A giữ token
2) A -> C . Copied = no
4) A -> C . Copied = yes 3) A -> C . Copied = no
5) A -> C . Copied = yes
D A
B C
Hình 3.6: Hoạt ựộng của mạng Token ring
Giao thức mạng phải xác ựịnh làm thế nào một node biết mình có giữ thẻ hay không cũng như làm thế nào ựể ựưa thẻ cho node khác. Thẻ bài (token) có thể chỉ là một bit ựược dành riêng hoặc một biến trong mỗi node sẽ ựược set hoặc xoá ựể chỉ ra rằng node ựó có giữ thẻ hay không. Việc luân chuyển token tới các node trong mạng theo một trật tự ựịnh trước. Trật tự này có thể theo ựúng thứ tự vật lý của các trạm trong mạng, hay theo trật tự logic ựã ựược ựặt trước cho các mạng có topology là bus hay star.
Khi một node muốn chuyển thẻ cho một node khác, nó sẽ bỏ thẻ ựang giữ (bằng cách set bit token, chẳng hạn) và gửi một thông ựiệp báo node kia rằng ựến
Trường đại học Nông Nghiệp Hà Nội Ờ Luận văn thạc sĩ khoa học kỹ thuật ẦẦẦẦẦẦẦẦẦ.. 42
lượt nó giữ thẻ. Lúc ựó node này sẽ thực hiện bất cứ thao tác gì nó muốn và lại chuyển thẻ bài cho node kế tiếp.
Giao thức này cho phép bất cứ node nào ựều có thể giao tiếp trực tiếp với các node khác. Nhưng nó vẫn chưa thể cho phép một node có thể thực hiện ngắt khi có thông ựiệp khẩn cấp, trừ phi node này ựang giữ thẻ bài khi ermergency xảy ra.
- Collision Detecting
Giao thức Collision Detecting, thường ựược biết như là phương pháp truy nhập ựa cảm biến sóng mang (CSMA/CD-Carrier Sense Multiple Access/Collision Detection, CSMA/CA - Collision Avoidance), cho phép bất cứ node nào ựều có thể truyền khi ựường truyền ựang trống. Nếu có hơn 2 node cố gắng truyền tại một thời ựiểm, ngoại trừ một node, các node khác còn lại phải phát hiện có xung ựột, dừng truyền dữ liệu và sẽ thử lại sau một thời gian delay.
đợi 20 ms đợi 12 ms
Workstation Workstation Workstation Server
Collision
Packet A Packet B
Hình 3.7: Hoạt ựộng của giao thức Data Collision
Trước khi trạm A muốn truyền một gói dữ liệu, nó lắng nghe xem trên ựường dây có rảnh hay không bằng cách xét xem có sóng dao ựộng trên cáp hay không. Nếu cáp rảnh (tức không có sóng dao ựộng) trạm A sẽ phát một gói dữ liệu. Nếu tại thời ựiểm ựó, tình cờ trạm B cũng phát thông tin thì xung ựột sẽ xảy ra. Trong trường hợp ựó A sẽ phát tiếp tắn hiệu jamming rất ngắn nhằm thông báo cho toàn mạng biết là có tranh chấp ựường truyền. Sau ựó A và B sẽ chờ một khoảng thời gian có thể là ngẫu nhiên hoặc ựược ấn ựịnh trước rồi phát lại thông tin của mình.
Trường đại học Nông Nghiệp Hà Nội Ờ Luận văn thạc sĩ khoa học kỹ thuật ẦẦẦẦẦẦẦẦẦ.. 43
Tuy nhiên, việc viết chương trình ựể phát hiện xung ựột không phải lúc nào cũng dễ dàng. Bên cạnh ựó phần cứng của mạng phải có khả năng chịu ựược tình trạng nhiều driver ựược cho phép cùng một lúc.
Một cách ựể phát hiện xung ựột là cho node gửi ựọc về những gì mà nó ựã gửi. Nếu dữ liệu ựọc về giống như dữ liệu gửi ựi, có nghĩa là không có có xung ựột và việc truyền có thể tiếp tục. Nếu khác nhau, có nghĩa là sự xung ựột ựang xảy ra hay một node nào ựó ựang truyền. Lúc ựó node này sẽ chuyển sang chế ựộ delay và sẽ thử truyền lại sau ựó.
Khả năng giao thức hoạt ựộng tốt như thế nào tùy thuộc vào việc thiết lập thời gian delay cần thực hiện khi có xung ựột. Các node khác nhau sẽ dùng thời gian delay khác nhau, có thể dùng giá trị ngẫu nhiên hay cố ựịnh. Nếu không, các node sẽ thử lại cùng lúc và cuối cùng chẳng có node nào truyền ựược .
Node nhận cũng phải nhận biết và ignore những lần truyền thất bại. Các lần thử này nói chung nên dài ựủ ựể node nhận biết có xung ựột xảy ra hay không.
Một số lý do làm cho RS485 không phù hợp với giao thức phát hiện xung ựột. Các driver RS485 ựược sử dụng trong liên kết sao cho chỉ có một driver ựược phép tại một thời ựiểm. Nếu có nhiều hơn 2 driver ựược enable, các chip có mạch bảo vệ bên trong sẽ giới hạn dòng ra và thậm chắ disable cả ngõ ra. Bên cạnh ựó, RS485 dùng chuẩn truyền thông bất ựồng bộ, phần mềm thường không có cách nào kiểm tra từng bắt nhận ựược, vì vậy việc phát hiện xung ựột theo từng bit là không thể .
Ớ định ựịa chỉ (Addressing)
Việc lập trình mạng cũng yêu cầu phải quản lý ựịa chỉ. Mỗi node ựược gán một ựịa chỉ riêng. Mỗi thông ựiệp phải có kèm theo ựịa chỉ của node nhận sao cho các node có thể nhận biết ựược khi nào thông ựiệp là dành cho mình.
- Gán ựịa chỉ(Assigning)
Cách rõ ràng nhất ựể ựịnh ựịa chỉ là gán mỗi node một ựịa chỉ số (numberic address). địa chỉ có thể là một byte hoặc một phần nào ựó của byte. Các byte này có thể là các ký tự ASCII ( 41H cho node A, 42H cho node B) hoặc có thể là bất cứ giá trị nào (từ 0 cho ựến FFH).
Trường đại học Nông Nghiệp Hà Nội Ờ Luận văn thạc sĩ khoa học kỹ thuật ẦẦẦẦẦẦẦẦẦ.. 44
Nếu số node không quá 128 node, ta có thể không cần dùng tới một byte ựể phân biệt từng node. Sẽ có một số bit dành cho ựịa chỉ, phần còn lại có thể dành cho các ứng dụng khác. Vắ dụ, trong một mạng có 32 node, bit 0 ựến bit 4 có thể dành cho việc ựịnh ựịa chỉ, bit 5 ựến bit 7 sẽ mã hóa lệnh hay mang các thông tin khác.
- Phát hiện ựịa chỉ (Detecting)
Một khó khăn khi gửi ựi một ựịa chỉ là làm sao cho các node có thể phân biệt ựâu là byte chứa ựịa chỉ ựâu là byte chứa các thông tin khác hoặc khi nào bắt ựầu một message mới. Có một số giải pháp sau.
+ Các ựịa chỉ sẽ là các giá trị không bao giờ xuất hiện trong dữ liệu .
+ Mạng có thể dùng một dạng format xác ựịnh cho message ựược gửi ựể tất cả các node biết ựược khi nào message kết thúc.
+ Việc truyền thông có thể dùng bit thứ 9 ựể chỉ khi nào một byte chứa dữ liệu hay ựịa chỉ.