Giao thức UDP(User Datagram Protocol)

Một phần của tài liệu XÂY DỰNG hệ THÔNG QUẢN lý cấu HÌNH máy TÍNH TRONG MẠNG LAN (Trang 27)

UDP (User Datagram Protocol) là giao thức theo phương thức không liên kết được sử dụng thay thế cho TCP ở trên IP theo yêu cầu của từng ứng dụng. Khác với TCP, UDP không có các chức năng thiết lập và kết thúc liên kết. Tương tự như IP, nó cũng không cung cấp cơ chế báo nhận (acknowledgment), không sắp xếp tuần tự các gói tin (datagram) đến và có thể dẫn đến tình trạng mất hoặc trùng dữ liệu mà không có cơ chế thông báo lỗi cho người gửi. Qua đó ta thấy UDP cung cấp các dịch vụ vận chuyển không tin cậy như trong TCP.

Khuôn dạng UDP datagram được mô tả với các vùng tham số đơn giản hơn nhiều so với TCP segment.

Hình 1.21 Dạng thức của gói tin UDP

UDP cũng cung cấp cơ chế gán và quản lý các số hiệu cổng (port number) để định danh duy nhất cho các ứng dụng chạy trên một trạm của mạng. Do ít chức năng phức tạp nên UDP thường có xu thế hoạt động nhanh hơn so với TCP. Nó thường được dùng cho các ứng không đòi hỏi độ tin cậy cao trong giao vận.

1.9 Các giao thức truy cập đƣờng truyền trên mạng LAN

Để truyền được dữ liệu trên mạng người ta phải có các thủ tục nhằm hướng dẫn các máy tính của mạng làm thế nào và lúc nào có thể thâm nhập vào đường dây cáp để gửi các gói dữ kiện. Ví dụ như đối với các dạng bus và ring thì chỉ có một đường truyền duy nhất nối các trạm với nhau, cho nên cần phải có các quy tắc chung cho tất cả các trạm nối vào mạng để đảm bảo rằng đường truyền được truy nhập và sử dụng một cách hợp lý.

Có nhiều giao thức khác nhau để truy nhập đường truyền vật lý nhưng phân thành hai loại: các giao thức truy nhập ngẫu nhiên và các giao thức truy nhập có điều khiển.

1.9.1 Giao thức chuyển mạch (yêu cầu và chấp nhận)

Giao thức chuyển mạch là loại giao thức hoạt động theo cách thức sau: một máy tính của mạng khi cần có thể phát tín hiệu thâm nhập vào mạng, nếu vào lúc này đường cáp không bận thì mạch điều khiển sẽ cho trạm này thâm nhập vào đường cáp còn nếu đường cáp đang bận, nghĩa là đang có giao lưu giữa các trạm khác, thì việc thâm nhập sẽ bị từ chối.

1.9.2 Giao thức đƣờng dây đa truy cập với cảm nhận va chạm

(Carrier Sense Multiple Access with Collision Detection hay CSMA/CD ) Giao thức đường dây đa truy cập cho phép nhiều trạm thâm nhập cùng một lúc vào mạng, giao thức này thường dùng trong sơ đồ mạng dạng đường thẳng. Mọi trạm đều có thể được truy nhập vào đường dây chung một cách ngẫu nhiên và do vậy có thể dẫn đến xung đột (hai hoặc nhiều trạm đồng thời cùng truyền dữ liệu). Các trạm phải kiểm tra đường truyền gói dữ liệu đi qua có phải của nó hay không. Khi một trạm muốn truyền dữ liệu nó phải kiểm tra đường truyền xem có rảnh hay không để gửi gói dữ liệu của, nếu đường truyền đang bận trạm phải chờ đợi chỉ được truyền khi thấy đường truyền rảnh. Nếu cùng một lúc có hai trạm cùng sử dụng đường truyền thì giao thức phải phát hiện điều này và các trạm phải ngưng thâm nhập, chờ đợi lần sau các thời gian ngẫu nhiên khác nhau.

Khi đường cáp đang bận trạm phải chờ đợi theo một trong ba phương thức sau:

Trạm tạm chờ đợi một thời gian ngẫu nhiên nào đó rồi lại bắt đầu kiểm tra đường truyền.

Trạm tiếp tục kiểm tra đường truyền đến khi đường truyền rảnh thì truyền dữ liệu đi.

Trạm tiếp tục kiểm tra đường truyềnđến khi đường truyền rảnh thì truyền dữ liệu đi với xác suất p xác định trước (0 < p < 1).

Tại đây phương thức 1 có hiệu quả trong việc tránh xung đột vì hai trạm cần truyền khi thấy đường truyền bận sẽ cùng rút lui và chờ đợi trong các thời gian ngẫu nhiên khác nhau. Ngược lại phương thức 2 cố gắng giảm thời gian trống của đường truyền bằng các cho phép trạm có thể truyền ngay sau khi một cuộc truyền kết thúc song nếu lúc đó có thêm một trạm khác đang đợi thì khả năng xẩy ra xung đột là rất cao. Phương thức 3 với giá trị p phải lựa chọn hợp lý có thể tối thiểu hóa được khả năng xung đột lẫn thời gian trống của đường truyền.

Khi lưu lượng các gói dữ liệu cần di chuyển trên mạng quá cao, thì việc đụng độ có thể xẩy ra với sồ lượng lớn có gây tắc nghẽn đường truyền dẫn đến làm chậm tốc độ truyền tin của hệ thốnso s¸nh

1.9.3 Giao thức dùng thẻ bài vòng (Token ring)

Đây là giao thức truy nhập có điều khiển chủ yếu dùng kỹ thuật chuyển thẻ bài (token) để cấp phát quyền truy nhập đường truyền tức là quyền được truyền dữ liệu đi. Thẻ bài ở đay là một đơn vị dữ liệu đặc biệt, có kích thưóc và nội dung (gồm các thông tin điều khiển) được quy định riêng cho mỗi giao thức. Theo giao thức dùng thẻ bài vòng trong đường cáp liên tục có một thẻ bài chạy quanh trong mạng Thẻ bài là một đơn vị dữ liệu đặc biệt trong đó có một bit biểu diễn trạng thái sử dụng của nó (bận hoặc rỗi). Một trạm muốn truyền dữ liệu thì phải đợi đến khi nhận được một thẻ bài rảnh. Khi đó trạm sẽ đổi bit trạng thái của thẻ bài thành bận, nép gói dữ liệu có kèm theo địa chỉ nơi nhận vào thẻ bài và truyền đi theo chiều của vòng.

Vì thẻ bài chạy vòng quang trong mạng kín và chỉ có một thẻ nên việc đụng độ dữ liệu không thể xẩy ra, do vậy hiệu suất truyền dữ liệu của mạng không thay đổi.

Trong các giao thức này cần giải quyết hai vấn đề có thể dẫn đến phá vỡ hệ thống. Một là việc mất thẻ bài làm cho trên vòng không còn thẻ bài lưu chuyển nữa. Hai là một thẻ bài bận lưu chuyển không dừng trên vòng.

1.9.4 Giao thức dùng thẻ bài cho dạng đƣờng thẳng (Token bus)

Đây là giao thức truy nhập có điều khiển trong để cấp phát quyền truy nhập

đường truyền cho các trạm đang có nhu cầu truyền dữ liệu, một thẻ bài được lưu chuyển trên một vòng logic thiết lập bởi các trạm đó. Khi một trạm có thẻ bài thì nó có quyền sử dụng đường truyền trong một thời gian xác định trước. Khi đã hết dữ liệu hoặc hết thời đoạn cho phép, trạm chuyển thẻ bài đến trạm tiếp theo trong vòng logic.

Như vậy trong mạng phải thiết lập được vòng logic (hay còn gọi là vòng ảo) bao gồm các trạm đang hoạt động nối trong mạng được xác định vị trí theo một chuỗi thứ tự mà trạm cuối cùng của chuỗi sẽ tiếp liền sau bởi trạm đầu tiên. Mỗi trạm được biết địa chỉ của các trạm kề trước và sau nó trong đó thứ tự của các trạm trên vòng logic có thể độc lập với thứ tự vật lý. Cùng với việc thiết lập vòng thì giao thức phải luôn luôn theo dõi sự thay đổi theo trạng thái thực tế của mạng.

CHƢƠNG 2: PHƢƠNG PHÁP LẬP TRÌNH SOCKET

2.1 Socket

Socket là một giao diện lập trình ứng dụng(API –Application Programming Interface).Nó được giới thiệu lần đầu tiên trong ấn bản UNIX-BSD 4.2 dưới dạng các hàm hệ thống theo cú pháp ngôn ngữ C (socket(), bind(), connect(), send(), receive(), read(), write(), close(),…). Ngày nay, Socket được hỗ trợ trong hầu hết các hệ điều hành như MS Windows(Winsock), Linux và được sử dụng trong nhiều ngôn ngữ lập trình khác nhau: như C, C++, Java, Visual Basic, Visual C++,…Sau đây chúng ta sẽ đưa ra định nghĩa cụ thể về socket.

2.1.1 Định nghĩa

- Có nhiều định nghĩa khác nhau về socket tùy theo cách nhìn của người sử dụng. - Một cách tổng quát nhất có thể định nghĩa : Một socket là một điểm cuối trong một kết nối giữa hai chương trình đang chạy trên mạng.

- Nhìn trên quan điểm của người phát triển ứng dụng người ta có thể định nghĩa Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình yêu cầu dịch vụ (được gán nhãn là Client) và một chương trình cung cấp dịch vụ (được gán nhãn là Server) trên mạng hoặc trên cùng một máy tính.

- Đối với người lập trình, họ nhìn nhận Socket như một giao diện nằm giữa tầng ứng dụng và tầng khác trong mô hình mạng OSI có nhiệm vụ thực hiện việc giao tiếp giữa chương trình ứng dụng với các tầng bên dưới mạng.

2.1.2 Phân loại

Có 3 loại Socket :

Socket hướng kết nối (TCP Socket)

Socket không hướng kết nối (UDP Socket) Raw Socket

2.1.3 Chức năng

Socket cho phép thiết lập các kênh giao tiếp mà hai đầu kênh được xác định bởi hai cổng (port). Thông qua các cổng này một tiến trình có thể nhận và gửi dữ liệu với các tiến trình khác.

Hình 2.2 Mô hình Socket

Số hiệu cổng của Socket

- Để có thể thực hiện các cuộc giao tiếp, một trong hai quá trình phải công bố số hiệu cổng của socket mà mình sử dụng.

- Mỗi cổng giao tiếp thể hiện một địa chỉ xác định trong hệ thống. Khi quá trình được gán một số hiệu cổng, nó có thể nhận dữ liệu gởi đến cổng này từ các quá trình khác.

- Quá trình còn lại cũng yêu cầu tạo ra một socket.

Địa chỉ IP

Ngoài số hiệu cổng, hai bên giao tiếp còn phải biết địa chỉ IP của nhau. Địa chỉ IP giúp phân biệt máy tính này với máy tính kia trên mạng TCP/IP. Trong khi số hiệu cổng dùng để phân biệt các quá trình khác nhau trên cùng một máy tính.

Trong hình 2.2 địa chỉ của quá trình B1 được xác định bằng hai thông tin (Host B, Port B):

Địa chỉ máy tính có thể là địa chỉ IP dạng 203.162.88.162 hay là địa chỉ cho dạng trên miền như www.hpu.edu.vn

Số hiệu cổng gán cho Socket phải duy nhất trên phạm vi máy tính đó, có giá trị trong khoảng từ 0 đến 65535 (16 bit). Trong thực tế thì các số hiệu cổng từ 0 đến 1023 (gồm có cổng 1024) đã dành cho các dịch vụ nổi tiếng như http:80, telnet:21, ftp:23,… Nếu chúng ta không phải là người quản trị thì nên dùng từ cổng 1024 trở lên.

2.1.4 Nguyên lý hoạt động

Chúng ta có thể khái quát quá trình trao đổi dữ liệu thông qua các socket như sau: - Chương trình phía Server tạo ra một socket, socket này được chương trình gắn với một cổng trên Server. Sau khi được tạo ra socket này( ta gọi socket phía server) sẽ chờ nghe yêu cầu từ phía client.

- Khi chương trình phía client cần kết nối với một server, nó cũng tạo ra một socket, socket này cũng được hệ điều hành gắn với một cổng. Chương trình client sẽ cung cấp cho socket của nó( ta gọi là socket phía client) địa chỉ mạng và cổng của socket phía server và yêu cầu thực hiện kết nối (nếu chương trình định sử dụng giao thức hướng kết nối) hoặc truyền dữ liệu(nếu chương trình sử dụng giao thức không hướng kết nối)

- Chương trình phía server và chương trình phía client trao đổi dữ liệu với nhau bằng cách đọc từ socket hoặc ghi vào socket của mình.Các socket ở hai phía nhận dữ liệu từ ứng dụng và đóng gói để gửi đi hoặc nhận các dữ liệu được gửi đến và chuyển cho chương trình ứng dụng bởi socket ở cả 2 phía đều được biết địa chỉ mạng và địa chỉ cổng của nhau.

Ở bước thứ 2 chúng ta thấy chương trình ứng dụng phải lựa chọn giao thức mà nó định sử dụng để trao đổi dữ liệu. Tùy theo việc chúng ta sử dụng giao thức nào (TCP hay UDP) mà cách thức xử lý yêu cầu trước yêu cầu của client có thể khác.

Sau đây chúng ta sẽ xem xét chi tiết cách thức trao đổi dữ liệu của socket với từng loại giao thức.

Socket hỗ trợ TCP

Ở phía Server : Khi một ứng dụng trên server hoạt động nó sẽ tạo ra một socket và đăng ký với server một cổng ứng dụng và chờ đợi yêu cầu kết nối từ phía client qua cổng này.

Ở phía Client: Nó biết địa chỉ của máy trên đó Server đang chạy vào cổng

và Server đang chờ nghe yêu cầu. Do đó khi muốn kết nối đến Server, nó cũng tạo một socket chứa địa chỉ máy Client và cổng của ứng dụng trên máy Client đồng thời Client sẽ cung cấp cho socket của nó địa chỉ và cổng của Server mà nó cần kết nối và yêu cầu socket thực hiện kết nối.

Khi Server nhận được yêu cầu kết nối từ Client, nếu nó chấp nhận thì Server sẽ sinh ra một socket mới được gắn với một cổng khác với cổng mà nó đang nghe yêu cầu.Sở dĩ Server làm như vậy bởi nó cần cổng cũ để tiếp tục nghe yêu cầu từ

phía Client trong khi vẫn cần một kết nối với Client. Sau đó chương trình ứng dụng phía Server sẽ gửi thông báo chấp nhận kết nối

cho Client cùng thông tin về địa chỉ cổng mới của socket mà nó dành cho Client.

Quay lại phía Client, nếu kết nối được chấp nhận nghĩa là socket của nó đã tạo ra thành công và nó có thể sử dụng socket để giao tiếp với Server bằng cách viết và ghi tới socket theo cách giao tiếp với một tài nguyên trên máy tính thông thường.

Socket hỗ trợ UDP

Ở phía Server: Khi một ứng dụng trên Server hoạt động nó sẽ tạo ra một

socket và đăng ký với Server một cổng ứng dụng và chờ đợi yêu cầu kết nối từ phía Client qua cổng này.

Ở phía Client: Nó biết địa chỉ của máy trên đó Server đang chạy vào cổng

và Server đang chờ nghe yêu cầu. Do đó khi muốn giao tiếp với Server, nó cũng tạo ra một socket chứa địa chỉ máy Client và cổng của ứng dụng trên máy Client đồng thời Client sẽ cung cấp cho socket của nó địa chỉ và cổng của Server mà nó cần kết nối. Khi Client muốn gửi tin đến Server nó sẽ chuyển dữ liệu cho socket của mình, socket này sẽ chuyển thẳng gói tin mà Client muốn gửi tới Server dưới dạng một datagram có chứa địa chỉ máy Server và cổng mà Server đang chờ nghe yêu cầu. Như vậy không hề có một kết nối nào được thực hiện giữa Client và Server, Server cũng không cần tạo ra một socket khác để kết nối với Client thay vào đó Server dùng ngay cổng ban đầu để trao đổi dữ liệu.

2.1.5 Cơ chế vận hành của mô hình Client-Server

Socket là phương tiện hiệu quả để xây dựng các ứng dụng theo kiến trúc Client-Server. Các ứng dụng trên mạng Internet như Web, mail, FTP là các ví dụ điển hình.

Phần này trình bày các bước cơ bản trong việc xây dựng các ứng dụng Client- Server sử dụng Socket làm phương tiện giao tiếp theo chế độ hướng kết nối.

Mô hình Client-Server sử dụng Socket ở chế độ có kết nối (TCP)

Giai đoạn 1: Server tạo Socket, gán số hiệu cổng và lắng nghe yêu cầu kết nối.

tầng vận chuyển.

- Bind(): Server yêu cầu gán số hiệu port cho socket.

- Listen(): Server lắng nghe các yêu cầu kết nối từ các client trên cổng đã được gán.

Server sẵn sàng phục vụ Client.

Giai đoạn 2: Client tạo Socket, yêu cầu thiết lập một nối kết với Server.

- Socket(): Client yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển, thông thường hệ thống tự động gán một số hiệu cổng còn trống cho socket của Client

- Connect(): Client gửi yêu cầu nối kết đến Server có địa chỉ IP và Port xác định.

- Accept(): Server chấp nhận nối kết của client, khi đó một kênh giao tiếp ảo được hình thành, Client và Server có thể trao đổi thông tin với nhau.

Sau khi chấp nhận yêu cầu nối kết, thông thường server thực hiện lệnh read() để đợi cho đến khi có thông điệp yêu cầu (Request Message) từ client gửi đến.

Server phân tích và thực thi yêu cầu.Kết quả sẽ được gửi về client bằng write().

Sau khi gửi yêu cầu bằng lệnh write(), client chờ nhận thông điệp kết quả (ReplyMessage) từ Server bằng lệnh read().

Trong giai đoạn này, việc trao đổi thông tin giữa Client và Server phải tuân thủ giao thức của ứng dụng (dạng thức và ý nghĩa của các thông điệp, quy tắc bắt

Một phần của tài liệu XÂY DỰNG hệ THÔNG QUẢN lý cấu HÌNH máy TÍNH TRONG MẠNG LAN (Trang 27)