1. Trang chủ
  2. » Giáo án - Bài giảng

GT LAP TRINH MANG

177 1 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

TRƯỜNG ĐẠI HỌC PHAN THIẾT KHOA CÔNG NGHỆ THÔNG TIN - GIÁO TRÌNH LẬP TRÌNH MẠNG LƯU HÀNH NỘI BỘ Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng MỤC LỤC CHƢƠNG I: NHỮNG KIẾN THỨC CƠ BẢN VỀ LẬP TRÌNH MẠNG I.1 TổNG QUAN I.1.1 Tầng Ethernet I.1.2 Địa Ethernet I.1.3 Ethernet Protocol Type I.1.4 Data payload I.1.5 Checksum 10 I.2 TầNG IP 10 I.2.1 Trƣờng địa .11 I.2.2 Các cờ phân đoạn 11 I.2.3 Trƣờng Type of Service 12 I.2.4 Trƣờng Protocol 12 I.3 TầNG TCP 13 I.3.1 TCP port .14 I.3.2 Cơ chế đảm bảo độ tin cậy truyền tải gói tin 16 I.3.3 Quá trình thành lập phiên làm việc TCP 17 I.4 TầNG UDP 18 CHƢƠNG II: LẬP TRÌNH SOCKET HƢỚNG KẾT NỐI 21 II.1 SOCKET 21 II.2 IPADDRESS 24 II.3 IPENDPOINT 25 II.4 LậP TRÌNH SOCKET HƢớNG KếT NốI 25 II.4.1 Lập trình phía Server .26 II.4.2 Lập trình phía Client 30 II.4.3 Vấn đề với đệm liệu 32 II.4.4 Xử lý với đệm có kích thƣớc nhỏ 33 II.4.5 Vấn đề với thông điệp TCP 35 II.4.6 Giải vấn đề với thông điệp TCP 39 II.4.6.1 Sử dụng thông điệp với kích thƣớc cố định 39 II.4.6.2 Gởi kèm kích thƣớc thơng điệp với thông điệp 44 Trang Khoa Công Nghệ Thơng Tin Giáo trình Lập Trình Mạng II.4.6.3 Sử dụng hệ thống đánh dấu để phân biệt thông điệp 50 II.4.7 Sử dụng C# Stream với TCP 50 II.4.7.1 Lớp NetworkStream 50 II.4.7.2 Lớp StreamReader StreamWriter 54 CHƢƠNG III: LẬP TRÌNH SOCKET PHI KẾT NỐI 59 III.1 TổNG QUAN 59 III.2 LậP TRÌNH PHÍA SERVER 60 III.3 LậP TRÌNH PHÍA CLIENT 62 III.3.1 Sử dụng phƣơng thức Connect() chƣơng trình UDP Client 64 III.3.2 Phân biệt thông điệp UDP 65 III.4 NGĂN CảN MấT Dữ LIệU 67 III.5 NGĂN CảN MấT GÓI TIN 70 III.5.1 Sử dụng Soket Time-out .71 III.6 ĐIềU KHIểN VIệC TRUYềN LạI CÁC GÓI TIN 73 CHƢƠNG V: SỬ DỤNG CÁC LỚP HELPER CỦA C# SOCKET 79 IV.1 LớP TCP CLIENT 79 IV.2 LớP TCPLISTENER 82 IV.3 LớP UDPCLIENT 85 CHƢƠNG V: ĐA NHIỆM TIỂU TRÌNH 89 V.1 KHÁI NIệM TIếN TRÌNH VÀ TIểU TRÌNH CủA WINDOWS 89 V.2 MƠ HÌNH 89 V.3 CÁC Kỹ THUậT TRONG NET TạO TIểU TRÌNH 90 V.3.1 Tạo tiểu trình Thread-pool 90 V.3.2 Tạo tiểu trình bất đồng 93 V.3.2.1 Phƣơng thức BlockingExample 96 V.3.2.2 Phƣơng thức PollingExample 97 V.3.2.3 Phƣơng thức WaitingExample 98 V.3.2.4 Phƣơng thức WaitAllExample 99 V.3.2.5 Phƣơng thức CallbackExample 100 V.3.3 Thực thi phƣơng thức Timer 102 V.3.4 Thực thi phƣơng thức tiểu trình .104 V.3.5 Điều khiển trình thực thi tiểu trình 106 V.3.6 Nhận biết tiểu trình kết thúc 110 V.3.7 Khởi chạy tiến trình .112 Trang Khoa Công Nghệ Thông Tin Giáo trình Lập Trình Mạng V.3.8 Kết thúc tiến trình 114 V.4 THựC THI PHƢƠNG THứC BằNG CÁCH RA HIệU ĐốI TƢợNG WAITHANDLE 115 CHƢƠNG V: ĐỒNG BỘ HÓA 117 VI.1 LÝ DO ĐồNG Bộ HÓA 117 VI.2 CÁC PHƢƠNG PHÁP ĐồNG Bộ HÓA 117 VI.3 PHƢƠNG PHÁP SEMAPHORE 117 VI.4 PHƢƠNG PHÁP DÙNG LớP MONITOR 119 VI.5 SYSTEM.THREADING.WAITHANDLE, BAO GồM AUTORESETEVENT, MANUALRESETEVENT 121 VI.6 PHƢƠNG PHÁP MUTEX 124 CHƢƠNG V: LẬP TRÌNH SOCKET BẤT ĐỒNG BỘ 126 VII.1 LậP TRÌNH Sự KIệN TRONG WINDOWS 126 VII.1.1 Sử dụng Event Delegate 127 VII.1.2 Lớp AsyncCallback lập trình Windows 129 VII.2 Sử DụNG SOCKET BấT ĐồNG Bộ 129 VII.2.1 Thành lập kết nối 130 VII.2.1.1 Phƣơng thức BeginAccept() EndAccept() 130 VII.2.1.2 Phƣơng thức BeginConnect() EndConnect() 132 VII.2.2 Gởi liệu .133 VII.2.2.1 Phƣơng thức BeginSend() phƣơng thức EndSend() 133 VII.2.2.2 Phƣơng thức BeginSendTo() EndSendTo() 134 VII.2.3 Nhận liệu 135 VII.2.3.1 Phƣơng thức BeginReceive(), EndReceive, BeginReceiveFrom(), EndReceiveFrom() 135 VII.2.4 Chƣơng trình WinForm gởi nhận liệu Client Server 135 VII.2.4.1 Chƣơng trình Server 135 VII.2.4.2 Mơ hình chƣơng trình Server 135 VII.2.4.3 Lớp ServerProgram 136 VII.2.4.4 Lớp ServerForm 139 VII.2.5 Chƣơng trình Client 140 VII.2.5.1 Mơ hình chƣơng trình Client 141 VII.2.5.2 Lớp ClientProgram 142 VII.2.5.3 Lớp ClientForm 145 Trang Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng VII.3 LậP TRÌNH SOCKET BấT ĐồNG Bộ Sử DụNG TIểU TRÌNH 146 VII.3.1 Lập trình sử dụng hàng đợi gởi hàng đợi nhận thông điệp .146 VII.3.2 Lập trình ứng dụng nhiều Client 152 TÀI LIỆU THAM KHẢO 155 Trang Khoa Công Nghệ Thơng Tin Giáo trình Lập Trình Mạng CHƢƠNG I: NHỮNG KIẾN THỨC CƠ BẢN VỀ LẬP TRÌNH MẠNG I.1 Tổng quan Internet Protocol (IP) tảng lập trình mạng IP phƣơng tiện truyền tải liệu hệ thống hệ thống mạng cục (LAN) hay hệ thống mạng diện rộng (WAN) Mặc dù lập trình viên mạng chọn giao thức khác để lập trình nhƣng IP cung cấp kỹ thuật mạnh để gởi liệu thiết bị, đặc biệt thông qua mạng Internet Để hiểu rõ khái niệm bên dƣới lập trình mạng, phải hiểu rõ giao thức IP, hiểu cách chuyển liệu thiết bị mạng Lập trình mạng dùng giao thức IP thƣờng phức tạp Có nhiều yếu tố cần quan tâm liên quan đến cách liệu đƣợc gởi qua mạng: số lƣợng Client Server, kiểu mạng, tắc nghẽn mạng, lỗi mạng,… Bởi yếu tố ảnh hƣởng đến việc truyền liệu từ thiết bị đến thiết bị khác mạng việc hiểu rõ chúng vấn đề quan trọng để lập trình mạng đƣợc thành cơng Một gói liệu mạng gồm nhiều tầng thông tin Mỗi tầng thông tin chứa dãy byte đƣợc đặt theo trật tự đƣợc định sẵn Hầu hết gói liệu dùng lập trình mạng chứa ba tầng thơng tin với liệu đƣợc dùng để truyền tải thiết bị mạng Hình sau mơ tả hệ thống thứ bậc gói IP: Hình I.1: Các tầng giao thức mạng gói liệu I.1.1 Tầng Ethernet Tầng gói liệu mạng đƣợc gọi Ethernet Header, tầng có ba gói giao thức Ethernet: Ethernet 802.2, Ethernet 802.3, Ethernet phiên Các giao thức Ethernet 802.2 Ethernet 802.3 giao thức chuẩn IEEE Ethernet phiên khơng phải giao thức chuẩn nhƣng đƣợc sử dụng rộng Trang Khoa Công Nghệ Thông Tin Giáo trình Lập Trình Mạng rãi mạng Ethernet Hầu hết thiết bị mạng kể hệ điều hành Windows mặc định dùng giao thức Ethernet phiên để truyền tải gói IP Hình I.2: Ethernet Header Phần đầu Ethernet phiên địa MAC (Media Access Card) dùng để xác định thiết bị mạng với số giao thức Ethernet xác định giao thức tầng chứa gói Ethernet Mỗi gói Ethernet bao gồm: byte địa MAC đích byte địa MAC nguồn byte xác định giao thức tầng Data payload từ 46 đến 1500 byte 4-byte checksum I.1.2 Địa Ethernet Trang Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng Địa Ethernet (địa MAC) địa thiết bị, địa đƣợc gán nhà sản xuất thiết bị mạng không thay đổi đƣợc Mỗi thiết bị mạng Ethernet phải có địa MAC Địa MAC gồm phần: byte xác định nhà sản xuất byte xác định số serial nhà sản xuất Giản đồ địa Ethernet cho phép địa broadcast multicast Đối với địa broadcast tất bit địa đích đƣợc gán (FFFFFFFFFFFF) Mỗi thiết bị mạng chấp nhận gói có địa broadcast Địa hữu ích cho giao thức phải gởi gói truy vấn đến tất thiết bị mạng Địa multicast loại địa đặc biệt địa Ethernet, địa multicast cho phép số thiết bị chấp nhận gói tin Một số địa Ethernet multicast: Địa Chỉ 01-80-C2-00-00-00 Mô Tả Spanning tree (for bridges) 09-00-09-00-00-01 HP Probe 09-00-09-00-00-01 HP Probe 09-00-09-00-00-04 09-00-2B-00-00-00 09-00-2B-00-00-01 HP DTC DEC MUMPS DEC DSM/DTP 09-00-2B-00-00-02 09-00-2B-00-00-03 09-00-2B-00-00-04 09-00-2B-00-00-05 DEC VAXELN DEC Lanbridge Traffic Monitor (LTM) DEC MAP End System Hello DEC MAP Intermediate System Hello 09-00-2B-00-00-06 09-00-2B-00-00-07 09-00-2B-00-00-0F 09-00-2B-00-00-1x 09-00-2B-01-00-00 DEC CSMA/CD Encryption DEC NetBios Emulator DEC Local Area Transport (LAT) DEC Experimental DEC LanBridge Copy packets (all bridges) DEC DNA Lev Routing Layer Routers DEC DNA Naming Service Advertisement 09-00-2B-02-00-00 09-00-2B-02-01-00 09-00-2B-02-01-01 09-00-2B-02-01-02 09-00-2B-03-xx-xx DEC DNA Naming Service Solicitation DEC DNA Time Service DEC default filtering by bridges Trang Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng Địa Chỉ 09-00-2B-04-00-00 Mô Tả DEC Local Area System Transport (LAST) 09-00-2B-23-00-00 DEC Argonaut Console 09-00-4E-00-00-02 09-00-77-00-00-01 Novell IPX Retix spanning tree bridges 09-00-7C-02-00-05 Vitalink diagnostics 09-00-7C-05-00-01 Vitalink gateway 0D-1E-15-BA-DD-06 HP CF-00-00-00-00-00 Ethernet Configuration Test protocol (Loopback) I.1.3 Ethernet Protocol Type Một phần khác quan trọng Ethernet Header trƣờng Protocol Type, trƣờng có kích thƣớc hai byte Sự khác gói tin Ethernet phiên Ethernet 802.2 802.3 xảy trƣờng Các gói tin Ethernet 802.2 802.3 sử dụng trƣờng biết kích thƣớc gói tin Ethernet Ethernet phiên dùng trƣờng để định nghĩa giao thức tầng gói tin Ethernet Một số giá trị trƣờng này: Giá Trị 0800 0806 0BAD 8005 Giao Thức IP ARP Banyan VINES HP Probe 8035 809B Reverse ARP AppleTalk 80D5 8137 IBM SNA Novell 8138 814C 86DD 876B Novell Raw SNMP IPv6 TCP/IP compression I.1.4 Data payload Trang Khoa Công Nghệ Thông Tin Giáo trình Lập Trình Mạng Data payload phải chứa tối thiểu 46 byte để đảm bảo gói Ethernet có chiều dài tối thiểu 64 byte Nếu phần data chƣa đủ 46 byte ký tự đệm đƣợc thêm vào cho đủ Kích thƣớc trƣờng từ 46 đến 1500 byte I.1.5 Checksum Giá trị checksum cung cấp chế kiểm tra lỗi cho liệu, kích thƣớc trƣờng byte Nếu gói tin bị hỏng lúc truyền, giá trị checksum bị tính tốn sai gói tin đƣợc đánh dấu gói tin xấu I.2 Tầng IP Tẩng IP định nghĩa thêm nhiều trƣờng thông tin của giao thức Ethernet Hình I.3: Thơng tin tầng IP Các trƣờng tầng IP: Trƣờng Version Header Length Bit 4 Mô Tả Phiên IP header (phiên 4) Chiều dài phần header gói IP Trang 10 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng public int MessageSize; public byte[] Message = new byte[1024]; public ICMP() { } public ICMP(byte[] data, int size) { Type = data[20]; Code = data[21]; Checksum = BitConverter.ToUInt16(data, 22); MessageSize = size - 24; Buffer.BlockCopy(data, 24, Message, 0, MessageSize); } public byte[] getBytes() { byte[] data = new byte[MessageSize + 9]; Buffer.BlockCopy(BitConverter.GetBytes(Type), 0, data, 0, 1); Buffer.BlockCopy(BitConverter.GetBytes(Code), 0, data, 1, 1); Buffer.BlockCopy(BitConverter.GetBytes(Checksum), 0, data, 2, 2); Buffer.BlockCopy(Message, 0, data, 4, MessageSize); return data; } public UInt16 getChecksum() { UInt32 chcksm = 0; byte[] data = getBytes(); int packetsize = MessageSize + 8; int index = 0; while (index < packetsize) { chcksm += Convert.ToUInt32(BitConverter.ToUInt16(data, index)); index += 2; } chcksm = (chcksm >> 16) + (chcksm & 0xffff); chcksm += (chcksm >> 16); return (UInt16)(~chcksm); } } VIII.1.7 Chƣơng trình ping đơn giản Chƣơng trình ping chƣơng trình quan tronjng, cơng cụ ban đầu để chuẩn đoán khả kết nối thiết bị mạng Chƣơng trình ping dùng gói Trang 163 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng tin ICMP Echo Request (Type 8) để gởi thông điệp đơn giản đến thiết bị xa Khi thiết bị xa nhận thơng điệp, trả lời lại với gói tin ICMP Echo Reply (Type 0) chứa thơng điệp ban đầu Thông điệp ICMP đƣợc dùng lệnh ping Chƣơng trình ping đơn giản: using System; using System.Net; using System.Net.Sockets; using System.Text; class SimplePing { public static void Main(string[] argv) { byte[] data = new byte[1024]; int recv; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPEndPoint iep = new IPEndPoint(IPAddress.Parse(argv[0]), 0); EndPoint ep = (EndPoint)iep; ICMP packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Trang 164 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("goi tin test"); Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.getChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); try { data = new byte[1024]; recv = host.ReceiveFrom(data, ref ep); } catch (SocketException) { Console.WriteLine("Khong co tra loi tu thiet bi o xa"); return; } ICMP response = new ICMP(data, recv); Console.WriteLine("tra loi tu: {0}", ep.ToString()); Console.WriteLine(" Type {0}", response.Type); Console.WriteLine(" Code: {0}", response.Code); int Identifier = BitConverter.ToInt16(response.Message, 0); int Sequence = BitConverter.ToInt16(response.Message, 2); Console.WriteLine(" Identifier: {0}", Identifier); Console.WriteLine(" Sequence: {0}", Sequence); string stringData = Encoding.ASCII.GetString(response.Message, 4, response.MessageSize - 4); Console.WriteLine(" data: {0}", stringData); host.Close(); } } Chƣơng trình ping đơn giản yêu cầu địa IP đƣợc dùng command line Trong phần chƣơng trình này, gói tin ICMP đƣợc tạo ra, trƣờng Type có giá trị Code có giá trị Nó tạo gói tin Echo Request Trang 165 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng sử dụng trƣờng Identifier Sequence để theo dõi gói tin riêng biệt cho phép nhập text vào phần liệu Cũng giống nhƣ chƣơng trình hƣớng phi kết nối nhƣ UDP, giá trị timeout đƣợc thiết lập cho Socket dùng phƣơng thức SetSocketOption() Nếu khơng có gói tin ICMP trả giây, biệt lệ đƣợc ném chƣơng trình Gói tin ICMP trả tạo đối tƣợng ICMP mới, đối tƣợng dùng để định gói tin nhận đƣợc khớp với gói tin ICMP gởi Trƣờng Identifier, Sequence phần liệu gói tin nhận phải khớp giá trị gói tin gởi VIII.1.8 Chƣơng trình TraceRoute đơn giản Chƣơng trình traceroute gởi ICMP Echo Request đến máy xa để biết đƣợc router mà qua đích Bằng cách thiết lập trƣờng TTL (time to live) gói tin IP tăng lên giá trị qua router, chƣơng trình traceroute bắt buộc gói tin ICMP bị loại bỏ router khác đƣờng tới đích Mỗi lần trƣờng TTL hết hạn, router cuối gởi trả gói tin (Type 11) cho thiết bị gởi Bằng cách đặt giá trị khởi đầu cho trƣờng TTL 1, gói tin IP qua router giá trị TTL giảm Sau lần thiết bị gởi nhận đƣợc gói tin ICMP Time Exceeded trƣờng TTL đƣợc tăng lên Bằng cách hiển thị địa gởi gói tin ICMP Time Exceeded, ta xác định đƣợc chi tiết đƣờng gói tin tới đích Chƣơng trình traceroute sử dụng phƣơng thức SetSocketOption() tùy chọn IPTimeToLive Socket để thay đổi giá trị TTL gói tin IP Bởi có trƣờng TTL gói tin IP bị thay đổi, gói tin ICMP đƣợc tạo lần đƣợc sử dụng lần sử dụng gói tin IP Chƣơng trình traceroute đơn giản: using System; using System.Net; using System.Net.Sockets; using System.Text; class TraceRoute { public static void Main(string[] argv) { Trang 166 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng byte[] data = new byte[1024]; int recv, timestart, timestop; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPHostEntry iphe = Dns.Resolve(argv[0]); IPEndPoint iep = new IPEndPoint(iphe.AddressList[0], 0); EndPoint ep = (EndPoint)iep; ICMP packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("goi tin test"); Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.getCchecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); int badcount = 0; for (int i = 1; i < 50; i++) { host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, i); timestart = Environment.TickCount; host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); try { data = new byte[1024]; recv = host.ReceiveFrom(data, ref ep); timestop = Environment.TickCount; ICMP response = new ICMP(data, recv); if (response.Type == 11) Console.WriteLine("Chang {0}: tra loi tu {1}, {2}ms", i, ep.ToString(), timestop - timestart); if (response.Type == 0) { Console.WriteLine("{0} den {1} chang, {2}ms.", ep.ToString(), i, timestop - timestart); break; } badcount = 0; } catch (SocketException) { Console.WriteLine("chang {0}: khong co tra loi tu thiet bi o xa", i); badcount++; if (badcount == 5) { Console.WriteLine("Khong the lien lac voi thiet bi o xa"); break; } } } host.Close(); } } VIII.2 LẬP TRÌNH VỚI GIAO THỨC SMTP Trang 167 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng VIII.2.1 Cơ Email Hầu hết gói tin email Internet dùng mơ hình email Unix Mơ hình trở nên phổ biến đƣợc sử dụng rộng rãi để phân phá thƣ đến ngƣời dùng cục ngƣời dùng xa Mô hình email Unix chia chức email làm phần:  The Message Transfer Agent (MTA)  The Message Delivery Agent (MDA)  The Message User Agent (MUA) Mỗi phần thực chức riêng biệt trình gởi, nhận hiển thị thƣ VIII.2.1.1 Hoạt động MTA MTA điều khiển mail gởi đến mail gởi đi, trƣớc đƣợc chia làm chức riêng biệt: Quyết định nơi cách gởi mail Quyết định noi chuyển mail đến Mỗi chức yêu cầu chức xử lý khác MTA Mô hình email Unix Trang 168 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng VIII.2.1.2 Gởi mail ngồi Với mail đƣợc gởi ngoài, MTA phải định đích địa nhận Nếu đích hệ thống cục bộ, MTA chuyển mail trực tiếp hệ thống mailbox cục chuyển mail đến MDA để phát mail Tuy nhiên, đích domain xa, MTA phải thực chức sau:  Quyết định mail server domain có sử dụng mục MX DNS hay khơng  Thành lập liên kết thông tin với mail server xa chuyển mail Liên kết thông tin với mail server xa luôn dùng SMTP (Simple Mail Transfer Protocol) Giao thức chuẩn cung cấp ký thuật giao tiếp chung để chuyển mail hệ thống mail khác Internet VIII.2.1.3 Nhận mail MTA chịu trách nhiệm nhận thƣ gởi đến từ hệ thống cục từ ngƣời dùng xa Địa đích thƣ phải đƣợc xem xét kỹ lƣỡng định phải đƣợc thực cho biết thƣ thực đƣợc gởi từ hệ thống cục hay khơng Có danh mục địa đích đƣợc dùng thƣ: tài khoản cục hệ thống, tài khoản bí danh cục bộ, tài khoản ngƣời dùng xa Các tài khoản cục hệ thống: hệ thống mail, dù Window hay Unix hay Macintosh có tập hợp tài khoản cục truy cập vào hệ thống MTA phải nhận thƣ mail có đích tài khỏa ngƣời dùng chuyển trực tiếp đến hộp thƣ ngƣời dùng đến MDA riêng biệt để chuyển Các tài khoản bí danh cục bộ: Nhiều MTA cho phép tên bí danh đƣợc tạo Tên bí danh khơng thể lƣu giữ thƣ, thay sử dụng trỏ đến nhiều ngƣời dùng hệ thống thực nơi mà thƣ đƣợc lƣu trữ Mỗi MTA định tên bí danh hợp lệ, chuyển đổi địa đích thành hệ thống tên tài khoản ngƣời dùng thực sự, Các tài khoản ngƣời dùng xa: nhiều MTA chấp nhận thƣ gởi đến mà đích tài khoản ngƣời dùng khơng nằm hệ thống cục Đây công việc Trang 169 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng địi hỏi phải có nhiều kỹ thuật, nhiều khó khăn để MTA điều khiển việc gởi mail đến hệ thống tài khoản xa Kỹ thuật đƣợc gọi relying Một mail server chấp nhận thƣ gởi đến mà đích tài khoản máy xa tự động chuyển thƣ đến máy xa Nhiều ISP, tính cần thiết khác hàng khơng có khả gởi thƣ trực tiếp đến máy xa Thay vậy, họ gởi thƣ đến mail server ISP, mail server ISP tự động chuyển thƣ đến hệ thống đích Thật khơng may mắn, việc chuyển tiếp mail bị khai thác, ngƣời dùng sử dụng mail server chuyển tiếp để ẩn địa nguồn chuyển hàng loạt thƣ rác đến ngƣời dùng hệ thống email xa, email phải đƣợc chặn lại ngƣời quản trị mail VIII.2.1.4 Hoạt động MDA Chức MDA chuyển thƣ có đích tài khoản ngƣời dùng hệ thống cục Để làm đƣợc điều này, MDA phải biết kiểu vị trí mailbox cá nhân Hầu hết hệ thống email sử dùng số kiểu hệ thống sở liệu để theo dõi thƣ đƣợc lƣu giữ ngƣời dùng cục MDA phải truy cập đến mailbox ngƣời dùng để chèn thƣ đƣợc gởi đến Nhiều MDA thực kỹ thuật nâng cao để chuyển tiếp thƣ: Tự động lọc thƣ: chức phổ biến MDA để lọc thu đến Đối với ngƣời dùng phải nhận hàng đống email ngày tính tuyệt vời Các thƣ đƣợc tự động xếp theo thƣ mục riêng biệt dựa vào giá trị header, hay vài từ header Hầu hết MDA cho phép nhà quản trị mail cấu hình lọc tồn hệ thống để chặn thƣ rác thƣ có virus Tự động trả lời thƣ: nhiều chƣơng trình MDA cho phép ngƣời dùng cấu hình tự chuyển thƣ, số thƣ tự động trả lời đƣợc cấu hình để trả lời tất thƣ đƣợc nhận ngƣời dùng, số khác đƣợc cấu hình tự động trả lời dựa vào số từ đặc biệt header Trang 170 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng Tự động chạy chƣơng trình: khả khởi động chƣơng trình hệ thống dựa vào số mail đến, công cụ quản trị nhà quản trị Nhà quản trị hệ thống mail khởi động hệ thống mail từ xa hay cấu hình mail server từ máy khác mail server VIII.2.1.5 Hoạt động MUA MUA cho phép ngƣời dùng khơng ngồi trƣớc mail server truy cập hộp thƣ họ MUA chịu trách nhiệm đọc thƣ hộp thƣ, khơng thể nhận gởi thƣ Có vấn đề phức tạp với MUA việc đọc lƣu trữ thƣ đến: Lƣu giữ thƣ Client Nhiều ISP thích ngƣời dùng tải thƣ họ Mỗi thƣ đƣợc tải về, bị gở bỏ khỏi mail server Điều giúp cho ngƣời quản trị mail bảo tồn đƣợc khơng gian lƣu trữ server Giao thức đƣợc dùng cho loại truy cập POP (Post Office Protocol, thƣờng đƣợc gọi POP3 cho version 3) Chƣơng trình MUA POP3 cho phép ngƣời dùng kết nối đến server tải tất thƣ hộp thƣ Q trình đƣợc mơ tả hình sau: Quá trình tải thƣ sử dụng phần mềm POP3 Trang 171 Khoa Công Nghệ Thông Tin Giáo trình Lập Trình Mạng Điều trở ngại sử dụng POP3 thƣ đƣợc lƣu giữ trạm làm việc nơi mà ngƣời dùng kết nối tới mail server Nếu ngƣời dùng kết nối sử dụng nhiều trạm làm việc thƣ bị chia trạm làm việc làm cho ngƣời dùng khó truy cập thƣ sau tải thƣ xong Hiện số ISP cho phép tải thƣ sử dụng POP3 mà khơng xóa khỏi hộp thƣ Lƣu giữ thƣ Server Một phƣơng thức truy cập thƣ thay cho POP3 IMAP (Interactive Mail Access Protocol hay IMAPPrev4 cho version 4) IMAP cho phép ngƣời dùng xây dựng thƣ mục mail server lƣu giữ thƣ thƣ mục thay phải tải xuống trạm làm việc Bởi thƣ đƣợc lƣu giữ server, ngƣời dùng kết nối từ trạm làm việc để đọc thƣ Quá trình đƣợc mơ tả nhƣ hình sau: Lƣu giữ thƣ server thƣ mục sử dụng IMAP Điều trở ngại hệ thống việc tiêu tốn dung lƣợng đĩa server The NET mail library uses the Microsoft CDOSYS message component to send messages to remote hosts using SMTP One significant area of confusion is when and how Windows OSes provide support for CDOSYS and how the CDOSYS relates to NET This section will shed some light on this topic, in addition to answering questions about CDOSYS Trang 172 Khoa Công Nghệ Thông Tin Giáo trình Lập Trình Mạng VIII.2.2 SMTP Windows Thƣ viện mail NET sử dụng Microsoft CDOSYS để gởi thƣ đến máy xa dùng SMTP VIII.2.2.1 Collaboration Data Objects (CDO) Hệ thống mail Microsoft Exchange sử dụng thƣ viện Active Message (OLEMSG32.DLL) cho phép lập trình viên viết code dùng hệ thống Exchange chuyển thƣ đến hộp thƣ ngƣời dùng nhƣ đến hệ thống Exchange khác mạng Exchange Với phát hành Exchange 5.5, hệ thống thƣ đƣợc giới thiệu CDO (Collaboration Data Object) Không giống nhƣ Active Messaging, CDO sử dụng MAPI (Message Application Program Interface) để cung cấp cho lập trình viên cách dễ để gởi thƣ CDO tồn qua vài năm với nhiều cải tiến bao gồm phiên 1.1, 1.2 1.2.1 Nền tảng Microsoft NT Server sau sử dụng thƣ viện CDO NT Server (CDONTS) Thƣ viện không dùng chuẩn MAPI đƣợc sử dụng CDO mà bắt đầu sử dụng chuẩn Internet nhƣ SMTP để chuyển thƣ đến máy xa Phiên CDO (CDO 2) đƣợc phát hành chung với Windows 2000 đƣợc dùng Windows XP Nó sử dụng CDONTS để cung cấp thƣ viện mail news cho lập trình viên Các thành phần CDO bao gồm khả xử lý nhiều file đính kèm thƣ nhiều kiện giao thức mail khác Những tính giúp cho lập trình viên dễ dàng việc lập trình Trong Windows 2000, XP, thƣ viện CDO CDOSYS.DLL, tất chức thƣ viện mail NET phải cần tập tin Bởi CDO hoàn toàn khác với phiên CDO 1.x nên hệ thống cần thƣ viện CDO khơng tƣơng thích lùi với tảng Windows cũ VIII.2.2.2 Dịch vụ mail SMTP Cả Windows 2000 Windows XP cung cấp server SMTP hỗ trợ gởi nhận thƣ sử dụng giao thức SMTP Chức phần IIS Trang 173 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng (Internet Information Services) Các lớp mail NET sử dụng IIS SMTP Server để gởi thƣ trực tiếp đến mail server xa Trƣớc sử dụng SMTP, phải cấu hình cho nó, việc cấu hình đƣợc thực từ cửa sổ Computer Management Các bƣớc cấu hình nhƣ sau: Nhấn chuột phải vào My Computer, chọn Manage Khi cửa sổ Computer Management xuất hiện, mở Services and Applications sau mở Internet Information Services Nhấn chuột phải vào Default SMTP Virtual Server chọn Properties Cửa sổ Properties nơi để cấu hình thiết lập cho dịch vụ SMTP Trong thẻ General, chọn card mạng cho phép kết nối SMTP tới số lƣợng kết nối SMTP đồng thời đƣợc phép Chúng ta bật/tắt việc ghi log cho dịch vụ SMTP Trong thẻ Delivery, cấu hình số lần cố gắng gởi thƣ Nút Advanced thiết lập thơng minh cho mail server Cấu hình quan trọng mail server ISP server chuyển tếp đến mail server xa Để làm điều này, phải, nhập địa mail server ISP dịch vụ SMTP chuyển tiếp tất thƣ ngồi thơng qua server Trang 174 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng Default SMTP Virtual Properties VIII.2.3 Lớp SmtpMail Lớp SmtpMail nằm namespace System.Web.Mail cho phép gởi thƣ theo giao thức SMTP chƣơng trình C# VIII.2.4 Các phƣơng thức thuộc tính lớp SmtpMail Lớp SmtpMail cung cấp giao tiếp NET cho thƣ viện mail CDOSYS hệ thống Windows 200 Windows XP Nó khơng dùng phƣơng thức tạo lập để tạo thể lớp Thay vậy, ta phải dùng phƣơng thức thuộc tính static để truyền thông tin cho thƣ viện CDOSYS Phƣơng thức Send() lớp SmtpMail hay đƣợc dùng nhất, phƣơng thức Send() đƣợc tải hàm có định dạng nhƣ sau: Send(MailMessage message) Send(string from, string to, string subject, string body) Trang 175 Khoa Công Nghệ Thông Tin Giáo trình Lập Trình Mạng Định dạng cho phép gởi đối tƣợng MailMessage Lớp MailMessage chứa thông điệp email, thông điệp đƣợc tạo cách gán giá trị cho thuộc tính lớp với thông tin liên quan đến thông điệp địa đích Định dạng thứ cho phép gởi thông điệp dạng raw, phải trƣờng header thông điệp email: From: ngƣời gởi thông điệp To: địa nhận thông điệp, ngăn cách dấu phẩy Subject: tiêu đề thƣ Đối số cuối phƣơng thức Send() phần thân thƣ Phần text HTML Thuộc tính lớp SmtpMail SmtpServer Nó thuộc tính static địa server chuyển tiếp thƣ đƣợc dùng để chuyển tiếp thơng điệp mail ngồi Mặc định, thuộc tính SmtpSerrver đƣợc thiết lập cho dịch vụ SMTP IIS IIS đƣợc cài Nếu IIS khơng đƣợc cài, thuộc tính SmtpServer đƣợc thiết lập giá trị null phát sinh lỗi gởi thông điệp Nếu sử dụng mail server chuyển tiếp, phải thiết lập giá trị cho thuộc tính SmtpServer trƣớc gởi thơng điệp SmtpMail.SmtpServer = "mailsrvr.myisp.net"; Khi tât giá trị đƣợc thiết lập, tất thƣ gởi đƣợc chuyển tiếp qua mail server Tất nhiên, phải đảm bảo server cho phép chuyển tiếp mail qua VIII.2.4.1 Sử dụng lớp SmtpMail Chƣơng trình MailTest sau minh họa cách tạo email đơn giản gởi thơng qua mail rely đến ngƣời nhận: Trang 176 Khoa Công Nghệ Thơng Tin Giáo trình Lập Trình Mạng TÀI LIỆU THAM KHẢO [1] C Sharp Network Programming, Sybex [2] Microsoft Network Programming For The Microsoft Dot Net Framework, Microsoft Press [3] Network programming in dot NET C Sharp and Visual Basic dot NET, Digital Press Trang 177 ... Version Header Length Bit 4 Mô Tả Phiên IP header (phiên 4) Chiều dài phần header gói IP Trang 10 Khoa Cơng Nghệ Thơng Tin Giáo trình Lập Trình Mạng Trƣờng Type of Service Total Length Bit 16 Mô... Trình Mạng Hình I.7: UDP Header UDP header gồm trƣờng sau: Source Port Destination Port Message Length Checksum Next Level Protocol Cũng giống nhƣ TCP, UDP theo dõi kết nối cách sử dụng port từ 1024->65536,... string welcome = "Hello Client"; buff = Encoding.ASCII.GetBytes(welcome); client.Send(buff, buff.Length, SocketFlags.None); Phƣơng thức Send() Socket dùng để gởi liệu, phƣơng thức có số đối số quan

Ngày đăng: 08/11/2022, 15:50

Xem thêm:

w