Xây dựng chương trình truyền tệp

Một phần của tài liệu Kiến trúc mạng căn bản potx (Trang 72 - 81)

III.1. Thiết kế và cài đặt chương trình

III.1.1. Giao thức ứng dụng được xây dựng và sử dụng trong chương trình

Bản thân giao thức TCP là một giao thức hướng kết nối và đáng tin cậy, giao thức này đảm bảo dữ liệu truyền vào socket đầy đủ, nhưng để tăng cường tính tin cậy của chương trình ứng dụng và để kiểm soát việc truyền dữ liệu nhất là trên các mạng có độ trễ lớn hay những mạng thường xuyên xảy ra hiện tượng quá tải, một giao thức ứng dụng riêng được xây dựng cho chương trình.

Gói tin của giao thức ứng dụng được mô tả như sau:

0 1 2 Dữ liệu tối đa 4094 byte

Size Data

Size dài 2 byte chứa độ dài của phần dữ liệu của gói tin.

Data chứa dữ liệu, trường này có độ dài tối đa là 4094 byte vì giao thức sử dụng gói tin dài tối đa 4096 byte.

Việc sử dụng các kết nối:

Chương trình sử dụng hai kết nối, một để truyền lệnh và một để truyền dữ liệu giữa client và server.

 Kênh truyền điều khiển dùng để truyền các lệnh và các thông báo có tính chất điều khiển, điều này làm giảm tính phức tạp trong việc phân tích và xử lý các lệnh của chương trình.

 Kênh truyền dữ liệu được thiết lập ngay trong quá trình tạo kết nối giữa tiến trình client và tiến trình server và được dùng đến mỗi khi có dữ liệu cần truyền nhận giữa client và server. Các khối dữ liệu có thể được chia nhỏ thành các gói tin và truyền trên kênh dữ liệu, kết thúc một khối dữ liệu là một gói tin có độ dài bằng 0.

Việc sử dụng hai kênh truyền

Có 3 loại lệnh trong chương trình sử dụng các kênh truyền như sau:

 Client gửi lệnh đến server và nhận về một thông báo trên kênh điều khiển ví dụ thông báo lỗi hoặc hoàn thành lệnh.

 Client gửi lệnh đến server và nhận về một thông báo có dữ liệu truyền “Openning data port”. Khi đó, client bắt đầu nhận dữ liệu trên kênh dữ liệu cho tới khi nhận được một gói tin có độ dài là 0.

Server Client Gửi lệnh Nhận lệnh và thi hành Nhận thông báo

Gửi thông báo hoàn thành lệnh hoặc báo lỗi

Server Client Gửi lệnh Nhận lệnh và thi hành Nhận thông báo Nhận dữ liệu ở kênh dữ liệu tới khi gói tin có độ

dài là 0

Gửi thông báo có dữ liệu cần truyền Gửi lần lượt các gói tin kết thúc bởi một gói có

 Client gửi lệnh yêu cầu truyền tệp lên server, server gửi lại thông báo chấp nhận. Client ghi dữ liệu cần truyền vào kênh dữ liệu, sau khi ghi xong, client chờ đợi một thông báo của server trên kênh điều khiển truyền lại số lượng byte đã nhận và thông báo trên màn hình của người sử dụng. Quá trình truyền nhận thông tin trên kênh dữ liệu cũng có thể được điều khiển trực tiếp trên kênh điều khiển ví dụ dừng truyền.

III.1.2. Cài đặt chương trình

Chương trình truyền tệp được xây dựng dựa trên mô hình client-server sử dụng thư viện socket, giao thức lớp dưới là giao thức hướng kết nối TCP. Tiến trình server hoạt động theo kiểu đồng thời (concurrent), server “nghe” ở cổng 1998, khi có một tiến trình client kết nối đến, server nhận số hiệu cổng của client, sinh tiến trình con để phục vụ còn bản thân tiến trình cha tiếp tục quay lại nghe. Tiến trình server phục vụ tạo một kết nối lệnh để truyền lệnh và một kết nối dữ liệu để truyền các khối dữ liệu giữa client và server.

Server Client

Gửi yêu cầu

truyền dữ liệu Nhận lệnh

Nhận và thông báo với người sử dụng số byte

truyền

Nhận dữ liệu ở kênh dữ liệu tới khi gói tin có độ

dài là 0

Gửi thông báo chấp nhận

Thông báo số byte đã nhận

Gửi lần lượt các gói tin kết thúc bởi một gói có

Phần server chạy trên các máy chủ Unix, Windows NT phục vụ cho phần client chạy trên các máy Dos, Windows và Unix. Chương trình hoạt động gần giống FTP nhưng có một số tính năng nâng cao:

 Thực hiện lệnh từ xa với EXEC: Chương trình server nhận lệnh gửi tới từ client, thực hiện lệnh đó và gửi trả kết quả vào kênh truyền, chương trình client đọc và hiển thị kết quả đó trên màn hình của người sử dụng.

 Thực hiện lệnh của hệ điêu hành trên máy trạm !CMD: Một số lệnh của hệ điều hành có thể được thực hiện trên máy trạm, chúng được tiến trình client giải quyết bằng cách gọi chương trình thông dịch của hệ điều hành.

 Khả năng thay đổi kích thước bộ đệm với BUFSIZ kích thước của bộ đệm có thể được thay đổi bằng cách thay đổi biến môi trường chứa kích thước bộ đệm. Việc này làm tăng năng suất của việc truyền thông tin trên mạng.  Một số thao tác với thư mục trên máy chủ như tạo thư mục, xoá thư mục

được thực hiện bằng cách gọi các lệnh của hệ điều hành Unix hoặc những hàm mức thấp trong thư viện của C.

 Chương trình còn cung cấp một số lệnh làm việc trực tiếp với tệp như

OPEN, LSEEK, READ, WRITE... những lệnh này sử dụng thư những lời gọi mức thấp của hệ thống.

Sau đây là những lệnh đã cài đặt trên server

Lệnh Mô tả

EXEC command [option] Chạy một lệnh Unix

USER username [PASS password] Đăng nhập hệ thống

PASSWD password Nhập password

CHPWD newpassword Đổi password

PORT portnumber Đăng ký một cổng truyền dữ liệu

ABORT Loại bỏ quá trình truyền

LIST [option] [directory] Lệnh xem thư mục

CHDIR [directory] Lệnh đổi thư mục

MKDIR directory [mode] Tạo thư mục mới

RMDIR directory Xoá thư mục

UNLINK filename Xoá tệp

OPEN path openflag [mode] Mở tệp

LSEEK fildes offset whence Chuyển con trỏ tệp

READ fildes nbytes Đọc từ tệp

WRITE fildes nbytes Ghi tệp

LOCKF fildes mode size Khoá tệp

CLOSE filedes Đóng tệp

TMPNAM [path[prefix]] Tạo một tệp tạm thời

PUT filename Truyền tệp lên máy chủ

APPEND filename Mở tệp để append

GET filename Lấy tệp từ máy chủ

HELP Trợ giúp

UNIX Hoạt động ở mode Unix

TNET Hoạt động ở mode Tnet

QUIT Thoát

UMASK [mode] Đặt mặt nạ mode cho file truyền

FMODE filename Xem mode của file

FSIZE filename Xem độ dài của file

BUFSIZ size_of_buffer Đặt lại kích thước cho bộ đệm

REXEC host user passwd command Chạy một lệnh từ xa

Phần client giao tiếp với người sử dụng, nhận lệnh, phân tích lệnh, xử lý hoặc gửi cho server, nhận và trả kết quả lại cho người sử dụng.

III.2. Một số vấn đề nảy sinh trong quá trình thực hiện và cách giải quyết

III.2.1. Vấn đề chuyển đổi tệp giữa hai hệ điều hành.

Do khái niệm về tệp và sự quản lý truy nhập ở hai hệ điều hành DOS và UNIX có nhiều điểm khác nhau nên sự chuyển đổi tệp giữa hai hệ điều hành gặp phải một số vấn đề.

Các tệp tin trên DOS hoàn toàn không có các thông tin về quyền sở hữu hay quyền truy nhập nên thông tin này sẽ bị mất khi sao chép một tệp từ máy UNIX sang một máy DOS.

Ngoài ra một vấn đề hết sức quan trọng và cũng khó có cách giải quyết tối ưu là vấn đề tên tệp. Tên tệp trên UNIX có thể dài tới 14 ký tự (đối với UNIX System V) hoặc hơn nữa, các ký tự có thể là chữ in hoa, chữ thường hay các ký tự đặc biệt đều được chấp nhận. Các thư mục trong đường dẫn của UNIX được phân cách bởi dấu '/'. Trong khi đó tên tệp của DOS chỉ được phép dài tối đa 8 ký tự cộng với 3 ký tự của phần mở rộng và bị hạn chế toàn bộ là chữ in hoa không sử dụng chữ thường cùng với hàng loạt dấu và ký tự đặc biệt. Các thư mục trong đường dẫn được phân cách bởi dấu '\'. Cho nên một ánh xạ 1-1 giữa hai loại tên tệp là không thể tồn tại. Nếu có một hàm nào đó thực hiện được ánh xạ này thì sau khi chuyển một tệp từ máy UNIX tới máy DOS, tên tệp đích sẽ hoàn toàn xa lạ với tên tệp nguồn gây ra khó khăn cho người sử dụng.

Ví dụ, ta muốn có một tiện ích thực hiện việc backup một số tệp trên máy UNIX sang máy DOS. Ta sẽ đơn giản chuyển các tệp đó sang máy DOS nhưng khi cần chuyển các tệp này về vị trí cũ thì ta không thể xác định chính xác vị trí cũ của tệp và không thể phục hồi lại đầy đủ tên của tệp. Nếu dùng một hàm nào đó để tạo ra ánh xạ 1-1 thì khi sao chép sang máy DOS sẽ tạo ra những tên tệp đặc biệt rất khó cho việc quản lý.

 Với bài toán này UNIX có tiện ích tar giải quyết bằng cách gom tất cả các tệp vào thành một tệp kèm theo thông tin chi tiết về tệp đó, khi cần, có thể phục hồi lại tệp một cách chính xác. Nhưng tiện ích này không thể áp dụng cho mọi bài toán ví dụ cần đọc và xử lý tệp dưới môi trường DOS...

 Có một giải pháp tạm thời cho vấn đề này là phải cắt bỏ phần đằng sau của tên tệp trên UNIX. Đây cũng chính là giải pháp đối với tên tệp dài của Windows 95 khi các tệp này được truy nhập bởi DOS 6.x (hoặc các phiên bản DOS trước). Với cách làm này chúng ta phải chú ý tới sự trùng tên sau khi cắt bỏ phần đuôi và xử lý một số ký tự đặc biệt còn lại.

Ví dụ : Hai tệp

testdata001.dat và testdata002.dat

Có thể sẽ bị cắt thành testdata.dat và hai tệp sẽ bị trùng tên nhau, một trong hai tệp sẽ không thể tồn tại.

 Một giải pháp tương tự như trong Windows 95 sẽ được sử dụng đó là chuyển hai tệp trên thành

testda~1.dat và testda~2.dat

 Giải pháp đặt tên cho các tệp trên máy UNIX tương tự như trên máy DOS là một giải pháp tồi. Nó không tận dụng tối đa khả năng của hệ điều hành là tên tệp linh động hơn. Nhưng ta nhận thấy rằng phương pháp này đôi khi cũng tỏ ra có hiệu quả đối với các ứng dụng đặc biệt. Ví dụ : phần mở rộng 3 ký tự của tên tệp được dùng để xác định nội dung tệp được dùng khá rộng rãi trên cả các hệ điều hành có tên tệp dài như UNIX, Windows 95...

 Một giải pháp khác là việc thay thế hệ điều hành DOS bằng hệ điều hành Windows 95. Trong Windows 95 tên tệp có thể dài hơn (tới 255 ký tự) và có thể chứa một số ký tự mà DOS không cho phép như dấu trống, dấu chấm... Việc chuyển đổi tên tệp sẽ đơn giản chỉ là xử lý một số trường hợp các ký tự đặc biệt. Với sự phát triển hiện nay hệ điều hành DOS đang dần bị thay thế bởi Windows 95 (không chỉ bởi đặc tính tên tệp mà bởi nhiều

tính năng vượt trội của Windows 95) thì việc thay thế này hoàn toàn thích hợp.

III.2.2. Vấn đề về một số lệnh tương tác

Vì chương trình được xây dựng với mục đích truyền file, các giao thức được xây dựng nhằm hướng tới sự bảo đảm tính toàn vẹn cho tệp tin. Việc chạy ứng dụng được giao cho hệ điều hành, chương trình chỉ làm nhiệm vụ truyền tham số dòng lệnh và nhận kết quả trả về. Vì lý do đó, một số lệnh tương tác với người dùng (cần nhận thông tin từ bàn phím) không thể chạy được với lệnh EXEC.

Tài liệu tham khảo

Tác giả Tên sách Nhà xuất bản Năm xuất bản

Douglas E.Comer Internetworking with TCP/IP Prentice-Hall International 1991 Andrew S.Tanenbaum

Computer Network Prentice-Hall International 1988 W.Richard Stevens Unix Network Programming Prentice-Hall International 1991 Bill Rieken and Lyle Weiman Unix Network Application Programming

John Wiley & Sons 1992

Nguyễn Thúc Hải Mạng máy tính và các hệ thống mở Nhà xuất bản Giáo Dục 1997 Một số tài liệu kỹ

Phụ lục A Một số kỹ thuật mạng cục bộ

I. Mạng Ethernet và IEEE 802.3

Ethernet và IEEE 802.3 là hai chuẩn phổ biến nhất trong kiến trúc mạng cục bộ. Chúng sử dụng công nghệ gọi là CSMA/CD (Carrier Sense Multiple Access/Collision Detect). Multiple Access có nghĩa là mọi máy tính và thiết bị mạng có thể truy cập đường truyền cùng một lúc. Công nghệ Carrier Sense cho phép các thiết bị nhận biết khi nào đường truyền đang bận. Trước khi thiết bị truyền thông tin, nó kiểm tra đường truyền, nếu đường truyền bận, nó đợi một khoảng thời gian ngẫu nhiên nào đó và tiếp tục. Nếu đường truyền không bận, nó bắt đầu truyền dữ liệu của mình. Nếu 2 trạm cùng truyền thông tin một lúc, dữ liệu có thể bị phá huỷ (collision), Collision Detection điều khiển thiết bị collision controller gửi tín hiệu “jam signal” để báo cho mọi thiết bị trên mạng biết điều gì đang sảy ra. Nếu gặp collision, thiết bị đợi một khoảng thời gian ngẫu nhiên nào đó tính theo chu kỳ đồng hồ của nó ví dụ một số thiết bị đợi trong khoảng 1 - 255 nhịp. Nếu gặp collision lần thứ hai, nó đợi một khoảng trong 1 - 511. Nếu tiếp tục gặp collision, thiết bị cố gắng thêm 6 lần. Thời gian truyền thông tin trên mạng Ethernet không thể xác định được chính xác vì không ai có thể chắc rằng gói thông tin không bị collision. Do vậy, thường người ta không dùng Ethernet với các ứng dụng thời gian thực. Một đặc tính của mạng Ethernet nữa là nó không có cơ chế báo nhận, khi sử dụng với TCP/IP dịch vụ này được tầng transport (TCP) cung cấp.

Một phần của tài liệu Kiến trúc mạng căn bản potx (Trang 72 - 81)

Tải bản đầy đủ (PDF)

(101 trang)