1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Khai niem ve mang va giao thuc mang

160 390 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 160
Dung lượng 2,22 MB

Nội dung

Khi nói đến các mạng máy tính, người ta thường đề cập tới mạng xương sống (backbone). Backbone là một mạng tốc độ cao kết nối các mạng có tốc độ thấp hơn. Một công ty sử dụng mạng backbone để kết nối các mạng LAN có tốc độ thấp hơn. Mạng backbone Internet được xây dựng bởi các mạng tốc độ cao kết nối các mạng tốc độ cao. Nhà cung cấp Internet hoặc kết nối trực tiếp với mạng backbone Internet, hoặc một nhà cung cấp lớn hơn.

Chương Các khái niệm mạng giao thức mạng Mạng máy tính Mạng máy tính Là tập hợp máy tính thiết bị nối với đường truyền vật lý theo kiến trúc Chúng ta phân loại mạng theo qui mô nó: • Mạng LAN (Local Area Network)-mạng cục bộ: kết nối nút phạm vi giới hạn Phạm vi công ty, hay tòa nhà • Mạng WAN (Wide Area Network): nhiều mạng LAN kết nối với tạo thành mạng WAN • MAN (Metropolitan Area Network), tương tự WAN, kết nối nhiều mạng LAN Tuy nhiên, mạng MAN có phạm vi thành phố hay đô thị nhỏ MAN sử dụng mạng tốc độ cao để kết nối mạng LAN trường học, phủ, công ty, , cách sử dụng liên kết nhanh tới điểm cáp quang Khi nói đến mạng máy tính, người ta thường đề cập tới mạng xương sống (backbone) Backbone mạng tốc độ cao kết nối mạng có tốc độ thấp Một công ty sử dụng mạng backbone để kết nối mạng LAN có tốc độ thấp Mạng backbone Internet xây dựng mạng tốc độ cao kết nối mạng tốc độ cao Nhà cung cấp Internet kết nối trực tiếp với mạng backbone Internet, nhà cung cấp lớn 1.1 Các đường kết nối mạng WAN Để kết nối tới mạng WAN, có số tùy chọn sau: • Khi khách hàng cụ thể yêu cầu sử dụng mạng với thông lượng xác định, sử dụng đường thuê bao (leased line) • Các đường chuyển mạch (switched lines) sử dụng dịch vụ điện thoại thông thường Một mạch thiết lập phía nhận phát khoảng thời gian thực gọi trao đổi liệu Khi không cần dùng đường truyền nữa, cần phải giải phóng đường truyền cho khách hàng khác sử dụng Các ví dụ đường chuyển mạch đường POTS , ISDN, DSL • Mạng chuyển mạch gói mạng mà nhà cung cấp dịch vụ cung cấp công nghệ chuyển mạch để giao tiếp với mạng xương sống Giải pháp cung cấp hiệu cao khả chia sẻ tài nguyên khách hàng Các giao thức sử dụng cho mạng chuyển mạch bao gồm X.25 (64Kbps), Frame Relay (44.736Mbps), ATM (9.953 Gbps) Kiến trúc mạng: Một vấn đề cần quan tâm mạng máy tính kiến trúc mạng Nó cập tới hai khía cạnh Hình trạng mạng Giao thức mạng • Hình trạng mạng: Là cách nối máy tính với Người ta phân loại mạng theo hình trạng mạng mạng sao, mạng bus, mạng ring… • Giao thức mạng: Là tập hợp qui tắc, qui ước truyền thông mạng mà tất thực thể tham gia truyền thông phải tuân theo 1.2 Giao thức Ethernet Để có hiểu biết tốt mạng vật lý hoạt động nào, xem xét số giao thức LAN phổ biến: giao thức Ethernet Chín mươi phần trăm thiết bị gắn với mạng LAN sử dụng giao thức Ethernet, ban đầu phát triển Xerox, Digital Equipement, Intel năm 1972 Ngày nay, Ethernet hỗ trợ đường truyền 100Mbps 1Gbps Rất nhiều công nghệ đường truyền sử dụng với Ethernet Người ta sử dụng số qui ước để đặt tên giao thức Enternet Tên tốc độ mạng Ethernet thuộc tính công nghệ đường truyền Các tên bắt đầu số để tốc độ truyền tối đa, từ sử dụng để xác định công nghệ truyền dẫn, cuối số để khoảng cách hai nút Ví dụ, 10Base2 ký hiệu Ethernet hoạt động với tốc độ 10Mbps sử dụng kỹ thuật truyền băng tần sở, với cáp có chiều dài tối đa 200m Một số cấu hình thông dụng khác sau: Chuẩn Ethernet 10Base5 10BaseT Tốc độ 10Mbps 10Mbps Kiểu cáp Cáp đồng trục Cáp đồng 100BaseTX 100Mbs Cáp đồng 1000BaseSX 1000Mbps Cáp đa chế độ • Mô tả Đây chuẩn ban đầu cho Ethernet 10BaseT mạng 10Mbps với cáp xoắn 100Mbps công nghệ cáp xoắn khả truyền song công 1000Mbps với cáp sợi quang S :Short wavelength (850nm) Bảng 1.1 CSMA/CD (Carrier Sense Multiple Access/Collision Detect) Nhiều thiết bị kết nối vào mạng tất có quyền truy xuất đồng thời Khi thông điệp gửi đi, truyền thông qua mạng Phía nhận định danh địa nhất, có nút đọc thông điệp, nút khác bỏ qua Một vấn đề đặt có nhiều nút cố gắng gửi thông điệp thời điểm, điều phá hỏng gói tin Giải pháp cho vấn đề nút mạng giám sát mạng phát mạng rảnh hay bận Một nút bắt đầu gửi liệu liệu gửi mạng trước CSMA phận CSMA/CD Tuy nhiên có khả hai nút, sau kiểm tra thấy mạng không bận, bắt đầu gửi gói tin thời điểm cáp mạng Điều gây lên xung đột hai gói tin, kết phá hỏng liệu Cả hai phía gửi nhận thức gói tin bị hỏng lắng nghe mạng gửi liệu, phát xung đột Đây CD (Collision Dection) CSMA/CD Cả hai nút dừng việc truyền liệu tức thời, chờ thời điểm định trước kiểm tra mạng trở lại để xem mạng có rỗi hay không truyền lại Mỗi nút mạng sử dụng địa MAC (Media Access Control) để định danh Địa định nghĩa thiết bị giao tiếp mạng Một gói tin gửi mạng, thiết bị mạng không nhận diện host host nhận, bỏ qua gói tin chuyển tiếp • Các giao thức khác IBM phát triển giao thức Token Ring (IEEE802.5), nút mạng kết nối theo vòng Với Ethernet, nút gửi thông điệp gói tin mạng Với Token Ring nút có quyền truy xuất tới mạng theo thứ tự định trước Một token lưu chuyển vòng quanh vòng, nút lệnh có thẻ gửi thông điệp Ngày nay, Ethernet thay dần mạng Token Ring mạng tốn khó cài đặt AppleTalk giao thức mạng LAN phát triển Apple tương đối phổ biến trường học, nhà máy, ATM giao thức khác tìm thấy mạng LAN Nó hỗ trợ mạng tốc độ cao sử dụng kỹ thuật chuyển mạch có đảm bảo chất lượng dịch vụ 1.3 Các thành phần vật lý Một vấn đề quan trọng để biết mạng biết phần cứng Chúng ta xem xét thành phần chủ yếu mạng LAN sau: • o Thiết bị giao tiếp mạng o Hub o Switch o Router Thiết bị giao tiếp mạng (Network Interface Thiết bị) NIC thiết bị giao tiếp sử dụng để kết nối thiết bị với mạng LAN Nó cho phép gửi nhận thông điệp từ mạng Một NIC có địa MAC mà cung cấp định danh cho thiết bị Địa MAC số 12 byte-hệ 16 gán cho thiết bị mạng Địa thay đổi trình điều khiển mạng cách linh hoạt (như trường hợp hệ thống DECnet, mạng phát triển Digital Equipment), thông thường địa MAC không thay đổi Ta tìm địa MAC máy sử dụng hệ điều hành Windows cách dùng tiện ích dòng lệnh ipconfig DOS với tham số switch Hình 1.1 • Hub Nhiều thiết bị kết nối cách dễ dàng với giúp đỡ hub Hub thiết bị kết nối gắn nhiều thiết bị vào LAN Mỗi thiết bị thường kết nối thông qua cáp tới cổng hub Hub hoạt động chuyển tiếp Khi chuyển thông điệp từ cổng tới cổng khác, chuyển tới mạng Hub thành phần tương đối đơn giản mạng, hoạt động tầng vật lý để truyền liệu mà không cần thao tác xử lý Điều làm cho hub dễ cài đặt quản lý, chúng không đòi hỏi cấu hình đặc biệt • Switch Các chuyển mạch (switch) phân chia mạng thành đoạn (segment) So với hub, switch thiết bị thông minh nhiều Switch lưu trữ địa MAC thiết bị kết nối tới cổng bảng lookup Các bảng lookup cho phép switch lọc thông điệp mạng không giống với hub, không chuyển tiếp thông điệp tới cổng Điều loại bỏ xung đột xảy mạng đạt hiệu tốt Chức chuyển mạch thực cách sử dụng phần cứng • Router Router thiết bị trung gian mạng, kết nối nhiều mạng vật lý Một mạng có nhiều host phân chia thành phần riêng, hay gọi subnet Ưu điểm subnet là: a Hiệu cải thiện cách giảm broadcast, broadcast thông điệp gửi tới tất nút mạng b Khả hạn chế người dùng mạng xác định đưa ưu điểm bảo mật c Các subnet nhỏ dễ quản lý so với mạng lớn Các router không sử dụng LAN, chúng có vai trò quan trọng WAN Router nhận thông điệp chuyển tiếp tới đích cách sử dụng đường tốt tới đích Một Router lưu giữ bảng định tuyến liệt kê tất cách mà mạng đạt tới Thông thường có số đường từ mạng tới mạng khác, có số tốt nhất, đường mô tả bảng định tuyến Các router truyền tin cách sử dụng giao thức định tuyến để phát router khác mạng, hỗ trợ cho việc trao đổi thông tin mạng gắn với định tuyến Thông tin mà định tuyến thu thập đường mạng gọi độ đo router, bao gồm thông tin mát gói tin thời gian truyền tin Thông tin sử dụng để tạo độ đo tùy thuộc vào giao thức định tuyến: d Giao thức định tuyến vectơ khoảng cách e Các giao thức RIP(Routing Information Protocol) IGRP(Interior Gateway Routing Protocol) sử dụng biến đếm để số router mà gói tin phải qua để đến đích Các giao thức thường lựa chọn đường với router, mà không quan tâm đến tốc độ độ tin cậy f Các giao thức định tuyến trạng thái liên kết g Việc tính toán đường tốt giao thức định tuyến OSPF BGP quan tâm đến nhiều yếu tố tốc độ, độ tin cậy, chí chi phí đường h Các giao thức định tuyến lai i • Các giao thức sử dụng kết hợp việc tính toán trạng thái liên kết vectơ khoảng cách Vấn đề tìm đường Với cấu hình TCP/IP, gateway mặc định thiết lập Đây địa IP cổng định tuyến mà subnet kết nối tới Bộ định tuyến sử dụng host bên subnet cần liên lạc Ta thấy bảng định tuyến cục hệ điều hành Windows cách sử dụng lệnh ROUTE PRINT dòng lệnh Lệnh hiển thị gateway sử dụng cho liên kết mạng Hình 1.2 Một lệnh hữu ích khác lệnh TRACERT Lệnh cho phép kiểm tra đường sử dụng để tới đích Hình 1.3 Mô hình phân tầng ISO định nghĩa mô hình cho mạng chuẩn hóa thay cho TCP/IP,DECNet giao thức khác giao thức mạng sử dụng cho Internet Tuy nhiên, phức tạp OSI, mô hình không cài đặt sử dụng nhiều thực tế TCP/IP đơn giản nhiều tìm thấy nhiều nơi Nhưng có nhiều ý tưởng từ giao thức OSI tìm thấy phiên IP, IPv6 Trong giao thức OSI không xây dựng đầy đủ thực tế, mô hình bảy tầng thành công sử dụng mô hình tham chiếu để mô tả giao thức mạng khác chức chúng Các tầng mô hình OSI phân chia nhiệm vụ mà giao thức mạng phải thực hiện, mô tả ứng dụng mạng truyền tin Mỗi tầng có mục đích cụ thể kết nối với tầng Bảy tầng mô hình OSI Hình 1.4 • Tầng ứng dụng (Application): định nghĩa giao diện lập trình giao tiếp với mạng cho ứng dụng người dùng • Tầng trình diễn (Presentation): có trách nhiệm mã hóa liệu từ tầng ứng dụng để truyền mạng ngược lại • Tầng phiên (Session): tạo liên kết ảo ứng dụng • Tầng giao vận (Transport): cho phép truyền liệu với độ tin cậy cao • Tầng mạng (Network): cho phép truy xuất tới nút mạng LAN cách sử dụng địa logic • Tâng liên kết liệu (Data Link): truy xuất tới mạng vật lý địa vật lý • Cuối cùng, tầng vật lý (Physical): bao gồm thiết bị kết nối, cáp nối Bây tìm hiểu khái niệm tầng cách xem xét chức tầng chi tiết 2.1 Tầng 1:Tầng vật lý Tầng vật lý bao gồm môi trường vật lý yêu cầu cáp nối, thiết bị kết nối, đặc tả giao tiếp, hub repeater, 2.2 Tầng 2: Tầng liên kết liệu Địa MAC mà đề cập địa tầng Các nút LAN gửi thông điệp cho cách sử dụng địa IP, địa phải chuyển đổi sang địa MAC tương ứng Giao thức phân giải địa (ARP: Address Resolution Protocol) chuyển đổi địa IP thành địa MAC.Một vùng nhớ cache lưu trữ địa MAC tăng tốc độ xử lý này, kiểm tra tiện ích arp -a, 2.3 Tầng 3: Tầng mạng Tầng mạng tầng nằm phía tầng liên kết Trong tầng 3, địa logic sử dụng để kết nối tới nút khác Các địa MAC tầng sử dụng mạng LAN, phải sử dụng cách đánh địa tầng truy xuất tới nút mạng WAN Internet Protocol giao thức tầng 3; sử dụng địa IP để định danh nút mạng Các router tầng sử dụng để định đường mạng 2.4.Tầng 4:Tầng giao vận Tầng mạng định danh host địa logic Tầng ứng dụng nhận biết ứng dụng thông qua gọi điểm cuối (endpoint) Với giao thức TCP, endpoint nhận biết số hiệu cổng địa IP Tầng giao vận phân loại theo cách truyền tin với độ tin cậy hay không Truyền tin với độ tin cậy có lỗi tạo thông điệp gửi không nhận cách đắn Trong truyền tin có độ tin cậy không cao không kiểm tra xem liệu thông điệp gửi nhận hay chưa Trong truyền tin với độ tin cậy, tầng giao vận có nhiệm vụ gửi gói tin xác thực hay thông điệp truyền lại liệu bị hỏng hay bị thất lạc, hay liệu bị trùng lặp Một cách khác để phân loại mạng truyền tin phân loại mạng theo hướng liên kết hay phi liên kết • Với truyền tin hướng liên kết, liên kết phải thiết lập trước thông điệp gửi nhận • Với truyền tin phi liên kết không cần giai đoạn thiết lập liên kết 2.5 Tầng 5: Tầng phiên Với mô hình OSI, tầng phiên xác định cá dịch vụ cho ứng dụng, đăng nhập đăng xuất ứng dụng Tầng phiên biểu diễn liên kết ảo ứng dụng Liên kết tầng phiên độc lập với liên kết vật lý tầng giao vận, liên kết tầng giao vận yêu cầu cho liên kết tầng phiên 2.6.Tầng 6:Tầng trình diễn Tầng trình diễn sử dụng để định dạng liệu theo yêu cầu ứng dụng Mã hóa, giải mã, nén liệu thường diễn tầng 2.7 Tầng 7:Tầng ứng dụng Tầng ứng dụng tầng cao mô hình OSI Tầng bao gồm ứng dụng sử dụng tiện ích mạng Các ứng dụng thực tác vụ truyền tệp tin, in ấn, e-mail, duyệt web,… Các giao thức mạng Các tầng OSI định nghĩa mô hình tầng giao thức, cách mà chúng hoạt động với Chúng ta so sánh tầng OSI với cài đặt cụ thể: Chồng giao thức TCP/IP dạng cụ thể mô hình OSI, bao gồm tầng Giao thức IP tương ứng với tầng mô hình OSI; TCP UDP tương ứng với tầng mô hình OSI, chúng thực nhiệm vụ tầng phiên, tầng trình diễn, tầng ứng dụng Trong mục tiếp theo, xem xét chức mục đích giao thức họ giao thức TCP/IP theo trình tự sau: • Các giao thức • Các giao thức Internet • Các giao thức E-mail • Các giao thức khác 3.1 Các giao thức Như thấy, họ giao thức TCP/IP có cấu trúc phân tầng đơn giản nhiều so với mô hình tầng mô hình OSI TCP UDP giao thức tầng giao vận tương ứng với tầng mô hình tầng OSI Cả hai giao thức sử dụng giao thức IP, giao thức tương ứng với tầng mô hình OSI (tầng mạng) Cũng ba giao thức có hai giao thức họ giao thức TCP/IP mở rộng tính giao thức IP: ICMP IGMP 3.1.1 IP-Internet Protocol Giao thức Internet kết nối hai nút Mỗi nút định danh địa IP 32bit, gọi địa IP host Khi gửi thông điệp, giao thức IP nhận thông điệp từ giao thức tầng TCP hay UDP đưa vào trường header chứa thông tin host đích Cách tốt để hiểu giao thức IP cách xem trường thông tin header IP chi tiết Thông tin liệt kê bảng sau Trường IP Version (Phiên IP) Độ dài bits Mô tả Phiên IP ( Phiên giao thức IPv4) IP Header Length (Chiều dài Header) Type of Service (Kiểu dịch vụ) bits Chiều dài header byte Total Length (Tổng chiều dài) bytes Kiểu dịch vụ cho phép thông điệp đặt chế độ thông lượng cao hay bình thường, thời gian trễ bình thường hay lâu, độ tin cậy bình thường hay cao Điều có lợi cho gói gửi mạng Một số kiểu mạng sử dụng thông tin để xác định độ ưu tiên Hai byte xác định tổng chiều dài thông điệp-header liệu Kích thước tối đa gói tin IP 65,535, điều không thực tế mạng Kích thước lớn chấp nhận host 576 bytes Các thông điệp lớn phân thành đoạn-quá trình gọi trình phân đoạn Identification (Định danh) bytes Flags bits Fragment Offset 13 bits Time to Live byte Protocol byte Header Checksum bytes Source Address Destination Address Options Padding bytes bytes variable variabe • Nếu thông điệp phân đoạn, trường định danh trợ giúp cho việc lắp ráp đoạn thành thông điệp Nếu thông điệp phân thành nhiều đoạn, tất đoạn thông điệp có số định danh Các cờ thông điệp có phân đoạn hay không, liệu gói tin thời có phải đoạn cuối thông điệp hay không 13 bit xác định offset thông điệp Các đoạn đến theo thứ tự khác với gửi, trường offset cần thiết để xây dựng lại liệu ban đầu Đoạn thông điệp có offset Xác định số giây mà thông điệp tồn trước bị loại bỏ Byte giao thức sử dụng mức cho thông điệp Các số giao th ức Đây là checksum header Bởi header thay đổi với thông điệp mà chuyển tới, checksum thay đổi Cho biết địa IP 32 bit phía gửi Địa IP 32 bit phía nhận Bảng 1.2 Các địa IP Mỗi nút mạng TCP/IP định danh địa IP 32-bit Thông thường địa IP biểu diễn bốn x.x.x.x, chẳng hạn 192.168.0.1 Mỗi số bốn số biểu diễn byte địa IP Một địa IP gồm hai phần: phần mạng phần host Tùy thuộc vào lớp mạng, phần mạng bao gồm một, hai ba byte Lớp Byte A Networks (1-126) B Networks (128191) C Networks (192223) Byte Byte Host (0-255) Host (0-255) Networks (0-255) Host (0-255) Byte Host (0-255) Host (0-255) Networks (0-255) Networks (0-255) Host (0-255) Bảng 1.3 Bit địa mạng lớp A 0,vì byte địa lớp A nằm dải từ 00000001 (1) đến 01111110 (126) Ba byte lại phục vụ cho việc định danh nút mạng, cho phép ta kết nối 16 triệu thiết bị vào mạng lớp A Chú ý mạng bảng không đề cập tới địa có byte đầu 127-đây khoảng địa dự phòng Địa 127.0.0.1 địa localhost, địa 127.0.0.0 địa loopback Các địa IP mạng thuộc lớp B luôn có hai bit byte đầu 10, đưa khoảng địa 10000000 (128) đên 10111111 (191) Byte thứ hai dùng để định danh mạng có giá trị từ đến 255, hai byte lại để định danh nút mạng; tổng cộng 65534 thiết bị Các địa IP mạng thuộc lớp C luôn có ba bit byte đầu 110, khoảng giá trị byte đầu từ 11000000 (192) đến 11011111 (223) Mạng có byte thiết lập để định danh host, có 254 thiết bị kết nối vào mạng lớp C • Các địa IP riêng Để tránh cạn kiệt địa IP, host không kết nối trực tiếp với Internet sử dụng địa khoảng địa riêng Các địa IP riêng không tổng thể, mà mặt cục phạm vi mạng Tất lớp mạng dự trữ khoảng định để sử dụng địa riêng cho host không cần truy cập trực tiếp tới Internet Các host truy cập Internet thông qua gateway mà không cần chuyển tiếp địa IP riêng Lớp A B C Khoảng địa riêng 10 172.16-172.31 192.168.0-192.168.255 Bảng 1.4 • Các subnet Việc kết nối hai nút hai mạng khác cần có router Định danh host mạng lớp A cần có 24 bit; mạng lớp C, có bit Router phân chia định danh host thành hai phần phần gọi subnet phần lại phần host 3.1.2 IPv6 Tiền thân giao thức IP phát triển Bộ Quốc Phòng Mỹ năm 1960 năm 1980 họ giao thức TCP/IP đời Bởi IP xây dựng dựa giao thức mạng DARPA có, trở thành phiên 4, gọi IPv4 Lúc ý tưởng máy di động chưa kết nối vào Internet nên số host hỗ trợ IP tạm đủ Nhưng có nhiều thiết bị kết nối vào Internet, nhu cầu số địa IP tăng cao Một phiên địa IP phát triển IETF: IPv6 Sự thay đổi quan trọng so với IPv4 việc sử dụng 128bit để đánh địa nút 32bit 3.1.3 -Số hiệu cổng Giao thức IP sử dụng địa IP để định danh nút mạng, tầng giao vận sử dụng điểm cuối (endpoint) để định danh ứng dụng Các giao thức TCP UDP sử dụng số hiệu cổng với địa IP để xác định điểm cuối ứng dụng Các số hiệu cổng TCP UDP phân thành ba loại • Các số hiệu cổng hệ thống • Các số hiệu cổng người dùng • Các số hiệu cổng riêng động Các số hiệu cổng hệ thống nằm khoảng từ đến 1023 Các cổng hệ thống sử dụng tiến trình quyền ưu tiên hệ thống Các giao thức tiếng có số hiệu cổng nằm khoảng Các số hiệu cổng người dùng nằm khoảng từ 1024 đến 49151 Các ứng dụng server bạn nhận số làm cổng, bạn đăng ký số hiệu cổng với IANA 10 Trong Java, datagram UDP biểu diễn lớp DatagramPacket: • public final class DatagramPacket extends Object Lớp cung cấp phương thức để nhận thiết lập địa nguồn, đích từ header IP, nhận thiết lập thông tin cổng nguồn đích, nhận thiết lập độ dài liệu Các trường thông tin lại truy nhập từ mã Java túy DatagramPacket sử dụng constructor khác tùy thuộc vào gói tin sử dụng để gửi hay nhận liệu 2.1 Các constructor để nhận datagram Hai constructor tạo đối tượng DatagramSocket để nhận liệu từ mạng: • public DatagramPacket(byte[] b, int length) • public DatagramPacket(byte[] b, int offset, int length) Khi socket nhận datagram, lưu trữ phần liệu datagram vùng đệm b bắt đầu vị trí b[0] tiếp tục gói tin lưu trữ hoàn toàn lưu trữ hết length byte Nếu sử dụng constructor thứ hai, liệu lưu trữ vị trí b[offset] Chiều dài b phải nhỏ b.length-offset Nếu ta xây dựng DatagramPacket có chiều dài vượt chiều dài vùng đệm constructor đưa ngoại lệ IllegalArgumentException Đây kiểu ngoại lệ RuntimeException nên chương trình ta không cần thiết phải đón bắt ngoại lệ Ví dụ, xây dựng DatagramPacket để nhận liệu có kích thước lên tới 8912 byte byte b[]=new byte[8912]; DatagramPacket dp=new DatagramPacket(b,b.length); 2.2 Constructor để gửi datagram Bốn constructor tạo đối tượng DatagramPacket để gửi liệu mạng: 146 • public DatagramPacket(byte[] b, int length, InetAddress dc, int port) • public DatagramPacket(byte[] b, int offset, int length, InetAddress dc, int port) • public DatagramPacket(byte[] b, int length, SocketAddress dc, int port) • public DatagramPacket(byte[] b, int offset, int length, SocketAddress dc, int port) Mỗi constructor tạo DatagramPacket để gửi tới host khác Gói tin điền đầy liệu với chiều dài length byte vị trí offset vị trí offset không sử dụng Ví dụ để gửi xâu ký tự đến host khác sau: String s=”This is an example of UDP Programming”; byte[] b= s.getBytes(); try{ InetAddress dc=InetAddress.getByName(“www.vnn.vn”); int port =7; DatagramPacket dp=new DatagramPacket(b,b.length,dc,port); //Gửi gói tin } catch(IOException e){ System.err.println(e); } Công việc khó khăn việc tạo đối tượng DatagramPacket việc chuyển đổi liệu thành mảng byte Đoạn mã chuyển đổi xâu ký tự thành mảng byte để gửi liệu 2.3 Các phương thức nhận thông tin từ DatagramPacket DatagramPacket có sáu phương thức để tìm phần khác datagram: liệu thực cộng với số trường header Các phương thức thường sử dụng cho datagram nhận từ mạng • public InetAddress getAddress() Phương thức getAddress() trả đối tượng InetAddress chứa địa IP host xa Nếu datagram nhận từ Internet, địa trả địa máy gửi datagram (địa nguồn) Mặt khác datagram tạo cục để gửi tới máy xa, phương thức trả địa host mà datagram đánh địa • public int getPort() Phương thức getPort() trả số nguyên xác định cổng host xa Nếu datagram nhận từ Internet cổng cổng host gửi gói tin • public SocketAddress() Phương thức trả đối tượng SocketAddress chứa địa IP số hiệu cổng host xa • public byte[] getData() Phương thức getData() trả mảng byte chứa liệu từ datagram Thông thường cần phải chuyển byte thành dạng liệu khác trước chương trình xử lý liệu Một cách để thực điều chuyển đổi mảng byte thành đối tượng String sử dụng constructor sau đây: • public String(byte[] buffer,String encoding) 147 Tham số đầu tiên, buffer, mảng byte chứa liệu từ datagram Tham số thứ hai cho biết cách thức mã hóa xâu ký tự Cho trước DatagramPacket dp nhận từ mạng, ta chuyển đổi thành xâu ký tự sau: String s=new String(dp.getData(),”ASCII”); Nếu datagram không chứa văn bản, việc chuyển đổi thành liệu Java khó khăn nhiều Một cách tiếp cận chuyển đổi mảng byte trả phương thức getData() thành luồng ByteArrayInputStream cách sử dụng constructor này: • public ByteArrayInputStream(byte[] b, int offset, int length) b mảng byte sử dụng luồng nhập InputStream • public int getLength() Phương thức getLength() trả số bytes liệu có datagram • public getOffset() Phương thức trả vị trí mảng trả phương thức getData() mà từ liệu datagram xuất phát Các phương thức thiết lập giá trị cho trường thông tin Sáu constructor đủ để tạo lập datagram Tuy nhiên, Java cung cấp số phương thức để thay đổi liệu, địa máy xa, cổng máy xa sau datagram tạo Trong số trường hợp việc sử dụng lại DatagramPacket có sẵn nhanh việc tạo đối tượng • public void setData(byte[] b): Phương thức thay đổi liệu datagram • public void setData(byte[] b, int offset, int length) Phương thức đưa giải pháp để gửi khối lượng liệu lớn Thay gửi toàn liệu mảng, ta gửi liệu đoạn mảng thời điểm Ví dụ đoạn mã sau gửi liệu theo đoạn 512 byte: int offset=0; DatagramPacket dp=new DatagramPacket(b,offset,512); int bytesSent=0; while(bytesSent512):512:bytesToSend; dp.setData(b,byteSent,512); } • public void setAddress(InetAddress dc) Phương thức setAddress() thay đổi địa máy mà ta gửi gói tin tới Điều cho phép ta gửi datagram đến nhiều nơi nhận • public void setPort(int port) Phương thức thay đổi số hiệu cổng gửi tới gói tin • pubic void setAddress(SocketAddress sa) 148 • public void setLength(int length) Phương thức thay đổi số byte liệu đặt vùng đệm Lớp DatagramSocket Để gửi nhận DatagramPacket, bạn phải mở DatagramSocket Trong Java, datagram socket tạo truy xuất thông qua đối tượng DatagramSocket public class DatagramSocket extends Object Tất datagram gắn với cổng cục bộ, cổng sử dụng để lắng nghe datagram đến đặt header datagram gửi Nếu ta viết client không cần phải quan tâm đến số hiệu cổng cục DatagramSocket sử dụng để gửi nhận gói tin UDP Nó cung cấp phương thức để gửi nhận gói tin, xác định giá trị timeout sử dụng phương pháp vào không phong tỏa (non blocking I/O), kiểm tra sửa đổi kích thước tối đa gói tin UDP, đóng socket Các phương thức • void close(): đóng liên kết giải phóng khỏi cổng cục • void connect(InetAddress remote_address, int remote_port)- • InetAddress getInetAddress():phương thức trả địa remote mà socket kết nối tới, giá trị null không tồn liên kết • InetAddress getLocalAddress(): trả địa cục • Int getSoTimeOut() trả giá trị tùy chọn timeout socket Giá trị xác định thời gian mà thao tác đọc phong tỏa trước đưa ngoại lệ InterruptedException Ở chế độ mặc định, giá trị 0, vào không phong tỏa sử dụng • void receive(DatagramPacket dp) throws IOException:phương thức đọc gói tin UDP lưu nộ dung packet xác định • void send(DatagramSocket dp) throws IOException:phương thức gửi gói tin • void setSoTimeOut(int timeout): thiết lập giá trị tùy chọn socket Nhận gói tin Trước ứng dụng đọc gói tin UDP gửi máy xa, phải gán socket với cổng UDP cách sử dụng DatagramSocket, tạo DatagramPacket đóng vai trò chứa cho liệu gói tin UDP Hình vẽ mối quan hệ gói tin UDP với lớp Java khác sử dụng để xử lý ứng dụng thực tế packet Đọc gói tin DatagramSocket Chuyển gói tin vào DatagramSocket DatagramPacket Ứng dụng UDP 149 Hình 7.1 Khi ứng dụng muốn đọc gói tin UDP, gọi phương thức DatagramSocket.receive(), phương thức chép gói tin UDP vào DatagramPacket xác định Xử lý nội dung nói tin tiến trình lặp lại cần DatagramPacket dp=new DatagramPacket(new byte[256],256); DatagramSocket ds=new DatagramSocket(2000); boolean finished=false; while(!finished) { ds.receive(dp); //Xử lý gói tin } ds.close(); Khi xử lý gói tin ứng dụng phải làm việc trực tiếp với mảng byte Tuy nhiên ứng dụng đọc văn ta sử dụng lớp từ gói vào để chuyển đổi mảng byte luồng stream reader Bằng cách gắn kết luồng nhập ByteArrayInputStream với nội dung datagram sau kết nối với kiểu luồng khác, bạn truy xuất tới nội dung gói UDP cách dễ dàng Rất nhiều người lập trình thích dùng luồng vào I/O để xử lý liệu, cách sử dụng luồng DataInputStream BufferedReader để truy xuất tới nội dung mảng byte InputStream DatagramPacket Địa IP ByteArrayInputStream Địa cổng Dữ liệu gói tin byte[]={…,…} InputStreamReader Hình 7.2 Ví dụ, để gắn kết luồng DataInputStream với nội dung DatagramPacket, ta sử dụng đoạn mã sau: ByteArrayInputStream bis=new ByteArrayInputStream(dp.getData()); DataInputStream dis=new DataInputStream(bis); //đọc nội dung gói tin UDP Gửi gói tin Lớp DatagramSocket sử dụng để gửi gói tin Khi gửi gói tin, ứng dụng phải tạo DatagramPacket, thiết lập địa thông tin cổng, ghi liệu cần truyền vào mảng byte Nếu muốn gửi thông tin phúc đáp ta biết địa 150 số hiệu cổng gói tin nhận Mỗi gói tin sẵn sàng để gửi, ta sử dụng phương thức send() lớp DatagramSocket để gửi gói tin DatagramSocket Gán cổng UDP Gửi DatagramPacket cách sử dụng DatagramSocket Ứng dụng UDP Packet Xây dựng gói tin DatagramPacket Hình 7.3 //Socket lắng nghe gói tin đến cổng 2000 DatagramSocket socket = new DatagramSocket(2000); DatagramPacket packet = new DatagramPacket (new byte[256], 256); packet.setAddress ( InetAddress.getByName ( somehost ) ); packet.setPort ( 2000 ); boolean finished = false; while !finished ) { // Ghi liệu vào vùng đệm buffer socket.send (packet); // Thực hành động đó, chẳng hạn đọc gói tin kháci kiểm tra xemor // gói tin cần gửi hay không } socket.close(); Ví dụ minh họa giao thức UDP Để minh họa gói tin UDP gửi nhận nào, viết, biên dịch chạy ứng dụng sau Viết chương trình theo mô hình Client/Server để: Client thực thao tác sau đây: 151 • Client gửi xâu ký tự người dùng nhập từ bàn phím cho server • Client nhận thông tin phản hồi trở lại từ Server hiển thị thông tin hình Server thực thao tác sau: • Server nhận xâu ký tự client gửi tới in lên hình • Server biến đổi xâu ký tự thành chữ hoa gửi trở lại cho Client import java.net.*; import java.io.*; public class UDPClient { public final static int CONG_MAC_DINH=9; public static void main(String args[]) { String hostname; int port=CONG_MAC_DINH; if(args.length>0) { hostname=args[0]; try{ } catch(Exception e){ port =Integer.parseInt(args[1]); } } else { hostname="127.0.0.1"; } try{ InetAddress dc=InetAddress.getByName(hostname); BufferedReader InputStreamReader(System.in)); userInput=new BufferedReader(new DatagramSocket ds =new DatagramSocket(port); while(true){ String line=userInput.readLine(); if(line.equals("exit"))break; byte[] data=line.getBytes(); 152 DatagramPacket DatagramPacket(data,data.length,dc,port); dp=new ds.send(dp); dp.setLength(65507); ds.receive(dp); ByteArrayInputStream bis =new ByteArrayInputStream(dp.getData()); BufferedReader dis =new BufferedReader(new InputStreamReader(bis)); System.out.println(dis.readLine()); } } catch(UnknownHostException e) { System.err.println(e); } catch(IOException e) { System.err.println(e); } } } import java.net.*; import java.io.*; public class UDPServer { public final static int CONG_MAC_DINH=9; public static void main(String args[]) { int port=CONG_MAC_DINH; try{ } 153 catch(Exception e){ port =Integer.parseInt(args[1]); } try{ DatagramSocket ds =new DatagramSocket(port); DatagramPacket dp=new DatagramPacket(new byte[65507],65507); while(true){ ds.receive(dp); ByteArrayInputStream bis =new ByteArrayInputStream(dp.getData()); BufferedReader dis =new BufferedReader(new InputStreamReader(bis)); String s=dis.readLine(); System.out.println(s); s.toUpperCase(); dp.setData(s.getBytes()); dp.setLength(s.length()); dp.setAddress(dp.getAddress()); dp.setPort(dp.getPort()); ds.send(dp); } } catch(UnknownHostException e) { System.err.println(e); } catch(IOException e) { System.err.println(e); } } } C:\>start java UDPServer 154 C:\>start java UDPClient Hình 7.4 Chương trình Client/Server sử dụng đa tuyến đoạn import java.net.*; import java.io.*; public abstract class UDPServer extends Thread { private int bufferSize; protected DatagramSocket ds; public UDPServer(int port, int bufferSize) throws SocketException { this.bufferSize=bufferSize; this.ds=new DatagramSocket(port); } public UDPServer(int port)throws SocketException { this(port,8192); } public void run() { byte[] buffer=new byte[bufferSize]; while(true) { DatagramPacket dp=new DatagramPacket(buffer,buffer.length); try{ ds.receive(dp); this.respond(dp); } catch(IOException e) { 155 System.err.println(e); } } } public abstract void respond(DatagramPacket req); } Server Echo import java.net.*; import java.io.*; public class UDPEchoServer extends UDPServer { public final static int DEFAULT_PORT=7; public UDPEchoServer()throws SocketException { super(DEFAULT_PORT); } public void respond(DatagramPacket dp) { try{ DatagramPacket outdp=new DatagramPacket(dp.getData(),dp.getLength(),dp.getAddress(),dp.getPort()); ds.send(outdp); } catch(IOException e) { System.err.println(e); } } public static void main(String[] args) { try { UDPServer server=new UDPEchoServer(); server.start(); System.out.println("Server dang da san sang lang nghe lien ket "); 156 } catch(SocketException e) { System.err.println(e); } } } Client import java.net.*; import java.io.*; public class ReceiverThread extends Thread { private DatagramSocket ds; private boolean stopped=false; public ReceiverThread(DatagramSocket ds) throws SocketException { this.ds=ds; } public void halt(){ this.stopped=true; } public void run() { byte buffer[]=new byte[65507]; while(true) { if(stopped) return; DatagramPacket dp=new DatagramPacket(buffer,buffer.length); try{ ds.receive(dp); String s=new String(dp.getData(),0,dp.getLength()); System.out.println(s); Thread.yield(); } 157 catch(IOException e) { System.err.println(e); } } } } import java.net.*; import java.io.*; public class SenderThread extends Thread { private InetAddress server; private DatagramSocket ds; private boolean stopped=false; private int port; public SenderThread(InetAddress address, int port) throws SocketException { this.server=address; this.port=port; this.ds=new DatagramSocket(); this.ds.connect(server,port); } public void halt(){ this.stopped=true; } public DatagramSocket getSocket() { return this.ds; } public void run() { try{ BufferedReader userInput=new BufferedReader(new InputStreamReader(System.in)); while(true) { if(stopped) return; String line=userInput.readLine(); if(line.equals("exit"))break; 158 byte[] data=line.getBytes(); DatagramPacket dp=new DatagramPacket(data,data.length,server,port); ds.send(dp); Thread.yield(); } } catch(IOException e) { System.err.println(e); } } } Client Echo import java.net.*; import java.io.*; public class UDPEchoClient { public final static int DEFAULT_PORT=7; public static void main(String[] args) { String hostname="localhost"; int port= DEFAULT_PORT; if(args.length>0) { hostname=args[0]; } try{ InetAddress ia=InetAddress.getByName(args[0]); SenderThread sender=new SenderThread(ia,DEFAULT_PORT); sender.start(); ReceiverThread receiver=new ReceiverThread(sender.getSocket()); receiver.start(); } catch(UnknownHostException e) { 159 System.err.println(e); } catch(SocketException e) { System.err.println(e); } } } Kết luận Trong chương này, thảo luận khái niệm giao thức UDP so sánh với giao thức TCP Chúng ta đề cập tới việc cài đặt chương trình UDP Java cách sử dụng hai lớp DatagramPacket DatagramSocket Một số chương trình mẫu giới thiệu để bạn đọc tham khảo giúp hiểu sâu vấn đề lý thuyết 160 ... chức mục đích giao thức họ giao thức TCP/IP theo trình tự sau: • Các giao thức • Các giao thức Internet • Các giao thức E-mail • Các giao thức khác 3.1 Các giao thức Như thấy, họ giao thức TCP/IP... giao thức tầng giao vận tương ứng với tầng mô hình tầng OSI Cả hai giao thức sử dụng giao thức IP, giao thức tương ứng với tầng mô hình OSI (tầng mạng) Cũng ba giao thức có hai giao thức họ giao. .. Mail Transfer Protocol SMTP giao thức để gửi nhận e-mail Nó sử dụng để gửi e-mail client server sử dụng giao thức giao vận, để gửi e-mail server sử dụng giao thức giao vận khác SMTP có khả chuyển

Ngày đăng: 15/01/2017, 11:28

TỪ KHÓA LIÊN QUAN

w