Luận văn Giao thức truyền thông và các mô hình tham chiếu, bộ giao thức TCP/IP

Tài liệu Luận văn Giao thức truyền thông và các mô hình tham chiếu, bộ giao thức TCP/IP: CHƯƠNG I. MẠNG MÁY TÍNH CHƯƠNG I . MẠNG MÁY TÍNH MẠNG MÁY TÍNH Mạng máy tính là hệ thống các máy tính độc lập (autonomous) được kết nối với nhau. Khái niệm độc lập ở đây có nghĩa là chúng không có mối quan hệ chủ/tớ (master/slave) rõ ràng. Hai máy tính được gọi là được kết nối với nhau nếu chúng có khả năng trao đổi thông tin. Sự kết nối có thể thông qua dây dẫn, tia laser, sóng điện từ hay vệ tinh viễn thông... Việc kết nối các máy tính có những ưu điểm sau Sử dụng chung tài nguyên (resource sharing): Chương trình, dữ liệu, thiết bị có thể được dùng chung bởi người dùng từ các máy tính trên mạng. Tăng độ tin cậy của hệ thống thông tin (reliability): Nếu một máy tính hay một đơn vị dữ liệu nào đó bị hỏng thì luôn có thể sử dụng một máy tính khác hay một bản sao khác của dữ liệu, nhờ đó, khả năng mạng bị ngừng sử dụng được giảm thiểu. Tạo ra môi trường truyền thông mạnh giữa nhiều người sử dụng trên phạm vi địa lý rộng: Mục tiêu này ngày càng trở nên quan trọng nhất là khi mạ...

doc107 trang | Chia sẻ: hunglv | Lượt xem: 1309 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Luận văn Giao thức truyền thông và các mô hình tham chiếu, bộ giao thức TCP/IP, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
CHƯƠNG I. MẠNG MÁY TÍNH CHƯƠNG I . MẠNG MÁY TÍNH MẠNG MÁY TÍNH Mạng máy tính là hệ thống các máy tính độc lập (autonomous) được kết nối với nhau. Khái niệm độc lập ở đây có nghĩa là chúng không có mối quan hệ chủ/tớ (master/slave) rõ ràng. Hai máy tính được gọi là được kết nối với nhau nếu chúng có khả năng trao đổi thông tin. Sự kết nối có thể thông qua dây dẫn, tia laser, sóng điện từ hay vệ tinh viễn thông... Việc kết nối các máy tính có những ưu điểm sau Sử dụng chung tài nguyên (resource sharing): Chương trình, dữ liệu, thiết bị có thể được dùng chung bởi người dùng từ các máy tính trên mạng. Tăng độ tin cậy của hệ thống thông tin (reliability): Nếu một máy tính hay một đơn vị dữ liệu nào đó bị hỏng thì luôn có thể sử dụng một máy tính khác hay một bản sao khác của dữ liệu, nhờ đó, khả năng mạng bị ngừng sử dụng được giảm thiểu. Tạo ra môi trường truyền thông mạnh giữa nhiều người sử dụng trên phạm vi địa lý rộng: Mục tiêu này ngày càng trở nên quan trọng nhất là khi mạng máy tính đã phát triển trên phạm vi toàn cầu như ngày nay. Tiết kiệm chi phí: Do tài nguyên được dùng chung, hệ thống tin cậy hơn nên chi phí thiết bị và bảo dưỡng của mạng máy tính thấp hơn so với trường hợp máy tính riêng lẻ. PHÂN LOẠI MẠNG MÁY TÍNH Phân loại theo kiến trúc (topology) của mạng Phân loại theo kiến trúc là cách phân loại mạng máy tính theo cách kết nối các máy tính trong mạng Mạng điểm-điểm (point-to-point network) Các đường truyền nối các cặp nút với nhau, mỗi nút có trách nhiệm lưu trữ tạm thời sau đó chuyển tiếp dữ liệu tới đích. Cách làm việc này còn gọi là lưu và chuyển tiếp (store-and-forward). Mạng điểm-điểm cần sử dụng lượng cáp nối lớn hoặc nhiều đường điện thoại thuê riêng (leased telephone lines), mỗi đường nối một cặp điểm làm việc. Nếu 2 điểm làm việc muốn gửi thông tin cho nhau mà không có đường truyền trực tiếp, dữ liệu của chúng cần được truyền qua một số nút khác do đó, thuật toán dẫn đường có vai trò rất quan trọng trong kiến trúc mạng điểm-điểm. Star Tree Ring Mạng quảng bá (broadcast network) Tất cả các nút cùng dùng chung một đường truyền vật lý. Dữ liệu được tiếp nhận bởi tất cả các máy tính, nếu máy tính nào kiểm tra thấy gói tin được gửi cho mình, nó sẽ giữ lại và xử lý. Các mạng quảng bá thường cho phép sử dụng địa chỉ broadcasting để gửi thông báo tới toàn mạng. Satellite Bus Ring Phân loại theo phương thức chuyển mạch (Swiched Method) Chuyển mạch kênh (Circuit Swiched Network) Thông tin truyền qua một kênh vật lý cố định, tốc độ và độ tin cậy cao nhưng lãng phí đường truyền do không sử dụng hết. Chuyển mạch tin báo (Message Swiched Network) Liên lạc được thiết lập khi có thông tin cần truyền, thông tin được định dạng gồm header và data và có độ dài không cố định: Mối liên lạc được thiết lập và chỉ giải phóng khi truyền xong dữ liệu do đó không quản lý được thời gian chiếm đường truyền Chuyển mạch gói (Packed Swiched Network) Thông tin được cắt ra thành các gói có độ dài quy định Ví dụ Erthenet IEEE 802.3 chia message thành các gói 1500 bytes. Mỗi gói đều có header và data. Các gói của các message khác nhau có thể truyền xen kẽ trên đường truyền do đó thời gian chờ đợi chung của hệ thống giảm. Phân loại theo phạm vi hoạt động Theo phạm vi hoạt động, người ta chia mạng máy tính thành những loại sau Mạng LAN (Local Area Network) Thường là mạng được sử dụng cho một công ty, trường học hay trong một toà nhà, khoảng cách tương đối nhỏ (cỡ vài trăm m tới vài Km) tốc độ truyền lớn, độ trễ nhỏ. (Phụ lục A trình bày một số mạng cục bộ thường được sử dụng) Mạng MAN (Metropolian Area Network) Mạng được cài đặt trong phạm vi một đô thị hay trung tâm kinh tế - xã hội (có bán kính khoảng 100 Km) Mạng WAN (Wide Area Network) Mạng diện rộng có thể bao trùm một vùng rộng lớn cỡ quốc gia hay lục địa. Liên mạng (internet) Phần lớn các mạng cục bộ đều độc lập với nhau về phần cứng cũng như phần mềm, chúng được thiết lập nhằm mục đích phục vụ những nhóm người cụ thể nào đó. Trong mỗi mạng đó, người dùng tự lựa chọn một công nghệ phần cứng phù hợp với công việc của họ. Một điều quan trọng nữa là không thể xây dựng một mạng chung dựa trên một công nghệ sử dụng trên một mạng đơn lẻ nào đó bởi vì không có công nghệ mạng nào có thể thoả mãn nhu cầu cho tất cả mọi người. Một số người có nhu cầu sử dụng đường nối cao tốc để truyền dữ liệu của mình trong khi các mạng LAN không thể mở rộng phạm vi hoạt động quá xa. Một số mạng tốc độ chậm lại có thể kết nối máy tính tới hàng ngàn dặm... Liên mạng máy tính (internetworking hay internet) là một công nghệ được đưa ra nhằm kết nối các mạng thành một thể thống nhất. Công nghệ internet che dấu đi kiến trúc vật lý của mạng và cho phép máy tính truyền thông một cách độc lập với liên kết vật lý của mạng. Một liên mạng đã khá quen thuộc với chúng ta là mạng Internet Giới thiệu mạng Internet Internet là một tổ hợp hàng triệu máy được kết nối với nhau thông qua các thiết bị ghép nối thường gọi là gateway để có thể chia sẻ thông tin với nhau, trong đó có đủ loại máy tính, và chúng sử dụng nhiều hệ điều hành khác nhau. Thông tin trên Internet gồm đủ loại từ thư điệu tử, các file đồ hoạ đến video và còn nhiều thứ khác được cung cấp bởi những người sử dụng Internet bằng nhiều phương thức, với nhiều tư tưởng khác nhau. Quy mô của Internet Có bao nhiêu máy được kết nối vào Internet? Con số cụ thể luôn luôn thay đổi, những địa chỉ mới luôn luôn được cập nhật từng giây chúng ta có thể truy nhập địa chỉ Web site của tổ chức Network Wizards để biết những số liệu mới nhất Thời gian Số lượng máy Tháng 1 năm 1996 14,252,000 Tháng 1 năm 1997 21,819,000 Tháng 1 năm 1998 29,670,000 Những máy chủ (host) mạnh thường sử dụng những hệ điều hành đa nhiệm, ví dụ như UNIX, để người sử dụng kết nối vào, như thế có nghĩa là số máy của người sử dụng mạng nhiều hơn những con số trên. Những máy chủ được định vị tại các điểm như thư viện, các trường đại học, các tổ chức chính phủ, các đại lý, các công ty, các trường trung học, tiểu học trên toàn thế giới. Những máy chủ này được kết nối với nhau qua đường điện thoại và chỉ mất khoảng 640/1000 giây để bắt đầu nhận thông báo từ Bắc Mỹ tới Nam cực. Các dịch vụ mà Internet cung cấp Phần lớn người sử dụng Internet không cần biết đến của công nghệ sử dụng trên Internet, đối với họ Internet chỉ đơn giản là một bộ chương trình phần mềm mang lại cho họ những khả năng truyền thông có ích. Chính điều này mang lại cho Internet số người dùng đông đảo tới như vậy. Các dịch vụ mức ứng dụng ban đầu trên Internet Thư điện tử (Electronic mail) Cho phép người dùng ngồi trước máy tính tại nhà mình gửi E-mail tới bất cứ ai ở đâu trên thế giới nếu họ có địa chỉ E-mail. Họ có thể tham gia các nhóm thảo luận (discussion group) về những đề tài khác nhau hay bắt đầu một nhóm mới về những chủ đề mà họ ưa thích. Truyền file (File Transfer) Nếu cần một chương trình phần mềm mới như các tiện ích nén file, các chương trình diệt virus, một phần mềm trò chơi, hình ảnh hay âm thanh, người dùng có thể tải xuống bất cứ lúc nào với File Transfer. Truy nhập từ xa (Remote login) Có lẽ điều thú vị nhất trong các ứng dụng của Internet là Remote login, nó cho phép người dùng kết nối vào một máy tính ở xa như một trạm cuối để sử dụng máy tính đó. Dịch vụ mức mạng của Internet Một lập trình viên viết chương trình ứng dụng trên Internet cần có một cái nhìn khác với người chỉ đơn giản sử dụng dịch vụ Internet. Ở tầng mạng, Internet cung cấp 2 kiểu dịch vụ mà các ứng dụng của Internet thường dùng đó là Dịch vụ truyền không kết nối (Connectionless Paket Delivery Service) là một phương thức truyền dữ liệu mà các mạng chuyển mạch gói cung cấp. Điều này chỉ đơn giản là mạng Internet chuyển các gói tin từ máy này sang máy khác dựa vào thông tin địa chỉ của gói đến đích của nó. Việc chia nhỏ gói tin truyền này có một lợi điểm là nếu một đường đi bị bận hoặc bị đứt, thì các gói có thể được truyền theo một đường khác. Dịch vụ truyền tin cậy (Reliable Stream Transport Service) Phần lớn các ứng dụng đòi hỏi nhiều dịch vụ hơn chỉ truyền thông không kết nối bởi vì chúng cần tự động sửa lỗi, kiểm tra tính toàn vẹn của thông tin truyền đi trên mạng. Reliable Stream Transport Service giải quyết vấn đề này cho ta. CHƯƠNG II . GIAO THỨC TRUYỀN THÔNG VÀ CÁC MÔ HÌNH THAM CHIẾU GIAO THỨC TRUYỀN THÔNG Để các máy tính trên mạng có thể trao đổi thông tin với nhau, chúng cần có một bộ những phần mềm cùng làm việc theo một chuẩn nào đó. Giao thức truyền thông (protocol) là tập quy tắc quy định phương thức truyền nhận thông tin giữa các máy tính trên mạng. Các mạng máy tính hiện đại được thiết kế bằng cách phân chia cấu trúc ở mức độ cao nhằm làm giảm sự phức tạp khi thiết kế. Các giao thức mạng thường được chia làm các tầng (layer), mỗi tầng được xây để dựng dựa trên dịch vụ của tầng dưới nó và cung cấp dịch vụ cho tầng cao hơn. MÔ HÌNH THAM CHIẾU OSI Giới thiệu mô hình OSI Mô hình mạng máy tính do tổ chức tiêu chuẩn hoá quốc tế (International Standard Organization - ISO) đưa ra năm 1983 được gọi là mô hình tham chiếu các hệ thống mở (Open Systems Interconect referent model - OSI). Các điều khoản mô tả trong mô hình được sử dụng rộng rãi trong lý thuyết truyền thông, do đó, trong thực tế khó có thể nói về truyền thông mà không sử dụng thuật ngữ của OSI. Mô hình tham chiếu OSI chứa 7 tầng mô tả chức năng của giao thức truyền thông. Mỗi tầng của mô hình OSI miêu tả một chức năng được thực hiện khi dữ liệu di chuyển giữa các ứng dụng giữa các mạng. Tầng ứng dụng bao gồm các trình ứng dụng sử dụng mạng. Tầng trình diễn tiêu chuẩn hoá dữ liệu cung cấp cho tầng ứng dụng. Tầng phiên quản trị các phiên làm việc giữa các ứng dụng. Tầng giao vận cung cấp kết nối trạm-trạm, xử lý lỗi. Tầng mạng quản trị việc kết nối qua mạng cho các tầng trên. Tầng liên kết dữ liệu cung cấp phân phát dữ liệu tin cậy qua đường truyền vật lý. Tầng vật lý định rõ các đặc thù của thiết bị mạng. Các lớp giao thức được xếp chồng lớp nọ trên lớp kia. Chính sự xuất hiện của nó, cấu trúc thường được gọi là stack hoặc giao thức xếp chồng. Việc phân tầng của OSI tuân theo một số nguyên tắc sau Một lớp được tạo ra khi cần đến mức trừu tượng hoá tương ứng. Mỗi lớp cần thực hiện các chức năng được định nghĩa rõ ràng. Việc chọn chức năng cho mỗi lớp cần chú ý tới việc định nghĩa các quy tắc chuẩn hoá quốc tế. Ranh giới các mức cần chọn sao cho thông tin đi qua là ít nhất (tham số cho chương trình con là ít). Số mức phải đủ lớn để các chức năng tách biệt không nằm trong cùng một lớp và đủ nhỏ để mô hình không quá phức tạp. Một mức có thể được phân thành các lớp nhỏ nếu cần thiết. Các mức con có thể lại bị loại bỏ. Hai hệ thống khác nhau có thể truyền thông với nhau nếu chúng bảo đảm những nguyên tắc chung (cài đặt cùng một giao thức truyền thông). Các chức năng được tổ chức thành một tập các tầng đồng mức cung cấp chức năng như nhau. Các tầng đồng mức phải sử dụng một giao thức chung. Một tầng không định nghĩa một giao thức đơn, nó định nghĩa một chức năng truyền thông có thể được thi hành bởi một số giao thức. Do vậy, mỗi tầng có thể chứa nhiều giao thức, mỗi giao thức cung cấp một dịch vụ phù hợp cho chức năng của tầng. Ví dụ cả giao thức truyền file (File Transfer Protocol - FTP) và giao thức thư điện tử (Simple Mail Transfer Protocol - SMTP) đều cung cấp dịch vụ cho người dùng và cả hai đều thuộc tầng ứng dụng. Mỗi mức ngang hàng giao thức truyền thông (sự bổ xung của các giao thức cùng mức tương đương trên hệ thống khác). Mỗi mức phải được chuẩn hoá để giao tiếp với mức tương đương với nó. Trên lý thuyết, giao thức chỉ biết đến những gì liên quan tới lớp của nó mà không quan tâm tới mức trên hoặc dưới của nó. Tuy nhiên phải có sự thoả thuận để chuyển dữ liệu giữa các tầng trên một máy tính, bởi mỗi tầng lại liên quan tới việc gửi dữ liệu từ ứng dụng tới một ứng dụng tương đương trên một máy khác. Tầng cao hơn dựa vào tầng thấp hơn để chuyển dữ liệu qua mạng phía dưới. Dữ liệu chuyển xuống ngăn xếp từ tầng này xuống tầng thấp hơn cho tới khi được truyền qua mạng nhờ giao thức của tầng vật lý. Ở đầu nhận, dữ liệu đi lên ngăn xếp tới ứng dụng nhận. Những tầng riêng lẻ không cần biết các tầng trên và dưới nó xử lý ra sao, nó chỉ cần biết cách chuyển nhận thông tin từ các tầng đó. Sự cô lập các hàm truyền thông trên các tầng khác nhau giảm thiểu sự tích hợp công nghệ của đầu vào mỗi bộ giao thức. Các ứng dụng mới có thể thêm vào mà không cần thay đổi tầng vật lý của mạng, phần cứng có thể được bổ sung mà không cần viết lại các phần mềm ứng dụng. Các tầng của mô hình OSI Tầng vật lý (Physical layer) Tầng vật lý liên quan tới việc truyền dòng bit giữa các máy bằng kênh truyền thông vật lý, ở đây, cấu trúc của dữ liệu không được quan tâm đến. Việc thiết kế tầng vật lý cần quan tâm đến các vấn đề về ghép nối cơ khí, điện tử, thủ tục và môi trường truyền tin bên dưới nó ví dụ mức điện áp tương ứng với bit 0 - 1, thời gian tồn tại của xung... Tầng liên kết dữ liệu (Data link layer) Liên kết, thiết lập, duy trì, huỷ bỏ các liên kết dữ liệu là nhiệm vụ của tầng data link. Ngoài ra tầng data link còn kiểm soát lỗi đường truyền, thông lượng. Tầng này thực hiện việc đóng gói thông tin gửi thành các frame, gửi các frame một cách tuần tự đi trên mạng, xử lý các thông báo xác nhận (Acknowledgement frame) do bên nhận gửi về. Xác định ranh giới giữa các frame bằng cách ghi một số byte đặc biệt vào đầu và cuối frame. Giải quyết vấn đề thông lượng truyền giữa bên gửi và bên nhận (Vấn đề này có thể được giải quyết bởi một số lớp trên). Tầng mạng (Network layer) Vấn đề chủ chốt của tầng mạng là dẫn đường, định rõ các gói tin (packet) được truyền theo những con đường nào từ nguồn đến đích. Các con đường này có thể cố định, ít bị thay đổi, được thiết lập khi bắt đầu liên kết hay động (dynamic) thay đổi tuỳ theo trạng thái tải của mạng. Nếu có nhiều gói tin truyền trên mạng có thể xảy ra tình trạng tắc nghẽn, tầng mạng phải giải quyết vấn đề này. Thực hiện chức năng giao tiếp với các mạng bao gồm việc đánh lại địa chỉ, cắt hợp gói tin cho phù hợp với các mạng. Ngoài ra tầng mạng còn thực hiện một số chức năng kế toán, ví dụ, một số Firewall (packet filtering) được cài đặt trên tầng này để thống kê số lượng các gói tin truyền qua mạng hay ngăn cấm hoặc cho phép các gói tin của giao thức nào đó. Tầng giao vận (Transport layer) Kiểm soát việc truyền tin từ nút tới nut (end-to-end): Bắt đầu từ tầng này, các thực thể đã có thể nói chuyện một cách logic với nhau. Thực hiên việc ghép kênh và phân kênh: Mỗi ứng dụng có thể gửi dữ liệu đi theo nhiều con đường, một đường truyền lại có thể được nhiều ứng dụng sử dụng, phân kênh/hợp kênh giải quyết vấn đề phân chia dữ liệu cho các ứng dụng. Khắc phục sai sót trong quá trình truyền tin: Việc khắc phục sai sót được thực hiện trên nhiều tầng khác nhau, nhưng hiệu quả nhất là ở các tầng cao, việc khắc phục sai sót làm ở tầng giao vận là hợp lý nhất. Tầng phiên (Session layer) Tầng này cho phép người sử dụng trên các máy khác nhau thiết lập, duy trì, huỷ bỏ, đồng bộ phiên truyền thông giữa họ. Cung cấp một số dịch vụ hữu ích cho người sử dụng như cho phép người dùng logon vào hệ thống chia sẻ thời gian, truyền tệp giữa các máy tính. Quản lý token: cơ chế thẻ bài được tầng phiên cung cấp để tránh hiện tượng tranh chấp đường truyền trên mạng. Thực hiện đồng bộ (Synchronization): thực hiện đối với những dữ liệu lớn bằng cách thêm vào các thông tin kiểm tra, sửa lỗi. Tầng trình diễn (Presentation layer) Giải quyết vấn đề liên quan tới cú pháp và ngữ nghĩa của thông tin như chuyển đổi thông tin theo một chuẩn nào đó được cả hai bên sử dụng (mã ASCII - EDBCDIC). Nén/giãn dữ liệu để giảm số lượng bit truyền trên mạng. Mã hoá dữ liệu để thực hiện quyền truy cập. Tầng ứng dụng (Application layer) Tầng ứng dụng cung cấp giao diện sử dụng cho người dùng và môi trường truyền tin. Thực hiện chức năng chuyển file trong đó có giải quyết vấn đề không tương thích như cách đặt tên file hay các mã điều khiển trong một tệp văn bản... Cung cấp các dịch vụ Electronic mail, Remote login, Directory lookup... Những vấn đề về OSI Bản thân OSI không phải là một kiến trúc mạng bởi vì nó không chỉ ra chính xác các dịch vụ và các nghi thức được sử dụng trong mỗi tầng. Mô hình này chỉ ra mỗi tầng cần thực hiện nhiệm vụ gì. ISO đã đưa ra các tiêu chuẩn cho từng tầng, nhưng các tiêu chuẩn này không phải là một bộ phận của mô hình tham chiếu. Mô hình OSI ra đời sau khi các giao thức TCP/IP (TCP/IP sẽ được trình bày ở phần sau) đã được sử dụng rộng rãi, nhiều công ty đã đưa ra các sản phẩm TCP/IP, vì vậy, mô hình OSI chỉ được sử dụng trong thực tế như một chuẩn về lý thuyết. Trong mô hình OSI, một số chức năng như điều khiển thông lượng, kiểm tra lỗi xuất hiện lặp lại trong một số tầng. Điều này có nguyên nhân do mô hình OSI được chia làm các tầng khác nhau, mỗi tầng tương ứng với một đối tượng độc lập (có dữ liệu và các phương thức riêng của nó, độc lập với các đối tượng khác). Mô hình OSI không có các dịch vụ và giao thức không hướng kết nối mặc dù hầu hết các mạng đều có sử dụng. Mô hình quá phức tạp cho việc cài đặt làm cho OSI khó có thể ứng dụng rộng rãi trên thực tế. KIẾN TRÚC GIAO THỨC IPX/SPX Một hệ thống mạng máy PC được sử dụng phổ biến nhất trên thế giới trong thời gian vừa qua là mạng Novell Netware. Nó được thiết kế cho các công ty, để chuyển từ việc sử dụng máy tính lớn (Mainframe) sang sử dụng PC. Mỗi PC làm chức năng khách hàng (client), một số máy mạnh hoạt động như máy phục vụ (Server), chúng cung cấp các dịch vụ file, các dịch vụ CSDL và các dịch vụ khác cho một nhóm khách hàng. Nói cách khác, Novell Netware hoạt động theo mô hình file-server. Kiến trúc giao thức IPX/SPX Application SAP File server Transport NCP SPX Network IPX Datalink Ethernet Token ring ARCnet Physical Ethernet Token ring ARCnet Novell Netware sử dụng chồng giao thức IPX/SPX dựa trên một hệ thống mạng cũ của hãng Xerox-XNSTM nhưng có một số thay đổi. Novell Netware ra đời trước OSI và không dựa trên mô hình này. Tầng vật lý và tầng Data link có thể được chọn trong số nhiều chuẩn công nghiệp khác nhau bao gồm Ethernet, IBM token ring và ARCnet. Tầng mạng không định hướng nối kết, không bảo đảm (unreliable connectionless) có tên là IPX (Internet Packet eXchange). Nó chuyển các packet từ nguồn tới đích một cách trong suốt với người dùng ngay cả khi nguồn và đích nằm ở các mạng khác nhau. IPX sử dụng địa chỉ 12 byte. Tầng giao vận: Giao thức NCP (Network Core Protocol) cung cấp nhiều dịch vụ khác ngoài việc vận chuyển dữ liệu của người sử dụng, nó chính là trái tim của Novell Netware. Giao thức thứ hai của tầng này là SPX (Sequenced Packet eXchange). Nó chỉ thực hiện việc vận chuyển. Các ứng dụng có thể lựa chọn sử dụng một trong các giao thức của tầng này ví dụ hệ thống file sử dụng NCP, Lotus Note sử dụng SPX. Tầng Application nằm trên cùng, có nhiều giao thức khác nhau cung cấp cho người sử dụng các dịch vụ như đã trình bày ở trên. Gói tin IPX Điểm mấu chốt của kiến trúc IPX/SPX là gói tin IPX có cấu trúc như sau Offset Field Length (byte) 0 Checksum 2 2 Packet length 2 4 Transport control 1 5 Packet type 1 6 Destination Address 12 18 Source Address 12 30 ? Checksum: ít khi sử dụng vì tầng Data link bên dưới đã cung cấp checksum Packet length: chứa chiều dài của packet tính cả header và data Packet type: đánh dấu các packet điều khiển khác nhau. Destination Address: địa chỉ đích của gói tin. Source Address: địa chỉ nguồn của gói tin. Data: Chiếm phần cuối của gói, có độ dài phụ thuộc vào trường paket length trên. Cơ chế hoạt động của Novell Netware Cứ khoảng mỗi phút một lần, mỗi server lại phát đi (broadcast) một packet, cho biết địa chỉ của chính nó và các dịch vụ mà nó cung cấp. Việc này sử dụng giao thức SAP (Service Advertising Protocol). Các packet này được tiến trình dịch vụ (special agent process) chạy trên các máy router nhận và thu thập. Các agent sử dụng thông tin chứa trong đó để xây dựng CSDL về các server. Khi một máy client khởi động, nó phát một request để hỏi xem server gần nhất ở đâu. Agent trên máy router địa phương tiếp nhận yêu cầu này, kiểm tra CSDL về server, lựa chọn server phù hợp gửi lại thông tin cho client. Từ thời điểm đó, Client có thể thiết lập kết nối NCP với server và sử dụng các dịch vụ của server. Trong quá trình kết nối, client và server thoả thuận với nhau về chiều dài cực đại của dữ liệu, trong quá trình sử dụng, client có thể tra cứu CSDL của server để biết thông tin của các server khác. CHƯƠNG III. GIAO THỨC TCP/IP GIAO THỨC TCP/IP Vào cuối những năm 1960 và đầu 1970, Trung tâm nghiên cứu cấp cao (Advanced Research Projects Agency - ARPA) thuộc bộ quốc phòng Mĩ (Department of Defense - DoD) được giao trách nhiệm phát triển mạng ARPANET. Mạng ARPANET bao gồm mạng của những tổ chức quân đội, các trường đại học và các tổ chức nghiên cứu và được dùng để hỗ trợ cho những dự án nghiên cứu khoa học và quân đội (Ngày nay, ARPA được gọi là DARPA). Năm 1984, DoD chia ARPANET ra thành 2 phần: ARPANET sử dụng cho nghiên cứu khoa học và MILNET sử dụng cho quân đội. Đầu những năm 1980, một bộ giao thức mới được đưa ra làm giao thức chuẩn cho mạng ARPANET và các mạng của DoD mang tên DARPA Internet protocol suit, thường được gọi là bộ giao thức TCP/IP hay còn gọi tắt là TCP/IP. Năm 1987 tổ chức nghiên cứu quốc gia Hoa Kỳ (National Science Foundation - NSF) tài trợ cho việc kết nối 6 trung tâm siêu tính trên toàn liên bang lại với nhau thành một mạng với tên gọi NSFNET. Về mặt vật lý, mạng này kết nối 13 điểm làm việc bằng đường điện thoại cao tốc được gọi là NSFNET backbone. Khoảng 8 đường backbone đã được xây dựng. NSFNET được mở rộng với hàng chục mạng địa phương kết nối vào nó và kết nối vào mạng Internet của DARPA. Cả NSFNET và các mạng con của nó đều sử dụng bộ giao thức TCP/IP. TCP/IP có một số ưu điểm như sau: Giao thức chuẩn mở sẵn sàng phát triển độc lập với phần cứng và hệ điều hành. TCP/IP là giao thức lý tưởng cho việc hợp nhất phần cứng và phần mềm khác nhau, ngay cả khi truyền thông trên Internet. Sự độc lập rành mạch với phần cứng vật lý của mạng cho phép TCP/IP hợp nhất các mạng khác nhau. TCP/IP có thể chạy trên mạng Ethernet, mạng Token ring, mạng quay số (Dial-up line), mạng X.25, mạng ảo và mọi loại môi trường vật lý truyền thông. Một sơ đồ địa chỉ dùng chung cho phép mỗi thiết bị TCP/IP có duy nhất một địa chỉ trên mạng ngay cả khi đó là mạng toàn cầu Internet. Tiêu chuẩn hoá mức cao của giao thức phù hợp với ích lợi của dịch vụ người dùng. Được tích hợp vào hệ điều hành UNIX, Hỗ trợ mô hình client-server, mô hình mạng bình đẳng, Hỗ trợ kỹ thuật dẫn đường động. DARPA hỗ trợ việc nghiên cứu kết nối nhiều loại mạng khác nhau lại thành một mạng toàn cầu Internet. Ngoài việc sử dụng cho tất cả các máy trên Internet, TCP/IP còn được sử dụng trong mạng nội bộ của một số tổ chức chính phủ hoặc thương mại, những mạng này gọi là Intranet. TCP/IP vừa có thể kết nối một số lượng lớn các máy tính (150.000 máy trên nước Mĩ, Châu Âu, Châu Á) lại có thể chỉ kết nối hai máy tính trong phòng làm việc. Dưới đây, chúng ta xem xét một số nội dung về bộ giao thức truyền thông TCP/IP. KIẾN TRÚC CỦA BỘ GIAO THỨC TCP/IP Kiến trúc phân tầng của TCP/IP Application Layer Presentation Layer Application Layer Session Layer Transport Layer Transport Layer Network Layer Internet Layer Data link Layer Physical Layer Network access Layer Các lớp tương ứng giữa OSI và TCP/IP Có nhiều giao thức trong bộ giao thức truyền thông TCP/IP, nhưng hai giao thức quan trọng nhất được lấy tên đặt cho bộ giao thức này là TCP (Transmission Control Protocol) và IP (Internet Protocol). Bộ giao thức TCP/IP được phân làm 4 tầng Tầng mạng (Network Layer) Tầng Internet (Internet Layer) Tầng giao vận (Transport Layer) Tầng ứng dụng (Application Layer) Application Layer Transport Layer (Host Layer) Internet Layer (Getway Layer) Network Interface Layer RIP SNMP SMTP Transsmission Control Protocol User Datagram Protocol TELNET FTP Internet Protocol ICMP ARP Token Ring Fiber Token Bus Ethernet DNS Các tầng của bộ giao thức TCP/IP FTP (File transfer Protocol): Giao thức truyền tệp cho phép người dùng lấy hoặc gửi tệp tới một máy khác. Telnet: Chương trình mô phỏng thiết bị đầu cuối cho phép người dùng login vào một máy chủ từ một máy tính nào đó trên mạng. SMTP (Simple Mail Transfer Protocol): Một giao thức thư tín điện tử. DNS (Domain Name server): Dịch vụ tên miền cho phép nhận ra máy tính từ một tên miền thay cho chuỗi địa chỉ Internet khó nhớ. SNMP (Simple Network Management Protocol): Giao thức quản trị mạng cung cấp những công cụ quản trị mạng. RIP (Routing Internet Protocol): Giao thức dẫn đường động. ICMP (Internet Control Message Protocol): Nghi thức thông báo lỗi. UDP (User Datagram Protocol): Giao thức truyền không kết nối cung cấp dịch vụ truyền không tin cậy nhưng tiết kiệm chi phí truyền. TCP (Transmission Control Protocol): Giao thức hướng kết nối cung cấp dịch vụ truyền thông tin tưởng. IP (Internet Protocol): Giao thức Internet chuyển giao các gói tin qua các máy tính đến đích. ARP (Address Resolution Protocol): Cơ chế chuyển địa chỉ TCP/IP thành địa chỉ vật lý của các thiết bị mạng. Application Transport Internet Network Interface Application Transport Internet Network Interface Identical Datagram Identical Frame Identical Packet Identical Message Physical Net Host B Host A Cũng giống như trong mô hình tham chiếu OSI, dữ liệu gửi từ tầng Application đi xuống ngăn xếp, mỗi tầng có những định nghĩa riêng về dữ liệu mà nó sử dụng. Tại nơi gửi, mỗi tầng coi gói tin của tầng trên gửi xuống là dữ liệu của nó và thêm vào gói tin các thông tin điều khiển của mình sau đó chuyển tiếp xuống tầng dưới. Tại nơi nhận, quá trình diễn ra ngược lại, mỗi tầng lại tách thông tin điều khiển của mình ra và chuyển dữ liệu lên tầng trên. Application Data Transport TCP Header Data Internet IP Header TCP Header Data Network Ethernet Header IP Header TCP Header Data Ethernet trailer Cơ chế địa chỉ Internet Mạng Internet dùng hệ thống địa chỉ IP (32 bit) để "định vị" các máy tính liên kết với nó. Có hai cách đánh địa chỉ phụ thuộc vào cách liên kết của từng máy tính cụ thể: Nếu các máy tính được kết nối trực tiếp với mạng Internet thì trung tâm thông tin Internet (Network Information Centre-NIC) sẽ cấp cho các máy tính đó một địa chỉ IP (IP Address). Nếu các máy tính không kết nối trực tiếp với mạng Internet mà thông qua một mạng cục bộ thì người quản trị mạng sẽ cấp cho các máy tính đó một địa chỉ IP (tuy nhiên cũng dưới sự cho phép của NIC) Hệ thống địa chỉ này được thiết kế mềm dẻo qua một sự phân lớp, có 5 lớp địa chỉ IP là : A, B, C, D, E. Sự khác nhau cơ bản giữa các lớp địa chỉ này là ở khả năng tổ chức các cấu trúc con của nó. 0 1 2 3 4 8 16 24 Class A 0 Netid Hostid Class B 1 0 Netid Hostid Class C 1 1 0 Netid Hostid Class D 1 1 1 0 Multicast address Class E 1 1 1 1 0 Reverved for future use Sau đây chúng ta sẽ nghiên cứu về 3 lớp địa chỉ chính của TCP/IP đó là các lớp A,B,C là các lớp được sử dụng rộng rãi trên mạng Internet. Địa chỉ lớp A Lớp A sử dụng byte đầu tiên của 4 byte để đánh địa chỉ mạng. Như hình trên, nó được nhận ra bởi bit đầu tiên trong byte đầu tiên của địa chỉ có giá trị 0. 3 bytes còn lại được sử dụng để đánh địa chỉ máy trong mạng. Có 126 địa chỉ lớp A (được đánh địa chỉ trong byte thứ nhất) với số máy tính trong mạng là 2563 - 2 = 16.777.214 máy cho mỗi một địa chỉ lớp A (do sử dụng 3 bytes để đánh địa chỉ máy). Địa chỉ lớp A thường được cấp cho những tổ chức có số lượng máy tính lớn. Nguyên nhân chỉ có 126 networks trong khi dùng 8 bit vì bit đầu tiên mang giá trị 0 dùng để định nghĩa lớp A vậy con lại 7 bit đánh số từ 0-127 tuy nhiên người ta không sử dụng một địa chỉ chứa toàn các con số 1 hoặc 0 do vậy, chỉ còn lại 126 mạng lớp A được sử dụng. Do vậy giá trị byte đầu tiên của địa chỉ lớp A sẽ luôn luôn nằm trong khoảng từ 1 tới 126, mỗi một byte trong 3 bytes còn lại sẽ có giá trị trong khoảng 1 đến 254. Đối với việc chỉ có 16.777.214 máy trong khi sử dụng 24 bit đánh địa chỉ máy trong mạng cũng được giải thích tương tự. Địa chỉ lớp A có dạng: với con số thập phân đầu tiên nhỏ hơn 128 Ví dụ: 9. 6. 7. 8 : Nút được gán Host ID là 6. 7. 8, nằm trong mạng lớp A có địa chỉ là 9. 0. 0. 0 Địa chỉ lớp B Một địa chỉ lớp B được nhận ra bởi 2 bit đầu tiên của byte thứ nhất mang giá trị 10. Lớp B sử dụng 2 byte đầu tiên của 4 byte để đánh địa chỉ mạng và 2 byte cuối đánh địa chỉ máy trong mạng. Có 64*256 - 2 = 16.128 địa chỉ mạng lớp B với 65.534 máy cho mỗi một địa chỉ lớp B. Địa chỉ lớp B có dạng: Byte đầu tiên của một địa chỉ lớp B nằm trong khoảng 128 tới 191. Ví dụ: 190. 2. 2 . 1 : Nút được gán Host ID là 2. 1, nằm trong mạng lớp B có địa chỉ là 190. 2. 0. 0 Địa chỉ lớp C Một số tổ chức có quy mô nhỏ có thể xin cấp phát địa chỉ lớp C. Một địa chỉ lớp C được nhận ra với 3 bit đầu mang giá trị 110. Mạng lớp C sử dụng 3 byte đầu để đánh địa chỉ mạng và 1 byte cuối đánh địa chỉ máy trong mạng. Có 2.097.150 địa chỉ lớp C, mỗi địa chỉ lớp C có 254 máy. Địa chỉ lớp C có dạng: Địa chỉ lớp C được nhận ra với byte đầu tiên trong khoảng 192 tới 223 Ví dụ: 200. 6. 5. 4 : Nút được gán Host ID là 4, nằm trong mạng lớp C có địa chỉ là 200. 6. 5. 0 Mạng con và Subnet mask Mạng Internet sử dụng địa chỉ IP 32 bit và phân chia ra các lớp rất mềm dẻo, tuy nhiên, với một hệ thống địa chỉ như vậy việc quản lý vẫn rất khó khăn. Nếu như một mạng được cấp một địa chỉ lớp A thì có nghĩa nó chứa tới 16*1.048.576 máy tính, do vậy người ta dùng mặt nạ bit để phân chia mạng ra thành những mạng con gọi là Subnet. Subnet mask là một con số 32 bit bao gồm n bit 1 (thường là các bit cao nhất) dùng để đánh địa chỉ mạng con và m bit 0 dùng để đánh địa chỉ máy trong mạng con với n+m=32 0 16 Network Number Host Number Network Number Subnet Number Host Number 1111111 11111111 11111111 00000000 Mặt nạ subnet phải được cấu hình cho mỗi máy tính trong mạng và phải được định nghĩa cho mỗi router. Như vậy, ta phải dùng cùng một Subnet mask cho toàn bộ mạng vật lý cùng chung một địa chỉ Internet. Ví dụ: Ta có một địa chỉ lớp B 128.001.000.000 và cần chia nó thành 254 mạng con với 254 máy trong mỗi mạng, ta giải quyết vấn đề này bằng Subnet mask như sau Network num 10000000 00000001 00000000 00000000 = 128.001.000.000 Subnet mask 11111111 11111111 11111111 00000000 = 255.255.255.000 Mặt nạ trên định nghĩa 254 mạng con với địa chỉ như sau: Subnet #1 10000000 00000001 00000001 00000000 = 128.001.001.000 Subnet #2 10000000 00000001 00000010 00000000 = 128.001.002.000 Subnet #3 10000000 00000001 00000011 00000000 = 128.001.003.000 . . Subnet #254 10000000 00000001 11111110 00000000 = 128.001.254.000 Số máy trong mạng con thứ nhất sẽ nằm trong khoảng sau: Subnet #1 10000000 00000001 00000001 00000000 = 128.001.001.000 Low Address 10000000 00000001 00000001 00000001 = 128.001.001.001 High Address 10000000 00000001 00000001 11111110 = 128.001.001.254 Chú ý rằng một địa chỉ chứa toàn số 1 dùng cho boardcasting, chứa toàn số 0 dành cho Subnet mask do vậy, địa chỉ máy của Internet không bao giờ chứa toàn các con số 1 hoặc 0. TẦNG MẠNG (NETWORK LAYER) Tầng mạng là tầng thấp nhất của kiến trúc giao thức TCP/IP. Các giao thức trong tầng này cung cấp biện pháp cho hệ thống chuyển giao dữ liệu giữa các thiết bị được kết nối trực tiếp. Nó mô tả cách sử dụng mạng để truyền một gói thông tin IP. Không giống những giao thức của tầng cao hơn là sử dụng dịch vụ của tầng dưới nó và cung cấp dịch vụ cho tầng trên, giao thức của tầng mạng cần phải biết chi tiết của mạng vật lý phía dưới (cấu trúc của gói, địa chỉ, vv...) để định dạng đúng thông tin sẽ được truyền tuân theo những ràng buộc của mạng. Tầng mạng của TCP/IP chứa các chức năng tương ứng của 3 tầng thấp nhất của mô hình tham chiếu OSI (tầng mạng, tầng liên kết dữ liệu, tầng vật lý). Tầng mạng thường không được người dùng để ý tới vì thiết kế của TCP/IP che dấu những chức năng của tầng thấp nhất này và những điều cần biết cho người sử dụng cũng như người lập trình chỉ là những giao thức của các tầng cao hơn (IP, TCP, UDP, vv...). Mỗi khi có công nghệ phần cứng xuất hiện, những giao thức tầng mạng phải được phát triển để TCP/IP có thể sử dụng phần cứng mới (thông thường đó chính là các trình điều khiển của chính nhà cung cấp phần cứng đó). Các chức năng trình diễn trong tầng này bao gồm đóng gói gói thông tin IP thành các "Frame" được truyền dẫn trên mạng và chuyển địa chỉ IP thành địa chỉ vật lý sử dụng bởi mạng máy tính. Một trong số các điểm mạnh của TCP/IP là địa chỉ của nó được phối hợp sao cho trên mạng Internet không có một thiết bị mạng nào cùng tên. Địa chỉ này phải được chuyển đổi thích hợp với địa chỉ mạng vật lý nơi mà dữ liệu được truyền đi. Hai ví dụ RFCs mô tả giao thức sử dụng cho tầng mạng là: RFC 826: Giao thức chuyển đổi địa chỉ chuyển đổi địa chỉ IP thành địa chỉ Ethernet RFC 894: Một chuẩn cho việc truyền gói tin IP qua mạng Ethernet mô tả cách thức đóng gói để truyền thông tin qua mạng Ethernet. Khi cài đặt trong UNIX, giao thức của tầng này được xem như sự phối hợp của chương trình điều khiển thiết bị và các chương trình liên quan. Những đơn vị tương ứng với những thiết bị mạng làm nhiệm vụ đóng gói dữ liệu và chuyển giao cho mạng. TẦNG INTERNET (INTERNET LAYER) Tầng Internet cung cấp một hệ thống chuyển giao không kết nối và đôi khi người ta còn gọi là không tin cậy. Không kết nối bởi mỗi gói tin được truyền đi trên mạng một cách độc lập, sự kết hợp dữ liệu của các gói tin được cung cấp bởi các dịch vụ lớp trên. Mỗi gói tin IP chứa địa chỉ nơi gửi và địa chỉ nơi nhận và dựa vào đó nó có thể được truyền trên mạng tới đích. Nhưng chính việc dữ liệu có thể đi tới đích trên nhiều đường khác nhau tạo nên sự mềm dẻo cho Internet khi một đường bị đứt hay một nút nào đó bị quá tải, các gói tin có thể được truyền đi theo những con đường khác, nếu một gói tin nào có lỗi thì chỉ phải truyền lại gói tin đó thay vào việc phải truyền lại toàn bộ thông báo. Không tin cậy bởi vì IP không có cơ chế kiểm tra tính đúng đắn của dữ liệu được truyền nhận, dịch vụ tin tưởng phải được cung cấp bởi các giao thức lớp trên. Vấn đề chủ chốt trên tầng Internet là việc chọn lựa con đường tối ưu để truyền các gói tin từ trạm nguồn tới trạm đích. Chúng ta sẽ xem xét các kỹ thuật chọn đường và thuật toán dẫn đường sử dụng đối với tầng này sau đây. Gói tin IP 0 31 Vers Hlen Service type Total length Identification Flag Fragment offset Time to live Protocol Header cheksum Source IP address Destination IP address IP options Padding IP datagram data (Max 65535 bytes) Destination Address Source Address Type field IP data CRC Gói thông tin IP trong một frame Ethernet Vers : Dài 4 bits, mô tả chính xác version của IP Hlen : Dài 4 bits, mô tả độ dài của IP header (tính bằng từ 32 bit). Service type: dài 8 bits mô tả thứ tự ưu tiên của data. Total length: Dài 16 bits (2 bytes), đây là độ dài của datagram (in bytes-có nghĩa là độ dài vùng data của IP datagram có thể lên tới 65535 bytes). Identification, flags, fragment offset: Không phải bất kỳ size nào của datagram cũng được truyền trên mạng (ví dụ Ethernet LAN chỉ hỗ trợ cho size lớn nhất của datagram là 1518 bytes). Do vậy khi size của datagram vượt quá kích thước cho phép, nó sẽ bị chia nhỏ ra và các trường này sẽ đảm bảo rằng các datagram đã bị phân chia này là từ một datagram ban đầu. Time to live: Dùng để xác định xem datagram này có bị truyền lặp lại hay không (thông thường nó được gán là 1, nếu bị lặp lại nó sẽ bị gán là 0) Protocol: Trường này cho biết lớp giao thức cao hơn nào sẽ được sử dụng (UDP hay là TCP). CRC: Trường này được dùng để kiểm tra sự toàn vẹn của header. IP option: Chứa các thông tin như: "dò" đường, bảo mật, xác nhận thời gian. Padding: Trường điền thêm các số 0 để đảm bảo header kết thúc tại một địa chỉ bội của 32 Source IP address, destination IP address: chứa địa chỉ của station gửi và địa chỉ của station đích. Gói tin IP chứa một trường checksum để kiểm tra tính toàn vẹn của IP header, nếu IP header lỗi, gói tin IP bị loại bỏ và giao thức lớp trên sẽ truyền một gói tin khác. Tầng IP làm công việc dẫn đường các gói tin qua mạng Internet từ máy tính này tới máy tính khác, qua các mạng khác nhau cho tới khi nó đến được trạm đích hoặc bị lỗi. Việc truyền gói tin qua các mạng được thực hiện thông qua một thiết bị kết nối giữa hai mạng gọi là gateway. Khi một thông tin truyền qua các mạng khác nhau, nó có thể bị chia ra thành nhiều gói nhỏ hơn. Thông tin truyền có thể quá lớn để có thể truyền trên một gói tin trên một mạng khác. Vấn đề này chỉ gặp phải khi gateway được nối giữa các mạng vật lý khác nhau. Mỗi kiểu mạng có một độ dài tối đa gói tin có thể truyền (Maximum Transmission Unit-MTU) nếu thông tin nhận được từ mạng này dài hơn MTU của mạng kia, nó cần phải được chia nhỏ ra thành nhiều mảnh để truyền. Application Transport Internet Network Interface Internet Network Interface Network Interface Identical Datagram Identical Frame Identical Packet Identical Message Physical Net Host A Host B Application Transport Internet Physical Net Identical Datagram Identical Frame Gateway G Việc xử lý như vậy được gọi là sự phân mảnh. Để trực quan, ta so sánh với việc chuyên chở hàng bằng tàu hoả, mỗi toa tàu có thể chở nhiều hàng hơn một chiếc xe tải sẽ trở hàng trên đường, hàng hoá sẽ được chia vào nhiều xe tải. Ta có thể so sánh việc đường ray khác về vật lý với đường ôtô, Ethernet khác X.25 về vật lý, IP phải cắt gói tin Ethernet thành những gói thông tin nhỏ hơn để truyền qua mạng X.25. Định dạng của mỗi gói tin chia cắt giống như với từng bản tin. Từ thứ hai của header chứa thông tin sử dụng cho quá trình tập hợp lại bản tin bao gồm: gói tin thuộc bản tin nào, vị trí của nó trong toàn bộ dòng dữ liệu truyền, gói tin đã được kết nối chưa. Khi những gói tin truyền đến một gateway quá nhanh, chúng có thể bị loại bỏ và IP trả lại một thông báo lỗi (ICMP). Giao thức chuyển địa chỉ ARP (Address Resolution Protocol) và cơ giao thức chuyển ngược địa chỉ RARP (Reverse Address Resolution Protocol) Mọi máy tính cùng nằm trên một mạng có cùng một net id và các máy tính cùng trên một mạng vật lý có thể gửi frame vật lý trực tiếp cho nhau nên việc truyền thông tin giữa hai máy tính trong cùng một mạng vật lý không cần sử dụng gateway. Việc dẫn đường trực tiếp chỉ sử dụng phần địa chỉ máy host id trong địa chỉ IP. Trạm gửi chỉ việc kết khối dữ liệu vào frame, chuyển địa chỉ IP của trạm đích thành địa chỉ vật lý và gửi trực tiếp frame tới máy nhận. Một cơ chế sử dụng để chuyển địa chỉ IP thành địa chỉ vật lý là ARP (Address Resolusion Protocol). Khi hai máy tính cùng nối vào một mạng vật lý, chúng biết được địa chỉ IP của nhau nhưng để truyền thông giữa hai máy, chúng phải biết được địa chỉ vật lý của nhau. ARP giải quyết vấn đề chuyển từ địa chỉ IP 32 bit sang địa chỉ Ethernet 48 bit. Người ta sử dụng hai cơ chế chuyển địa chỉ là: Chuyển giao trực tiếp Chuyển giao gián tiếp Chuyển giao trực tiếp Địa chỉ vật lý là một hàm của địa chỉ IP ví dụ sử dụng trên mạng token ring proNET-10 là mạng cho phép đặt địa chỉ IP và địa chỉ vật lý thoải mái. Người ta có thể đặt địa chỉ IP là 192.5.48.3 và địa chỉ vật lý là 3, khi đó ta có PA=f(IA). Với PA là địa chỉ vật lý, IA là địa chỉ Internet và f là hàm chuyển đổi. Chuyển giao địa chỉ động Chuyển giao địa chỉ động được thực hiện bằng cách máy tính gửi thông tin gửi một thông báo tới toàn bộ các máy tính trên mạng, trong thông báo đó có chứa địa chỉ IP của máy tính nó cần liên lạc, mọi máy sẽ nhận được thông báo và máy nào thấy địa chỉ IP của mình thì trả lại một thông báo chứa địa chỉ vật lý, khi đó, hai máy tính có thể “nói chuyện” với nhau. Host A Host D Host C Host B ARP Request Host A Host D Host C Host B ARP Reply Ngoài ra, người ta còn sử dụng bảng chỉ đường để lưu trữ tạm thời các địa chỉ sử dụng mới nhất (Address Reslution Cache) để tăng tốc độ của việc chuyển giao địa chỉ. Gói tin ARP Một gói thông tin ARP là một Ethernet Frame được truyền trực tiếp từ máy này tới máy khác. Vì không phải sử dụng IP, gói tin này không có địa chỉ IP cũng như không cần được dẫn đường, nó phải được gửi broadcasts tới tất cả các máy trên mạng Ethernet (với địa chỉ FF-FF-FF-FF-FF-FF). Gói thông tin ARP được mô tả như sau: 0 31 Hardware Address Space Protocol Address Space Hardware Address Length Protocol Address Length Operation Code Source Hardware Address (Ethernet Address) (Internet Address) Source Protocol Address Target Hardware Address (Ethernet Address) Destination Address Source Address Type or Length (ARP) Data CRC Không giống phần lớn các giao thức khác, dữ liệu trong ARP không có một định dạng chuẩn cho header. Để ARP có thể làm việc với nhiều công nghệ khác nhau, người ta dùng một trường để chứa độ dài của những trường đi sau nó. Trong trường hợp máy trạm không có thiết bị nhớ phụ, và vì vậy nó không biết địa chỉ IP của chính mình khi khởi động, người ta sử dụng cơ chế chuyển ngược địa chỉ (Reverse Address Resolution Protocol - RARP) hoạt động tương tự ARP để giải quyết vấn đề này. Theo cơ chế đó, có một máy chủ chứa bảng địa chỉ IP của các máy trạm, khi máy trạm khởi động, nó gửi một request tới tất cả các máy và máy chủ gửi trả lại một gói tin chứa địa chỉ IP của máy trạm yêu cầu. Giao thức điều khiển truyền tin (Internet Control Message Protocol - ICMP) Việc dẫn đường qua các mạng sử dụng giao thức điều khiển truyền tin (Internet Control Message Protocol - ICMP) được định nghĩa trong RFC 792. ICMP sử dụng gói tin IP để chuyển thông báo của nó. ICMP gửi các thông báo làm các công việc: Điều khiển, thông báo lỗi và chức năng thông tin cho TCP/IP.. Thông thường ICMP được gửi khi một gói tin không thể đi tới đích, một gateway không còn đủ chỗ nhớ để nhận thêm gói tin hay một gateway hướng dẫn máy tính sử dụng gateway khác để truyền thông tin theo một con đường tối ưu hơn.. Gói tin ICMP Mặc dầu mỗi thông báo ICMP có một kiểu định dạng riêng của nó, song các thông báo đều chứa 3 trường đầu tiên giống nhau: TYPE: Định nghĩa thông báo đi sau. CODE: Cung cấp thông tin thêm về thông báo. CHECKSUM: Chứa checksum của thông báo. Type Field ICMP Message Type 0 Echo Reply 3 Destination Unreachable 4 Source Quench 5 Redirect (Change a router) 8 Echo Request 11 Time Exceeded for a Datagram 12 Parameter Problem on a Datagram 13 Timestamp Request 14 Timestamp Reply 15 Information Request 16 Information Reply 17 Address Mask Request 18 Address Mask Reply Điều khiển dòng dữ liệu Khi trạm nguồn gửi dữ liệu tới quá nhanh, trạm đích không kịp xử lý, trạm đích - hay một thiết bị dẫn đường gửi trả trạm nguồn một thông báo để nó tạm ngừng việc truyền thông tin. Thông báo lỗi Khi không tìm thấy trạm đích, một thông báo lỗi Destination Unreachable được gateway gửi trả lại trạm nguồn. Nếu một số hiệu cổng không phù hợp, trạm đích gửi thông báo lỗi lại cho trạm nguồn (cổng sẽ được trình bày trong phần giao thức tầng giao vận). Định hướng lại Một gateway gửi thông báo định hướng lại để trạm gửi sử dụng một gateway khác bởi vì gateway đó là một lựa chọn thích hợp hơn. Trường hợp này chỉ xảy ra khi trạm gửi nối vào mạng có trên 2 gateway. Ví dụ máy tính B muốn gửi thông tin đến máy C, nếu thông báo đó đến gateway 1, thì gateway 1 phải gửi thông báo redirect máy tính đó qua gateway 2. Ngược lại, mỗi máy tính trên mạng X.25 muốn gửi thông báo tới máy tính nằm trên mạng Token Ring thì việc này không cần thiết vì gateway 1 được nối trực tiếp với mạng Token Ring. X.25 Ethernet Gateway 1 Gateway 2 Host B Host C Host A Token Ring Kiểm tra trạm làm việc Khi một máy tính muốn kiểm tra một máy khác có tồn tại và đang hoạt động hay không, nó gửi một thông báo Echo Request. Khi trạm đích nhận được thông báo đó, nó gửi lại một Echo Reply. Lệnh ping của UNIX sử dụng các thông báo này. Thuật toán dẫn đường Internet là một mạng chuyển mạch gói và để chuyển các gói tin IP trên mạng, người ta sử dụng thuật toán dẫn đường. Thuật toán dẫn đường được thực hiện bởi tiến trình lựa chọn một đường để truyền gói tin và việc dẫn đường cho các gói tin được thực hiện bởi mọi máy tính trên đường đi của nó. Người ta chia việc dẫn đường trên mạng Internet ra làm 2 kiểu: Dẫn đường trực tiếp (direct routing): Dẫn đường trực tiếp từ máy tính này sang máy tính kia chỉ thực hiện được khi cả hai máy tính đều kết nối vào một mạng vật lý. Dẫn đường trực tiếp chỉ sử dụng phần hostid của địa chỉ Internet và sử dụng 2 giao thức chuyển địa chỉ ARP và RARP. Network 12.0.0.0 Network 15.0.0.0 15.0.0.1 Network 14.0.0.0 Gateway 5 Gateway 6 Gateway 7 Gateway 4 Gateway 8 Gateway 3 Gateway 2 Gateway 1 Network 13.0.0.0 Network 11.0.0.0 Network 10.0.0.0 Network 16.0.0.0 Port 3 23 Port1 Port 2 23 14.0.0.1 12.0.0.3 14.0.0.2 12.0.0.2 13.0.0.2 13.0.0.1 12.0.0.1 11.0.0.2 13.0.0.3 15.0.0.2 13.0.0.4 16.0.0.1 16.0.0.2 16.0.0.3 11.0.0.1 10.0.0.1 10.0.0.2 Tới máy trên mạng Dẫn đường tới Thông qua cổng 10.0.0.0 Direct 2 11.0.0.0 Direct 1 12.0.0.0 11.0.0.2 1 13.0.0.0 Direct 3 14.0.0.0 13.0.0.2 3 15.0.0.0 10.0.0.2 2 16.0.0.0 10.0.0.2 2 Bảng dẫn đường trên gateway 8 Dẫn đường gián tiếp (indirect routing): Khi trạm đích không cùng nằm trên một mạng với trạm gửi cần thông qua gateway để truyền đi. Trạm gửi phải đóng gói thông tin và gửi tới một gateway để chuyển tới đích. Dẫn đường gián tiếp chỉ sử dụng net id trong địa chỉ IP. Dữ liệu sẽ chuyển từ gateway này tới gateway khác đến khi nó có thể được truyền trực tiếp tới máy nhận. Thuật toán dẫn đường thường sử dụng bảng dẫn đường (Internet routing table - IP routing table) trên mỗi máy tính để chứa thông tin về các máy tính và cách đi đến chúng. Vì việc dẫn đường được thực hiện bởi cả host và gateway, mỗi thiết bị đều chứa một bảng dẫn đường. Bảng dẫn đường chứa thông tin về các mạng và gateway để kết nối đến đó. Người ta sử dụng một kỹ thuật để che dấu thông tin và giảm thiểu kích thước của bảng dẫn đường là sử dụng kỹ thuật dùng gateway ngầm định (default gateway). Nếu máy tính không tìm thấy địa chỉ đích trong bảng dẫn đường của nó thì gói tin được chuyển tới một thiết bị là default gateway. Kỹ thuật này đặc biệt thích hợp với trường hợp mạng máy tính được nối vào Internet thông qua một máy tính duy nhất. Thuật toán dẫn đường cụ thể cài đặt cho TCP/IP Mỗi nút mạng có một cơ sở dữ liệu mô tả trạng thái tổng thể của mạng (topo, độ trễ truyền dẫn..) gọi là bảng dẫn đường. Các thông tin này dùng cho việc tính tính các con đường tối ưu để chuyển các gói tin đến đích. Chúng được cập nhật thường xuyên sau một khoảng thời gian nào đó hoặc cập nhật mỗi khi có một thay đổi xảy ra. (Một số thuật toán sử dụng cho việc tìm đường đi tối ưu được trình bày trong phần phụ lục B) Khi có một gói thông tin đến một máy tính hay gateway, thuật toán dẫn đường chạy trên máy tính đó sẽ phân tích địa chỉ đích của gói thông tin và quyết định truyền nó theo đường tốt nhất tới đích (dựa vào thông tin trong bảng dẫn đường). Việc này bao gồm cả cởi gói, chọn đường, cập nhật bảng dẫn đường, đóng gói ... Tách địa chỉ mạng đích (IN) từ địa chỉ đích (ID) IN nối trực tiếp vào mạng ID là tên một máy tính trong bảng Có tồn tại default gateway IN là tên một mạng trong bảng - + - - - + + + Chuyển trực tiếp qua mạng Chuyển theo thông tin trong bảng Gửi thông báo lỗi Cập nhật bảng dẫn đường Kết thúc thuật toán dẫn đường Chuyển tới default gateway TẦNG GIAO VẬN Tầng giao thức ngay trên tầng Internet là Tầng giao vận (Host-to-Host Transport Layer hay thường gọi là Transport Layer). Hai giao thức quan trọng nhất của tầng này là Transmission Control Protocol (TCP) và User Datagram Protocol (UDP). TCP cung cấp dịch vụ chuyển giao thông tin có kết nối (connection-oriented), nó bao gồm cả việc kiểm tra và sửa lỗi. UDP cung cấp dịch vụ kém tin cậy hơn (unreliable) và không thiết lập liên kết trước (connectionless). Cả hai giao thức đều chuyển giao thông tin giữa tầng ứng dụng và tầng Internet. Chương trình ứng dụng có thể lựa chọn dịch vụ nào thích hợp với nó. Giao thức không kết nối (User Datagram Protocol - UDP) UDP cho phép chương trình ứng dụng truy cập trực tiếp đến gói tin của dịch vụ chuyển giao giống như dịch vụ mà giao thức IP cung cấp. Nó cho phép ứng dụng trao đổi thông tin qua mạng với ít thông tin điều khiển nhất. UDP là giao thức không kết nối, kém tin cậy vì nó không có cơ chế kiểm tra tính đúng đắn của dữ liệu truyền. Gói thông tin UDP 0 31 Source port Destination port Message length checksum Data Destination Address Source Address Type field IP header UDP data CRC Mỗi gói thông tin UDP gọi là một Datagram được phân làm 2 phần header và data trong đó header chứa thông tin về địa chỉ cổng nguồn, địa chỉ cổng đích, độ dài của gói và checksum Phân kênh, hợp kênh và Ports Phân kênh, hợp kênh chính là việc lựa chọn những tiến trình ứng dụng trong một số lớn các tiến trình sử dụng giao thức UDP, và cần chọn ra những ứng dụng tương ứng với gói thông tin chuyển đến. Port 1 Port 2 Port 3 UDP: Demultiplexing Based on Port IP Layer UDP Datagram arrives Việc này được giải quyết bằng cơ chế cổng (Port mechanism) cơ chế này gắn mỗi ứng dụng với một con số gọi là số hiệu cổng (Port number) và mỗi gói thông tin mà ứng dụng gửi đi đều mang một trường SOURCE PORT. Tại nơi nhận, dựa vào thông tin trong trường DESTINATION PORT mà gói tin đó được truyền đến cổng tương ứng với ứng dụng. Ví dụ mọi bản TCP/IP đều có dịch vụ FTP (File Transfer Protocol) gắn với cổng 21 và TFTP (Trivial File Transfer Protocol) gắn với cổng 69 của UDP. Việc sử dụng các port number cũng có nhiều cách Dùng những cổng dành riêng cho từng ứng dụng đã được đăng ký trước (Well-known port assignment). Một port number sẽ được sinh ra khi có một ứng dụng đòi hỏi (Dynamic binding). Cách tiếp cận kết hợp các kiểu trên (Hybird) vừa sử dụng Well-known port assignment cho một số port number vừa có thể định nghĩa các port number khác khi cần thiết. Các port number thông dụng của UDP thường được dành chỗ từ 1 tới 255. Một số hệ điều hành (như 4.3 BSD UNIX) còn dành chỗ tới port number 1023, các port number có thể sử dụng được là từ số 1024 trở lên. Một số cổng UDP dành riêng 0 Reserved 7 Echo 9 Discard 11 Active users 13 Daytime 15 Who is up or NETSTAT 17 Quote of the day 19 Character generator 37 Time 42 Name server 43 Who is 53 Domain name server 67 Boottrap protocol server 68 Boottrap protocol client 69 Trivial File Tranfer Protocol ( TFTP) 111 Sun RPC 123 Network time protocol 161 SNMP net monitor 162 SNMP traps 512 UNIX comsat 513 UNIX rwho process 514 System log 525 Timed Có một số lý do để người lập trình ứng dụng lựa chọn UDP như một dịch vụ giao vận: Nếu một số lượng lớn các gói tin nhỏ được truyền, thông tin cho việc kết nối và sửa lỗi có thể lớn hơn nhiều so với thông tin cần truyền. Trong trường hợp này, UDP là giải pháp hiệu quả nhất. Những ứng dụng kiểu "Query-Response" cũng rất phù hợp với UDP, câu trả lời có thể dùng làm sự xác nhận của một câu hỏi. Nếu không nhận được sự trả lời sau một thời gian nào đó, ứng dụng chỉ cần gửi đi một câu hỏi khác. Một số ứng dụng đã tự nó cung cấp công nghệ riêng để chuyển giao thông tin tin cậy, và không đòi hỏi dịch vụ này của transport layer. Giao thức điều khiển truyền tin (Transmission Control Protocol - TCP) Một số ứng dụng đòi hỏi giao thức giao vận cung cấp dịch vụ chuyển giao thông tin tin cậy sử dụng TCP bởi nó cung cấp dịch vụ kiểm tra đúng đắn và dữ liệu được truyền với một sự phối hợp thích hợp. Một số đặc điểm của dịch vụ tin cậy mà TCP cung cấp là: Hướng dòng (Stream Orientation): TCP coi dữ liệu nó gửi đi là một dòng byte không phải là gói tin. Do đó, TCP đảm bảo số thứ tự của các byte gửi nhận. Trường Sequence number và Acknowledgment number trong header của TCP giữ dấu của các byte trong toàn bộ dòng dữ liệu truyền. TCP chuẩn không bắt hệ thống phải sử dụng một số đặc biệt nào để đánh số dòng byte, mỗi hệ thống tự chọn một số mà nó sẽ dùng làm điểm bắt đầu. Mỗi trạm cuối phải biết số thứ tự mà trạm kia dùng. Chúng phải trao đổi một segment để đồng bộ hệ thống số sẽ được sử dụng (Synchronize sequenence number - SYN) trong quá trình bắt tay. Trường Sequent number trong SYN segment chứa số bắt đầu (ISN) của dòng số đánh thứ tự, số này được chọn ngẫu nhiên. Mỗi byte trong dữ liệu được giữ dấu bởi số ISN do đó byte đầu tiên của dữ liệu mang số ISN+1. Sequent number chứa vị trí của dòng byte trong gói tin nếu ISN=0 và 4000 byte đã được chuyển giao thì con số tiếp theo sẽ là 4001. Chuyển giao bộ đệm (Buffered Transfer): Để giảm số lượng truyền thông, giao thức cố gắng sử dụng số lượng tối thiểu các segment để truyền tải thông tin, do vậy, giao thức sử dụng tối đa độ dài có thể của segment. Trường window trong TCP header cho biết số byte tối đa mà trạm đích có thể nhận được, nếu trạm đích có khả năng chấp nhận 6000 byte thì trường window sẽ là 6000, trạm gửi có thể điều chỉnh lại dữ liệu cho phù hợp. Nếu trường window mang giá trị 0 có nghĩa là trạm gửi phải chờ tới khi nhận được một số khác 0. Kết nối hai chiều (Full Duplex Connection): TCP/IP cung cấp kết nối cho cả hai đầu của liên kết. Điều này có nghĩa là tầng phía dưới cung cấp khả năng gửi trả thông báo từ trạm đích trở lại trạm nguồn. TCP là giao thức hướng kết nối. Nó thiết lập quan hệ logic giữa 2 trạm tham gia liên kết. Thông tin điều khiển gọi là handshake được trao đổi giữa 2 trạm để thiết lập hội thoại trước khi thông tin được truyền. TCP chỉ dẫn chương trình điều khiển của một segment bằng cách đặt một bit dành riêng của cờ tại word thứ 4 của segment header. Kiều bắt tay của TCP gọi là three way handshake bởi vì 3 segment được trao đổi. Trạm A bắt đầu kết nối bằng cách gửi một segment với bit Synchronize sequenence number (SYN). Segment này báo cho trạm B thứ tự trạm A sẽ sử dụng cho những segment của nó gửi, số thứ tự này đảm bảo cho dữ liệu một trật tự thích hợp. Trạm B đáp lại trạm B với một segment với bit Acknowledgment (ACK) và SYN được đặt. Segment của B thông báo rằng nó đã nhận được thông báo của A và báo cho A biết số thứ tự mà nó sẽ sử dụng. Cuối cùng, A gửi một segment báo cho B nó đã nhận được thông báo và truyền gói dữ liệu đầu tiên. Chú ý rằng, gói tin thứ nhất chứa bit SYN và các gói tiếp theo chứa bit ACK. Sau khi trao đổi, trạm A xác định hiển nhiên trạm đích tồn tại và đã sẵn sàng nhận dữ liệu. Ngay sau khi kết nối được thiết lập, dữ liệu có thể truyền. Khi kết thúc hợp tác truyền giao dữ liệu, chúng sẽ trao đổi three way hanshake chứa bit thông báo hết dữ liệu truyền No more data from sender gọi là (FIN) để kết thúc kết nối. Đó là sự trao đổi giữa hai trạm cung cấp một kết nối logic giữa hai hệ thống. TCP cung cấp dịch vụ tin cậy với một cơ chế gọi là "Positive Ackowledgment with Retransmission" (PAR). Đơn giản là trạm nguồn tiếp tục gửi thông tin đi cho tới khi nó nhận được thông báo dữ liệu đã được nhận chính xác tại trạm đích. Đơn vị thông tin chuyển giao giữa các ứng dụng gọi là segment, mỗi segment chứa checksum để đảm bảo rằng segment không bị phá huỷ trên đường truyền, nếu segment không bị phá huỷ, trạm nhận gửi thông báo xác nhận lại trạm gửi, nếu segment bị phá huỷ, trạm nhận huỷ bỏ nó và sau một thời gian nào đó, trạm gửi sẽ gửi lại gói tin mà nó không nhận được thông báo xác nhận. Thông tin trên mạng Tại trạm gửi Tại trạm nhận Receive ACK 1 Receive ACK 2 Send Paket 1 Send ACK 1 Send ACK 2 Send Paket 2 Receive Paket 1 Receive Paket 2 Gói tin TCP 0 4 8 12 20 24 28 31 Source Port Desstination Port Sequence Number Acknowledgment Number Offset Reserved Flags Window Checksum Urgent Pointer Opions Padding Data Destination Address Source Address Type field IP header TCP Segment CRC Gói tin TCP chứa trong một Ethernet frame Source Port Cổng nguồn Destination Port Cổng đích Sequence Number Số thứ tự của gói tin Offset Số thứ tự của byte đầu tiên Reserved Để dành Flags Cờ chỉ dẫn Window Số byte tối đa trạm đích có thể nhận Checksum Checksum kiểm tra tính toàn vẹn Urgent Pointer Độ dài dữ liệu khẩn đi sau Option Tuỳ chọn Padding Phần điền thêm vào các con số 0 Data Dữ liệu bắt đầu tại đây Cổng, kết nối và điểm kết nối TCP cũng dùng các port number để gán cho các ứng dụng và cho phép truy cập tới các ứng dụng này thông qua các port number đó. Cổng TCP dành riêng 0 Reserved 1 TCP multiplexor 5 RJE 7 Echo 9 Discard 11 Active users 13 Daytime 15 Network status program 17 Quote of the day 19 Character generator 20 FTP - data connection 21 FTP - command connection 23 TELNET 25 Simple mail transport protocol 37 Time 42 Name server 43 Who is 53 Domain name server 77 Any private RJE server 79 Finger - find a active user 93 Device control protocol 95 SUPDUP protocol 101 Network info.center host name server 102 OSI - transport service access point 103 X.400 mail service 104 X.400 mail sending 111 Sun microsystems remote procedural call 113 Authentication service 117 UNIX to UNIX copy(UUCP)path service 119 Usenet news tranfer protocol 129 Password generater protocol 139 NetBIOS session service 160-223 Reserved Tuy cũng dùng các port number để định danh cho các ứng dụng nhưng một cổng không đủ để định danh cho một thực thể duy nhất trên mạng, TCP là một giao thức hướng kết nối do đó nó cần phải định danh cho cả hai đầu của liên kết. TCP đưa ra định nghĩa endpoint là một cặp số nguyên (host, port) trong đó, host là địa chỉ IP của một máy tính còn port là port number mà máy tính đó sử dụng. Ví dụ: (190.2.2.1,23) định nghĩa cổng 23 cho máy tính có địa chỉ IP là 190.2.2.1. Chúng ta sẽ quay lại với khái niệm endpoint trong chương sau. TẦNG ỨNG DỤNG CỦA TCP/IP Phần lớn người sử dụng chỉ quan tâm tới các dịch vụ thông tin được cung cấp trên Internet. Các ứng dụng có sớm nhất của Internet là Telnet, FTP, SMTP, DNS ngoài ra ngày nay có hàng ngàn ứng dụng khác đang phát triển và ngày một nhiều. Sau đây chúng ta tìm hiểu và phân tích một số ứng dụng của Internet. Dịch vụ tên miền (Domain Name Service - DNS) Việc định vị các máy tính trên mạng bằng các địa chỉ IP có nhiều lợi điểm như đã trình bày ở phần trên, tuy nhiên với người sử dụng, việc nhớ các con số đó là một việc tẻ nhạt khó chịu. Hơn nữa, địa chỉ IP không mang thông tin về địa lý, tổ chức hay người dùng. Vì thế, người ta xây dựng hệ thống đặt tên gọi là Domain Name Server để cung cấp cho người dùng cách đặt tên cho các máy tính với cách đặt tên thông thường quen thuộc. Một domainame thông thường có dạng: Tên_người_dùng@Tên_miền với tên miền được phân làm các cấp nối với nhau bởi dấu “.”. Tên miền được NIC cung cấp. Tên miền cao nhất là cấp quốc gia được đặt bởi 2 chữ cái: ar: Argentina at: Austria au: Australia be: Belgium ca: Canada cn: China de: Germany es: Spain fr: France gb: Great britain hk: Honkong il: Israel it: Italy jp: Japan kr: Korea lu: Luxembourg my: Malaysia no: Norway vn: Việt nam ....... nếu không có gì thì được hiểu như thuộc USA Mức tiếp theo chỉ lãnh vực hoạt động: edu: giáo dục gov: chính phủ com: thương mại mil: quân sự org: các tổ chức phi lợi nhuận net: các tổ chức phát triển mạng Sau đó có thể là tên công ty và tên máy tính. vn fpt vdc com edu gov mil org nic hut vnuh fit Phân cấp domain name Một máy tính có thể có nhiều tên nhưng trên mạng, mỗi tên là duy nhất. Việc ánh xạ địa chỉ IP vào tên miền được thực hiện bởi các Name Server cài đặt tại máy Server và Name Resolver cài đặt trên máy trạm. Đăng nhập từ xa (Telnet) Telnet cho phép người sử dụng từ một trạm làm việc của mình có thể đăng nhập (login) vào một trạm xa như là một đầu cuối (teminal) nối trực tiếp với trạm xa đó. TCP/IP Internet User’s Terminal Hệ điều hành Telnet Client Hệ điều hành Telnet Server Server gửi thông báo tới máy tính thực hiện pseudo terminal Server nhận thông báo từ client Client gửi thông báo đến server Client đọc từ trạm cuối Để đăng nhập vào một máy tính ta đánh lệnh: telnet [domain name | IP address] Thư điện tử (Electronic Mail) Đây là một dịch vụ phổ biến nhất trên Internet trước khi World Wide Web ra đời, thông qua dịch vụ này, người sử dụng trên mạng có thể trao đổi các thông báo cho nhau trên phạm vi thế giới. Đây là một dịch vụ mà hầu hết các mạng diên rộng đều cài đặt và cũng là dịch vụ cơ bản nhất của một mạng khi gia nhập Internet. Nhiều người sử dụng máy tính tham gia mạng chỉ dùng duy nhất dịch vụ này. Dịch vụ này sử dụng giao thức SMTP (Simple Mail Transfer Protocol) trong họ giao thức TCP/IP. Thư điện tử là phương thức trao đổi thông tin nhanh chóng và thuận tiện. Người sử dụng có thể trao đổi những bản tin ngắn hay dài chỉ bằng một phương thức duy nhất. Rất nhiều người sử dụng thường truyền tập tin thông qua thư điện tử chứ không phải bằng các chương trình truyền tập tin thông thường. Đặc điểm của dịch vụ thư điện tử là không tức thời (off-line) - tất cả các yêu cầu gửi đi không đòi hỏi phải được xử lý ngay lập tức. Khi người sử dụng gửi một bức thư, hệ thống sẽ chuyển thư này vào một vùng riêng (gọi là spool) cùng với các thông tin về người gửi, người nhận, địa chỉ máy nhận... Hệ thống sẽ chuyển thư đi bằng một chương trình chạy nền (background). Chương trình gửi thư này sẽ xác định địa chỉ IP máy cần gửi tới, tạo một liên kết với máy đó. Nếu liên kết thành công, chương trình gửi thư sẽ chuyển thư tới vùng spool của máy nhận. Nếu không thể kết nối với máy nhận thì chương trình gửi thư sẽ ghi lại những thư chưa được chuyển và sau đó sẽ thử gửi lại một lần nó hoạt động. Khi chương trình gửi thư thấy một thư không gửi được sau một thời gian quá lâu (ví dụ 3 ngày) thì nó sẽ trả lại bức thư này cho người gửi. Mọi thư trên Internet đều tuân theo một dạng chuẩn. Bao gồm phần header chứa địa chỉ người gửi, địa chỉ người nhận dạng domain name và sau đó là phần nội dung thư. Cả hai phần đều là các ký tự ASCII chuẩn. Thư chuyển trên mạng và đến được đích là nhờ vào thông tin chứa trong phần header của thư. Ban đầu thư điện tử chỉ nhằm mục đích trao đổi các thông báo (thực chất là các tệp văn bản) giữa người sử dụng với nhau. Dần dần người ta đã phát triển thêm các biến thể trên nó để phục vụ người sử dụng tốt hơn hoặc dùng cho những mục đích riêng biệt. Đó là các dịch vụ thông tin dựa trên thư điện tử. Thực chất của các dịch vụ này là sử dụng thư có nội dung tuân theo một cú pháp đặc biệt thể hiện yêu cầu của người sử dụng. Các thư này được gửi tới một người sử dụng đặc biệt là các server, các server này phân tích nội dung thư, thực hiện các yêu cầu rồi gửi trả lại kết quả cho người yêu cầu cũng dưới dạng thư điện tử. Có hai server phổ biến trong hoạt động này là name server cung cấp dịch vụ tra cứu địa chỉ trên mạng archive server cho phép người sử dụng tìm kiếm và lấy về những tệp tin dùng chung. Giao thức truyền tệp (File Transfer Protocol - FTP) Đây là một phương pháp sao chép tệp từ một máy tính ở xa về máy tính của người dùng ta có thể ngồi tại máy tính của mình truyền hoặc lấy file trên một máy chủ nào đó Ví dụ lấy tệp nettcp.c trên máy chủ sco5 về máy tính của mình: $ ftp sco5 Connected to sco5. 220- 220 sco5.cse.com.vn FTP server (Version 2.1WU(1)) ready. Name(none): binhnn 331 Password required for binhnn. Password: 230 User binhnn logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> get nettcp.c local: nettcp.c remote: nettcp.c 200 PORT command successful. 150 Opening BINARY mode data connection for nettcp.c (46 bytes). 226 Transfer complete. 46 bytes received in 0 seconds (0.04 Kbytes/s) ftp> bye 221 Goodbye. $ Nhóm tin (News groups) News groups là những nhóm người dùng thảo luận trực tuyến. Mỗi người gửi những bài bình luận về một vấn đề nào đó, tạo thành một nhóm thảo luận, những nhóm tin cho phép người dùng tiếp xúc với hàng triệu người trên thế giới có cùng mối quan tâm. Internet có gần 20.000 nhóm tin như vậy Tìm kiếm tệp (Archie) Do trên Internet hiện nay có khoảng trên 3 triệu tệp và hàng nghìn ftp server và số lượng đó ngày càng tăng nhanh. Archie là một dịch vụ giúp đỡ tìm kiếm các tệp tin khác nhau theo một số các thông tin nào đó. Thông thường dịch vụ này cho phép tìm kiếm tệp theo tên hoặc một xâu con của tên tệp. Nó chưa cho phép tìm kiếm theo chủ đề hay nội dung. Tuy vậy nó trợ giúp cho ftp rất nhiều để có thể lấy tệp dễ dàng hơn. Tra cứu thông tin theo thực đơn (Gopher) Sử dụng giao thức Gopher protocol để tìm kiếm tài nguyên của mạng. Dịch vụ này cho phép tìm kiếm và tra cứu thông tin theo chủ đề của thông tin. Việc tra cứu này được thực hiện qua hệ thống thực đơn thân thiện hơn với người sử dụng. Nó có ưu điểm là có thể tra cứu trên nhiều máy chủ cùng một lúc. Hạn chế của Gopher là hiển thị thông tin quá tóm tắt, các chức năng cung cấp trong thực đơn còn chưa nhiều. Tìm kiếm thông tin theo chỉ số (WAIS) Khác với Gopher tìm kiếm thông tin qua các đề mục định sẵn, WAIS cho phép nguời dùng tìm kiếm các tệp dữ liệu có chứa các xâu định trước. Ngoài các ứng dụng client, server WAIS còn có một phần đặc biệt là indexer làm nhiệm vụ cập nhật các tài liệu mới, sắp xếp chúng dưới dạng thích hợp để thuận tiện cho việc tìm kiếm. WAIS server khi nhận được câu hỏi của client sẽ tìm kiếm trong cơ sở dữ liệu tạo ra bởi indexer và trả lời cho client. Siêu văn bản (WWW) Người ta nói rằng WWW là linh hồn của Internet vì nó cung cấp cho người dùng một giao diện lý tưởng khi làm việc với Internet. Người dùng máy tính không cần có hiểu biết sâu về máy tính cũng có thể sử dụng nó như một công cụ đắc lực để ngồi tại nhà xem toàn bộ thế giới với số lượng thông tin đồ sộ được cập nhật từng giây. WWW dựa trên ý tưởng siêu văn bản Hypertext trong đó chứa các Hyperlink đến các văn bản khác và như vậy, ta có thể mở rộng mãi mãi trang văn bản của mình. WWW ngày nay được mở rộng với khái niệm siêu phương tiện Hypermedia bao gồm cả hình ảnh, âm thanh.. Ngày nay, phần lớn ứng dụng trên Internet từ giải trí đến truy cập cơ sở dữ liệu đều được thực hiện trên WWW. CHƯƠNG IV. XÂY DỰNG ỨNG DỤNG TRUYỀN TỆP GIAO DIỆN LẬP TRÌNH Giao diện lập trình Bộ giao thức TCP/IP đã định nghĩa đầy đủ các giao thức truyền thông để các máy tính trên mạng có thể giao tiếp với nhau, che đi cấu trúc vật lý của mạng. Tuy nhiên, để xây dựng các ứng dụng thì sử dụng TCP/IP là không đủ, bởi vì người lập trình sẽ phải tự mình xây dựng những thủ tục giải quyết từng sự kiện, một giao diện (Application Program Interface) lập trình là cần thiết để cung cấp cho người lập trình một cách tiếp cận đơn giản, dễ hiểu hơn. Tiến trình ứng dụng Thư viện Giao diện với nhân hệ điều hành Giao diện với phần cứng Phần cứng UNIX cung cấp cho người lập trình hai giao diện chính cho lập trình C: Sockets lần đầu tiên xuất hiện trong bản BSD UNIX năm 1982 và nhanh chóng phát triển rộng rãi trong một khoảng thời gian ngắn. Được phát triển thêm vào năm 1990 để hỗ trợ giao thức ISO. Socket được gắn với khả năng truyền thông dễ dàng giữa các tiến trình cả trên mạng và trên một máy tính. Mục tiêu của nó là che dấu càng nhiều càng tốt những gì xảy ra ở tầng truyền thông phía dưới. TLI (Transport Layer Interface) Phát triển đầu tiên cho UNIX System V 3.0 có những hàm và thủ tục tương đương với Socket nhưng mô hình phức tạp hơn để đạt được tính mềm dẻo hơn. Network I/O và file I/O Hệ điều hành UNIX, có 6 lời gọi hệ thống vào ra file đó là: open: Mở file. creat: Tạo file. close: Đóng file. read: Đọc từ file. write: Ghi file. lseek: Chuyển con trỏ file. Và UNIX coi mỗi thiết bị đều như một file, có thể được truy cập như một file. Tuy nhiên việc vào ra trên mạng với giao diện lập trình ứng dụng phức tạp hơn vì: Mô hình Client-Server là không đối xứng, ta phải xác định chương trình nào đóng vai trò Client, chương trình nào đóng vai trò Server. Một đối thoại trên mạng có thể là hướng kết nối hoặc không kết nối. Một tiến trình con có thể sử dụng file descriptor của chương trình cha truyền cho để làm việc với file mà không cần biết đến tên file thực sự. Các ứng dụng trên mạng cần biết được đầu kia của kết nối để chắc chắn rằng nó được phép đòi hỏi dịch vụ. Trong phần nói về giao thức TCP/IP chúng ta đã biết để thiết lập kết nối cần nhiều tham số hơn đối với file I/O, đó là giao thức (protocol), địa chỉ IP đích (Destination IP Address), địa chỉ IP nguồn (Source IP Address), số hiệu cổng đích (Destination port number), số hiệu cổng nguồn (Source port number). Giao diện mạng phải hỗ trợ nhiều giao thức truyền thông ví dụ các chuẩn của tầng cao với tầng thấp hơn. Làm việc với Socket Như đã giới thiệu ở trên, Socket được gắn với khả năng truyền thông dễ dàng giữa các tiến trình cả trên mạng và trên một máy tính. Và nó là che dấu càng nhiều càng tốt những gì xảy ra ở tầng truyền thông phía dưới. Chúng ta sẽ lựa chọn Socket để phát triển ứng dụng của mình trên mạng dựa trên mô hình Client-Server. Application Socket Library User Kernel Stream Head SHOCKMOD Transport Provider TPI Socket Nói chung cơ chế socket tương tự với cơ chế truy nhập tệp trong UNIX. Khi cần thiết tiến trình có thể tạo ra một socket, hệ thống trả lại kết quả là một socket descriptor. Sự khác biệt giữa file descriptor và socket descriptor ở chỗ file descriptor được gắn liền với một tệp hay thiết bị cố định còn socket descriptor không bị gắn với một địa chỉ nào. Chương trình có thể cung cấp địa chỉ tại mỗi lần truy nhập tới socket hay cũng có thể gắn socket descriptor với một địa chỉ nhất định. Do nó tương thích với cơ chế truy nhập tệp, nên vẫn có thể dùng các lệnh thông dụng như read, write đối với socket. Một Socket được dùng như một endpoint. Mỗi Socket gắn với một nhóm SHOCK_STREAM sử dụng cho dịch vụ hướng kết nối . SHOCK_DGRAM sử dụng cho dịch vụ không kết nối. SHOCK_RAW cung cấp truy cập trực tiếp vào giao thức để xây dựng công cụ quản trị ở mức user. SHOCK_SEQPACKET Giống như SHOCK_STREAM nhưng cung cấp biên giới các mesage. SHOCK_RDM Cung cấp dịch vụ không kết nối đơn giản. Địa chỉ Socket Có hai loại địa chỉ được gán với một socket: Địa chỉ local và địa chỉ TCP/IP. Địa chỉ này được khai báo là những bản ghi và được dùng làm tham số cho những lệnh hệ thống và thủ tục truy nhập socket. Địa chỉ local là địa chỉ để xác định socket trong nội bộ máy. Cấu trúc địa chỉ cục bộ được mô tả như sau Address family Address bytes 0-1 Address bytes 2-5 Address bytes 6-9 Address bytes 10-13 struct sock_addr { u_short sa_family; /* address family */ char sa_data[14]; /* up to 14 bytes address */ }; Trường address family sẽ quyết định cấu trúc địa chỉ của trường Address bytes phía sau vì socket hỗ trợ cho nhiều giao thức khác nhau nên ứng với mỗi giao thức trường địa chỉ sẽ có cấu trúc khác nhau. Protocol family Description PF_UNSPEC Unspecified family PF_UNIX UNIX domain PF_INET Internet protocols PF_IMPLINK Arpanet IMP address PF_PUP Old Xerox protocols PF_CHAOS M.I.T. CHAOS protocols PF_NS Xerox Network system protocols PF_NBS NBS protocols PF_ECMA European Computer Manual PF_DATAKIT DATAKIT protocols PF_CCITT CCITT protocols PF_SNA IBM System Network Architeture PF_DECnet DECnet protocols PF_DLI DEC direct data link interface PF_LAT LAN terminal interface PF_HYLINK NSC Hyperchannel PF_APPLETALK Apple Talk protocols PF_NIT Network interface tap PF_802 IEEE 802.2 PF_OSI OSI protocols PF_X25 CCITT X.25 PF_OSINET OSI protocols PF_GOSIP U.S.government OSI protocols Protocol Families Địa chỉ TCP/IP được khai báo với tên sockaddr_in. Nó chứa số hiệu port và địa chỉ IP 32-bit. Address family Protocol port IP Address Unused (0) Unused (0) struct in_addr /* 32-bit IP Addresss */ { u_long s_addr; /* network byte order */ }; struct sockaddr_in { short sin_family; /* = AF_INET */ u_short sin_port; /* 16-bit port number */ struct in_addr sin_addr; /* 32-bit IP Addresss */ char sa_zero[14]; /*unused*/ }; Một số lời gọi tạo lập socket Lời gọi socket(): Muốn làm việc với socket thì việc đầu tiên là phải tạo socket đó. Để làm việc đó cần gọi lệnh socket() với các tham số cần thiết. Hàm trả lại một socket descriptor nếu thành công, -1 nếu có lỗi. int socket (int family, int type, int protcol) Tham số family xác định họ giao thức được sử dụng với socket như đã nói đến ở trện. AF_UNIX Giao thức nội bộ UNIX AF_INER Giao thức Internet(TCP/IP) AF_NS Giao thức Xeror NS AF_IMPLINK Giao thức lớp IMP Tham số type xác định kiểu của liên kết. Những kiểu có thể sử dụng là dạng stream có độ tin cậy cao (SOCK_STREAM), dạng datagram (SOCK_DGRAM) hay dạng thô (SOCK_RAW) cho phép truy nhập tới mức thấp của mạng. Ví dụ: AF_UNIX AF_INET AF_NS SOCK_STREAM Có TCP Có SOCK_DGRAM Có UDP Có SOCK_RAW IP Có Do đó tham số thứ ba xác định chính xác giao thức nào được sử dụng cho socket. Tuy vậy trong rất nhiều ứng dụng tham số này không được sử dụng. Lời gọi bind() Khi mới được tạo ra, socket không được gắn với bất cứ địa chỉ nào. Nói riêng với TCP/IP là nó chưa được gán với số hiệu port của tiến trình gửi, số hiệu port của tiến trình nhận cũng như địa chỉ IP. Nhiều chương trình không quan tâm đến số hiệu port và địa chỉ của nó, và dành cho phần mềm giao thức tự gán. Tuy nhiên các chương trình khác vẫn cần biết đến địa chỉ của mình. Lệnh bind gán thiết lập một địa chỉ local cho socket và đăng ký nó với hệ thống. int bind(int sock, struct sockaddr * localaddr, int addrlen) Lời gọi bind() được sử dụng trong các trường hợp sau: Chương trình server đăng ký một địa chỉ thông dụng với hệ thống. Mọi dữ liệu đến địa chỉ này sẽ được chuyển cho nó. Một chương trình client đăng ký một địa chỉ đặc biệt. Một chương trình client có kiểu không kết nối (connectionless) muốn kiểm tra xem địa chỉ của nó có hợp lệ hay không. Lời gọi connect Để thiết lập được một liên kết giữa client với server, tiến trình cần phải gọi lệnh connect. int connect(int sock, struct sockaddr * seraddr, int addrlen) Tham số lệnh này tương tự đối với lệnh bind() nhưng seraddr trỏ tới địa chỉ của server (tức là đầu kia của liên kết). Đối với các giao thức có liên kết (connection-oriented), connect() sẽ tạo lập một liên kết thực sự giữa hai máy. Các thông tin được trao đổi nhằm thống nhất mọi tham số liên quan. Nó sẽ chưa thoát ra nếu như chưa thiết lập được liên kết hoặc chưa nhận được thông báo lỗi. Đối với các giao thức không liên kết (connectionless) lệnh connect() đơn giản chỉ cất giữ địa chỉ server (biến seraddr) để tiến trình sau này sử dụng khi trao đổi dữ liệu. Với giao thức này việc gọi lệnh connect() có thể bỏ qua nhưng việc sử dụng nó sẽ tạo ra sự thuận tiện đối với người lập trình. Sau khi đăng ký địa chỉ với hệ thống thì sẽ không cần phải xác định lại địa chỉ mỗi khi gửi đi các datagram. Người sử dụng có thể dùng các lệnh read, write, recv, send tương tự như các socket có kết nối. Ngoài ra, connect còn kiểm tra xem có thực sự một tiến trình nào nhận thông tin mình sẽ gửi hay không. Nếu địa chỉ gửi không tồn tại connect sẽ trả lại lỗi cho tiến trình gọi. Việc này làm cho tiến trình có thể xử lý lỗi tốt hơn so với các giao thức không kết nối (ví dụ UDP). Một datagram có thể chứa một địa chỉ sai và hoàn toàn không có người nhận. Lời gọi listen() Ta sẽ xem xét một tiến trình server, tiến trình này đầu tiên tạo ra một socket, gắn nó với một port thông dụng rồi chờ cho đến khi có một yêu cầu được gửi tới. Nếu nó là một liên kết kết nối thực sự, hoặc nó phải xử lý quá lâu đối với mỗi yêu cầu, sẽ xảy ra trường hợp là một yêu cầu mới sẽ tới trong khi yêu cầu cũ chưa được xử lý xong. Để tránh việc các yêu cầu mới bị từ chối, server phải khai báo với phần mềm của giao thức tạo ra cho nó một hàng đợi các yêu cầu. Lệnh listen() sẽ khai báo hàng đợi này. int listen(int sock, int qlen) Tham số sock là socket descriptor được dùng bởi server. Tham số qlen quyết định chiều dài hàng đợi các yêu cầu. Giá trị tối đa của tham số này là 5. Khi hàng đợi này đã đầy, hệ thống sẽ không chấp nhận thêm một yêu cầu nào khác. Mọi yêu cầu tới sau đó sẽ bị huỷ bỏ. listen() chỉ áp dụng với socket kiểu STREAM. Lời gọi accept() Sau khi tiến trình server gọi các lệnh socket(), bind(), listen() để tạo ra một socket, gắn nó với một port thông dụng, xác định chiều dài hàng đợi, server sẽ gọi lệnh accept() để tạo ra một kết nối hoàn thiện. int accept(int sock, struct sockaddr * addr, int addrlen) Tham số addr dùng để trả lại địa chỉ của tiến trình gửi yêu cầu (client). accept() sẽ lấy yêu cầu đầu tiên trong hàng đợi và tạo ra một socket mới có cùng thuộc tính với sock. Nếu trong hàng đợi không có một yêu cầu nào thì nó sẽ chờ cho đến khi có một yêu cầu được gửi tới. Socket sock vẫn được giữ nguyên do vậy server vẫn tiếp tục chấp nhận các yêu cầu khác gửi tới socket này. Với cách tiếp cận tương tác, server tự xử lý giải quyết yêu cầu sau đó đóng socket này lại và quay về xử lý tiếp các yêu cầu sau đó. Còn đối với phương pháp đồng thời, sau khi lệnh accept() trả lại kết quả server sẽ sinh ra một tiến trình con để giải quyết yêu cầu. Tiến trình con sẽ nhận được một bản sao của socket mới. Trong khi đó tiến trình server sẽ lập tức đóng socket mới của nó sau khi tạo ra tiến trình con và trở lại gọi accept() để nhận một yêu cầu mới. Lời gọi close() Khi một tiến trình thôi không sử dụng socket thì nó gọi lệnh close() int close(int sock) sock là socket cần huỷ bỏ. Khi một tiến trình kết thúc với mọi lý do, hệ thống sẽ đóng tất cả các socket còn mở. Đối với các giao thức tin cậy, mặc dù socket đã bị đóng nhưng kernel vẫn cố gắng gửi đi các dữ liệu còn lại trong hàng đợi dữ liệu. Một số lời gọi gửi dữ liệu qua socket Có 5 lời gọi được dùng để gửi dữ liệu qua socket. Các lệnh write, writev, send làm việc với các socket đã kết nối vì chúng không cho phép khai báo địa chỉ người nhận. Lời gọi send() Lời gọi send có 4 tham số : int send(int sock, char * buff, int len, int flag) sock chỉ định socket được sử dụng, buff trỏ tới vùng dữ liệu được gửi đi, len xác định số byte trong buff được gửi đi. flag cho phép ngưòi gửi chọn một số cách thức để gửi dữ liệu ví dụ như gửi dữ liệu out-of-band... Các tham số này khác nhau đối với mỗi loại socket. send() trả lại mã lỗi cho chương trình gọi để chương trình biết được thao tác có thành công hay không. Lời gọi write() Do cách thức truy nhập tới socket tương tự truy nhập đến file nên có thể dùng lệnh hệ thống write để gửi dữ liệu qua socket. int write(int fd, char * buff, int len) Tham số fd có thể là một socket descriptor hoặc file descriptor. Lời gọi writev() Để gửi đi một danh sách các khối dữ liệu ta dùng int writev(int fd, struct iovec iovector[], int vectorlen) Các lời gọi sendto(), sendmsg() Được dùng cho các socket không kết nối. Hai lệnh này yêu cầu phải cung cấp địa chỉ người nhận. int sendto(int sock, char * buff, int len, int flag, struct sockaddr * destaddr, int addrlen) Bốn tham số đầu giống như bốn tham số của send(). Hai tham số sau là địa chỉ của người nhận và độ dài của địa chỉ. Do sendto() có quá nhiều tham số, lập trình viên có thể sử dụng lời gọi sendmsg() int sendmsg(int sock, struct msghdr msg[], int flag) Với tham số msg là một cấu trúc có chứa địa chỉ và danh sách nhiều đoạn dữ liệu cần gửi đi. Một số lời gọi nhận dữ liệu từ socket Tương ứng với 5 lệnh để gửi dữ liệu có 5 lệnh dùng để nhận dữ liệu với tham số và cơ chế hoàn toàn giống nhau. int recv(int sock, char * buff, int len, int flag) int read(int fd, char * buff, int len) int readv(int fd, struct iovec iovector[], int * vectorlen) int recvfrom(int sock, char * buff, int len, int flag, struct sockaddr * destaddr, int *addrlen) int recvmsg(int sock, struct msghdr msg[], int flag) MÔ HÌNH CLIENT-SERVER Theo cách nhìn của người lập trình, TCP/IP giống như hầu hết các giao thức truyền thông khác cung cấp cơ chế cơ bản để truyền dữ liệu. Đặc biệt, TCP/IP cho phép người lập trình thiết lập truyền thông giữa hai chương trình ứng dụng và truyền dữ liệu qua lại. TCP/IP cung cấp kết nối bình đẳng giữa các ứng dụng kể cả các ứng dụng chạy trên cùng một máy. Một phát triển của mô hình peer-to-peer là mô hình Client-Server đã trở thành mô hình cơ bản được sử dụng trên mạng máy tính. Chương trình Server là một chương trình chờ đợi kết nối từ chương trình Client và cung cấp dịch vụ cho Client. Mô hình được mô tả như sau: Tiến trình Server được khởi động trên một hệ thống nào đó sau đó chờ đợi một tiến trình Client kết nối đến yêu cầu dịch vụ. Tiến trình Client được khởi động trên cùng hệ thống máy với chương trình Server hoặc từ một hệ thống khác kết nối với hệ thống chủ thông qua mạng. Client gửi yêu cầu qua mạng tới tiến trình Server đòi hỏi một số dịch vụ như: Trả lại ngày giờ cho Client In một file cho Client Đọc hoặc ghi file vào hệ thống file của Server Cho phép Client login vào hệ thống Server Chạy chương trình của Client trên hệ thống Server Sau khi cung cấp dịch vụ cho Client, Server tiếp tục nghỉ và chờ đợi kết nối khác. Chúng ta có thể chia tiến trình Server làm 2 kiểu: Tương tác (Interative Server): Khi Client đòi hỏi những dịch vụ đã đăng ký trước với khoảng thời gian thực hiện nhỏ, Server tự làm công việc đó ví dụ dịch vụ trả lại ngày giờ. Đồng thời (Concurrent Server): Với những yêu cầu đòi hỏi thời gian thực hiện lớn, tiến trình Server sinh một tiến trình con để thực hiện yêu cầu còn nó tiếp tục chờ đợi yêu cầu khác. Dịch vụ in file, đọc-ghi file được thực hiện theo kiểu này. Mô hình Client-Server sử dụng dịch vụ không kết nối Với mô hình không kết nối, client không kết nối với server mà chỉ gửi dữ liệu đến sử dụng lời gọi sento(), ngược lại, server sử dụng lời gọi recvfrom() chờ đợi dữ liệu từ client chuyển đến. Lời gọi recvfrom() trả lại địa chỉ của client, nhờ đó server có thể gửi kết quả lại cho client. recvfrom() recvfrom() bind() bind() socket() sendto() Server (connectionless protocol) block until data received from client process request sendto() socket() Client data (reply) data (request) Lời gọi socket cho mô hình client-server không kết nối Mô hình Client-Server sử dụng dịch vụ hướng kết nối Với mô hình Client-Server sử dụng dịch vụ hướng kết nối, đầu tiên Server được khởi động và chờ đợi một kết nối từ client. Sau khi kết nối được thiết lập, hai bên luân phiên nhau gửi nhận dữ liệu thông qua đường truyền. accept() listen() bind() socket() write() write() Server (connection-oriented protocol) Connect() read() read() socket() block until connection from client Process request Connection establishment data (reply) data (request) Client Lời gọi socket cho mô hình client-server hướng kết nối XÂY DỰNG CHƯƠNG TRÌNH TRUYỀN TỆP Thiết kế và cài đặt chương trình 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. 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 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 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ó độ dài là 0 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. 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ó độ dài là 0 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. 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 PWD Lệnh đổi thư mục 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. (Văn bản chương trình client được in trong phần phụ lục C) Một số vấn đề nảy sinh trong quá trình thực hiện và cách giải quyết 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. 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. K ẾT LUẬN Mạng máy tính đang là xu hướng phát triển trong tương lai của ngành công nghệ thông tin, việc nghiên cứu về các vấn đề liên quan và phát triển các phần mềm trên mạng đòi hỏi nhiều thời gian và công sức. Trong bản luận văn này, em đã trình bày những khái niệm cơ bản nhất về mạng máy tính, nghiên cứu kỹ lưỡng về một giao thức đang được sử dụng nhiều nhất hiện nay trên mạng đó là bộ giao thức TCP/IP và từ những kết quả nghiên cứu đó, xây dựng một giao thức ứng dụng riêng để sử dụng trong chương trình truyền tệp của mình. Trong bước đầu thử nghiệm, chương trình đã hoạt động cho kết quả khả quan, một số vấn đề như chuyển đổi tệp giữa các hệ điều hành đã thực hiện tốt. Tuy nhiên trong chương trình còn một số vấn đề tồn tại cần giải quết đó là thực hiện những lệnh tương tác, sử dụng hai đường truyền và một số lệnh điều khiển. Xu hướng phát triển tiếp theo sẽ là phát triển giao thức để sử dụng một đường truyền và tăng tính đồng bộ của chương trình. Trong khoảng thời gian ngắn làm luận văn, em không tránh khỏi những sai sót, em xin chân thành cảm ơn các thầy cô giáo và bạn bè đã góp ý, giúp đỡ em trong suốt quá trình làm luận văn. Nguyễn Nhật Bình 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ỹ thuật của CSE Phụ lục A MỘT SỐ KỸ THUẬT MẠNG CỤC BỘ 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ẠNG TOKEN-PASING RINGS (IEEE 802.5) Tolen-Pasing Rings cũng là một công nghệ mạng cục bộ phổ biến, việc điều khiển lưu thông trên mạng này được sử dụng bởi một cơ chế gọi là thẻ bài “token”. Token là một gói tin được chuyển vòng quanh mạng, mỗi thiết bị chỉ được quyền truyền dữ liệu khi nó nhận được token. Token WS WS WS WS Một đặc tính chủ yếu của Mạng Token-Pasing Rings là nó phải được nối thành vòng, nếu một nút mạng bị lỗi, toàn bộ mạng sẽ ngừng hoạt động (đối với mạng Ethernet chỉ một ngừng hoạt động khi nó bị lỗi). Nếu một máy bị tắt, mạng Mạng Token-Pasing Rings vẫn cần giao diện của nó để truyền thông, Token-ring Interface board lấy năng lượng từ cáp mạng để hoạt động. Khi thẻ bài bị mất, sau một thời gian nào đó, một thiết bị điều khiển sẽ sinh một thẻ bài mới. MẠNG TOKEN-PASSING BUSSES (IEEE 802.4) Token-Passing còn làm việc trên topo bus. Một chuẩn định nghĩa cho mạng này là IEEE 802.4, là một phần của chuẩn MAP (Manufacturing Automation Protocol). Chuẩn này sử dụng thiết bị Broadband khác với Baseband sử dụng trong Ethernet và Token-ring. Baseband chỉ sử dụng một tín hiệu trên đường truyền trong khi broadband sử dụng nhiều kênh truyền với các tần số tín hiệu khác nhau trên đường truyền. Một số mạng Broadband sử dụng hai dây dẫn, một để truyền, một để nhận dữ liệu. Hệ thống khác lại chỉ sử dụng một dây nhưng dùng 2 tần số khác nhau để truyền và nhận. Thông thường tần số truyên và nhận tạo thành một cặp tần số (tính bằng MHz) để dễ chuyển đổi giữa tần số gửi và tần số nhận. Tuy sử dụng Broadband đắt và phức tạp nhưng nó làm việc rất tốt với hình ảnh analog và âm thanh. Broadband Baseband Phụ lục B MỘT SỐ KỸ THUẬT CHỌN ĐƯỜNG ĐI TỐI ƯU Việc chọn con đường tối ưu để truyền các gói tin đi trên mạng phải thực hiện một số công việc sau: Quyết định chọn đường theo những tiêu chuẩn tối ưu nào đó. Cập nhật thông tin chọn đường. Có một số kỹ thuật chọn đường tối ưu thường được sử dụng khi xây dựng tầng mạng Chọn đường tập trung đặc trưng bởi sự tồn tại của một số trung tâm điều khiển mạng thực hiện việc chọn đường sau đó gửi các bảng chọn đường tới các nút mạng. Các nút mạng đều đặn gửi thông tin của chúng tới các chung tâm theo một khoảng thời gian hoặc khi có một sự kiện nào đó. Chọn đương phân tán được thực hiện tại mỗi nút của mạng. Việc này đòi hỏi sự trao đổi thông tin thường xuyên giữa các nút. GIẢI THUẬT DIJKSTRA CHO VIỆC CHỌN ĐƯỜNG TẬP TRUNG Giải thuật này tìm con đường có “độ dài” (chi phí) cực tiểu từ một nút nguồn tới mỗi nút còn lại của mạng Gọi l(i,j) là “độ dài” của đường nối trực tiếp 2 nút i và j l(i,j) =¥ nếu không tồn tại đường nối Nk là tập hợp tạo thành bởi k+1 phần tử (nguồn và k nút gần nguồn nhất sau k bước thực hiện giai thuật). Dk là “độ dài” từ nguồn tới nút n theo con đường “ngắn” nhất bao hàm trong Nk Thuật toán sử dụng các bước đệ quy sau: Bước 0 (khởi động) N0={1} D0(v)=l(1,v) v Ï N0 Bước k (tính và cập nhật) Nk = Nk-1 È {w} trong đó w thoả mãn biểu thức Dk-1(w) = min Dk-1(v), v Ï Nk-1 Dk(v) = min [Dk-1(v), Dk-1(w) + l(w,v)], v Ï Nk Thuật toán dừng khi tất cả các nút đã nằm trong N GIẢI THUẬT FORD& FULKERSON CHO VIỆC CHỌN ĐƯỜNG PHÂN TÁN Giải thuật này cho phép tìm tất cả các con đường “ngắn” nhất từ tất cả các nut tới một đích chung. Sau k bước lặp, mỗi nút được đánh dấu bởi cặp giá trị (nk(v), Dk(v)) Dk(v) là “độ dài” cực tiểu (hiện tại) từ nút v tới đích nk(v) là nút tiếp theo (hiện tại) trên con đường “tối ưu” từ nút v tới đích, được tính ở bước k. Bước 0 (khởi động) D0(1) = 0 và tất cả các nút được đánh dấu (·,¥) Bước k (tính và cập nhật) Với mọi v ¹ 1 (đích), cập nhật Dk(v) như sau: Dk(v) = min [Dk-1(w) + l(v,w)] wÎNv trong đó Nv là tập các nút láng giềng của v. Cập nhật nk(v) như sau: nk(v) = w1, với w1 thoả mãn biểu thức : Dk-1(w1) + l(v,w1) = min [Dk-1(w) + l(v,w)] wÎNv Thuật toán dừng khi tất cặp giá trị đánh dấu của mỗi nút giữ nguyên không thay đổi nữa. Phụ lục C VĂN BẢN CHƯƠNG TRÌNH (PHẦN CLIENT) CHƯƠNG TRÌNH CHÍNH (MAIN.C) #include #include #include #include #include #include #include

Các file đính kèm theo tài liệu này:

  • docLuan_van_TN_ve_TCPIP.doc