Giáo trình Lập trình mạng trình bày các nội dung chính: các kiến thức cơ bản về mạng máy tính, lập trình mạng trong NET FRAMEWORK, xây dựng ứng dụng mạng, xây dựng ứng dụng nhiều lớp. Đây là tài liệu tham khảo dành cho sinh viên ngành Quản trị mạng.
Trang 1CHƯƠNG 1: CÁC KI N TH C CƠ B N V M NG MÁY TÍNH 3
1.1 Mô hình tham kh∀o 7 t%ng OSI 3
1.2 H∗ giao th,c TCP/IP 5
1.3 So sánh gi3a hai giao th,c TCP và UDP 6
1.4 C:ng giao th,c 7
1.5 ð<a ch= IP, các ñ<a ch= IP dành riêng 7
1.6 ð<a ch= tên miΧn: loΕi A, loΕi MX .8
1.7 MΙt sϑ giao th,c Κ t%ng ,ng dΛng: HTTP, SMTP, POP3, FTP 8
CHƯƠNG 2: LΟP TRÌNH M NG TRONG NET FRAMEWORK 9
2.1 Socket hưWng kΞt nϑi (TCP Socket) 9
2.1.1 GiWi thi[u vΧ NameSpace System.Net và System.Net.Sockets 10
2.1.2 ViΞt chương trình cho phía máy chβ 11
2.1.3 ViΞt chương trình cho phía máy khách 13
2.1.4 Sχ dΛng các luδng nhεp xuγt vWi Socket 14
2.2 Socket không hưWng kΞt nϑi (UDP Socket) 17
2.2.1 ViΞt chương trình cho phía máy chβ 17
2.2.2 ViΞt chương trình cho phía máy khách 18
2.2.3 Sχ dΛng lWp System.IO.MemoryStream ñη tΕo vùng ñ[m nhεp xuγt 20
2.3 Sχ dΛng các lWp hϕ trκ ñưκc xây dmng tν lWp Soket 20
2.3.1 LWp TCPClient 21
2.3.2 LWp TCPListener 22
2.3.3 LWp UDPClient 24
2.4 Socket không ñδng bΙ 26
2.4.1 Mô hình xχ lý sm ki[n cβa windows 26
2.4.2 Sχ dΛng Socket không ñδng bΙ 27
2.4.3 Ví dΛ vΧ Socket không ñδng bΙ 28
2.4.4 Sχ dΛng các phương th,c Nonρblocking 35
2.5 Sχ dΛng Thread trong các ,ng dΛng mΕng 39
2.5.1 Sχ dΛng Thread trong chương trình Net 40
2.5.2 Sχ dΛng Thread trong các chương trình Server 41
2.5.3 Sχ dΛng Thread ñη gχi/nhεn d3 li[u 41
2.5.4 Sχ dΛng ThreadPool trong các chương trình Net 43
2.5.5 Sχ dΛng ThreadPool trong các chương trình Server 47
2.6 Kσ thuεt IP Multicasting 48
2.6.1 Broadcasting là gì? 48
2.6.2 Sχ dΛng Broadcasting ñη gχi d3 li[u ñΞn nhiΧu máy trong mΕng cΛc bΙ 48
2.6.3 Multicasting là gì? 49
2.6.4 Socket Multicasting trong Net 50
2.7 Bài tεp áp dΛng 53
CHƯƠNG 3: XÂY DϖNG NG DωNG M NG 55
3.1 Giao th,c ICMP 55
3.1.1 Sχ dΛng Raw Socket 55
3.1.2 Sχ dΛng giao th,c ICMP và Raw Socket ñη xây dmng chương trình Ping 57
3.1.3 Sχ dΛng giao th,c ICMP và Raw Socket ñη xây dmng chương trình TraceRoute 58 3.2 Giao th,c SMTP, POP3 60
3.2.1 Cơ b∀n vΧ h[ thϑng Mail và giao th,c SMTP, POP3 60
3.2.2 Cài ñξt SMTP, POP3 Client/Server 60
3.3 Giao th,c HTTP 67
3.3.1 Cơ b∀n vΧ giao th,c HTTP 67
3.3.2 Cài ñξt HTTP Client/Server 68
3.4 Giao th,c FTP 74
3.4.1 Cơ b∀n vΧ giao th,c FTP 74
3.4.2 Cài ñξt FTP Client/Server 84
Trang 23.5 DNS (Domain Name Server) 88
3.5.1 Vγn ñΧ phân gi∀i tên miΧn 88
3.5.2 Triηn khai DNS MX (Mail Exchange) 89
3.6 Th∀o luεn vΧ các ,ng dΛng khác thưψng gξp 93
3.7 Bài tεp áp dΛng 93
CHƯƠNG 4: XÂY DϖNG NG DωNG NHI U LζP 94
4.1 Mô hình 2 lWp (two tier), 3 lWp (three tier) và n lWp .94
4.2 Remoting 98
4.2.1 GiWi thi[u vΧ Remoting 102
4.2.2 Khai báo, cài ñξt và ñăng ký giao di[n tν xa 102
4.2.3 Tri[u g∗i phương th,c tν xa 107
4.3 Web Serive 107
4.3.1 GiWi thi[u vΧ Web Serives 107
4.3.2 Giao th,c SOAP 109
4.3.3 Xây dmng Web Services 112
4.3.4 Tri[u g∗i Web Services tν ,ng dΛng NET, Java và các ngôn ng3 khác 114
4.4 Th∀o luεn vΧ các ,ng dΛng phân tán 116
4.5 Bài tεp áp dΛng 116
Trang 3CHƯƠNG 1: CÁC KI N TH C CƠ B N V M NG MÁY TÍNH
1.1 Mô hình tham kh!o 7 t∃ng OSI
Mô hình kΞt nϑi h[ thϑng mΚ ñưκc T: ch,c quϑc tΞ vΧ tiêu chu∼n hoá ISO (International Organizaiton for Standardization) ñưa ra nh•m cung cγp mΙt mô hình chu∼n cho các nhà s∀n xuγt và cung cγp s∀n ph∼m vi‚n thông áp dΛng theo ñη phát triηn các s∀n ph∼m vi‚n thông Ý tưΚng mô hình hoá ñưκc tΕo ra còn nh•m hϕ trκ cho vi[c kΞt nϑi gi3a các h[ thϑng và modun hoá các thành ph%n phΛc vΛ mΕng viΞn thông
a Ch(c năng c+a mô hình OSI:
ρ Cung cγp kiΞn th,c vΧ hoΕt ñΙng cβa kΞt nϑi liên mΕng
ρ ðưa ra trình tm công vi[c ñη thiΞt lεp và thmc hi[n mΙt giao th,c cho kΞt nϑi các thiΞt b< trên mΕng
Mô hình OSI còn có mΙt sϑ thuεn lκi sau :
ρ Chia nh† các hoΕt ñΙng ph,c tΕp cβa mΕng thành các ph%n công vi[c ñơn gi∀n
ρ Cho phép các nhà thiΞt kΞ có kh∀ năng phát triηn trên tνng modun ch,c năng
ρ Cung cγp các kh∀ năng ñ<nh nghĩa các chu∼n giao tiΞp có tính tương thích cao
“plug and play” và tích hκp nhiΧu nhà cung cγp s∀n ph∼m
b Cưu trúc mô hình OSI:
Mô hình OSI gδm 7 lWp (level), mϕi lWp thmc hi[n các ch,c năng riêng cho hoΕt ñΙng kΞt nϑi mΕng
Hình 111 Mô t∀ b∼y lWp OSI 4 lWp ñ%u ñ<nh nghĩa cách th,c cho ñ%u cuϑi thiΞt lεp kΞt nϑi vWi nhau ñη trao ñ:i d3 li[u 3 lWp trên dùng ñη phát triηn các ,ng dΛng ñη ñ%u cuϑi kΞt nϑi vWi nhau và ngưψi dùng
Aplication Presentation Application
(Upper Layer) Session
Transport Layer Network Layer Data Link Physical
Data Lower Layer
Các l4p trên
3 lWp trên cùng cβa mô hình OSI thưψng ñưκc g∗i là các lWp ,ng dΛng (Application layers) hay còn g∗i là các lWp cao Các lWp này thưψng liên quan tWi giao tiΞp vWi ngưψi dùng, ñ<nh dΕng cβa d3 li[u và phương th,c truy nhεp các ,ng dΛng ñó
Hình 112 Mô t∀ các lWp trên và cung cγp thông tin vWi các ch,c năng cβa nó qua ví dΛ:
ρ LWp ,ng dΛng: ch,c năng giao Telnet, HTTP
Trang 4Application tiΞp gi3a ngưψi sχ dΛng và các
chương trình ,ng dΛng
Presentation
ρ LWp trình bày: cách th,c chu∼n hoá d3 li[u và trình bày sϑ li[u
ρ Có ch,c năng ñξc bi[t là mã hoá d3 li[u ngưψi sχ dung
ASSCII EBCDIC JPEC
Session
ρ LWp phiên: thiΞt lεp, duy trì và huŒ b† mΙt phiên làm vi[c
NFS, SQL
Transport Layer
Network Layer
Data Link
Physical
ρ Application layer : ñây là lWp cao nhγt trong mô hình Nó là nơi mà ngưψi sχ dΛng hoξc kΞt nϑi các chương trình ,ng dΛng vWi các thβ tΛc cho phép truy nhεp vào mΕng
ρ Presentation layer : LWp presentation cung cγp các mã và ch,c năng ñη chuyηn ñ:i mà ñưκc cung cγp bΚi lWp ,ng dΛng Các ch,c năng ñó ñ∀m b∀o r•ng d3 li[u tν lWp ,ng dΛng trong mΙt h[ thϑng có thη ñưκc ñ∗c bΚi lWp ,ng dΛng cβa mΙt h[ thϑng khác VD : dùng ñη mã hoá d3 li[u tν lWp ,ng dΛng : như mã hoá ∀nh jpeg , gif Mã ñó cho phép ta có thη hi[n lên trang web
ρ Session layer : ñưκc sχ dΛng ñη thiΞt lεp, duy trì và kΞt thúc phiên làm vi[c gi3a các lWp presentation Vi[c trao ñ:i thông tin Κ lWp này bao gδm yêu c%u d<ch vΛ
và ñáp ,ng yêu c%u cβa các ,ng dΛng trên thiΞt b< khác
Các l4p dư4i
4 lWp dưWi cβa mô hình OSI sχ dΛng ñη ñ<nh nghĩa làm thΞ nào ñη d3 li[u ñưκc truyΧn ñi trong các dây nϑi vεt lý, các thiΞt b< mΕng và ñi ñΞn trΕm ñ%u cuϑi cuϑi cùng
là ñΞn các lWp ,ng dΛng Quγn sách này ta ch= quan tâm ñΞn 4 lWp cuϑi Và s• xem xét tνng lWp mΙt cách chi tiΞt giao thiΞp gi3a các lWp trong mô hình OSI:
Sχ dΛng phương pháp protocal stack ñη kΞt nϑi gi3a hai thiΞt b< trong mΕng Protocal stack là mΙt tεp hκp các quy ñ<nh dùng ñη ñ<nh nghĩa làm thΞ nào ñη d3 li[u truyΧn qua mΕng
Ví dΛ vWi : TCP/IP mϕi Layer cho phép d3 li[u truyΧn qua Các lWp ñó trao ñ:i các thông tin ñη cung cγp cuΙc liên lΕc gi3a hai thiΞt b< trong mΕng Các lWp giao tiΞp vWi nhau sχ dΛng Protocal Data Unit (PDU) Thông tin ñiηu khiηn cβa PDU ñưκc thêm
Trang 5vào vWi d3 li[u Κ lWp trên Và thông tin ñiΧu khiηn này n•m trong trưψng g∗i là trưψng header và trailer
Hình 1ρ3 Data encapsulation
!
∀#∀###∀#∀#∀∀#∀∀∀∀#∀
1.2 H; giao th(c TCP/IP
Các t%ng cβa giao th,c TCP/IP so vWi cγc t%ng cβa mô hình OSI
Application: Xác nhεn quyΧn, nén d3 li[u và các d<ch vΛ cho ngưψi dùng
Transport: Xχ lý d3 li[u gi3a các h[ thϑng va cung cγp vi[c truy cεp mΕng cho các ,ng dΛng
Network: Tìm ñưψng cho các packet
Trang 6Link: M,c OS hoξc các thiΞt b< giao tiΞp mΕng trên mΙt máy tính
M>t s≅ ñiΒm khác nhau c+a TCP/IP và mô hình OSI
+ LWp ,ng dΛng trong TCP/IP xχ lý ch,c năng cβa lWp 5,6,7 trong mô hình OSI
+ LWp transport trong TCP/IP cung cγp cW chΞ UDP truyΧn không tin cεy, transport trong OSI luôn ñ∀m b∀o truyΧn tin cεy
+ TCP/IP là mΙt tεp cβa các protocols (mΙt bΙ giao th,c)
+ TCP/IP xây dmng trưWc OSI
Quy trình ñóng gói dΗ liΙu trong mô hình TCP/IP như sau:
1.3 So sánh giΗa hai giao th(c TCP và UDP
Trang 71.4 CΝng giao th(c
Là mΙt sϑ năm trong kho∀ng 1 65535 dùng ñη phân bi[t gi3a 2 ,ng dΛng mΕng vWi nhau g’n vWi ñ<a ch= IP và Socket
MΙt sϑ c:ng và các giao th,c thông dΛng:
+ FTP: 21
+ Telnet: 23
+ SMTP: 25
+ POP3: 110
+ HTTP:80
1.5 ðΘa chΡ IP, các ñΘa chΡ IP dành riêng
Trang 81.6 ðΘa chΡ tên miΥn: loςi A, loςi MX
1.7 M>t s≅ giao th(c Ψ t∃ng (ng dΖng: HTTP, SMTP, POP3, FTP
Trang 9CHƯƠNG 2: L]P TRÌNH M NG TRONG NET FRAMEWORK
2.1 Socket hư4ng kχt n≅i (TCP Socket)
Socket là mΙt giao di[n lεp trình ,ng dΛng (API) mΕng
Thông qua giao di[n này chúng ta có thη lεp trình ñiΧu khiηn vi[c truyΧn thông gi3a hai máy sχ dΛng các giao th,c m,c thγp là TCP, UDP…
Socket là sm trνu tưκng hoá Κ m,c cao, có thη tưΚng tưκng nó như là thiΞt b< truyΧn thông hai chiΧu gχi – nhεn d3 li[u gi3a hai máy tính vWi nhau
Các loΕi Socket
Socket hưWng kΞt nϑi (TCP Socket) Socket không hưWng kΞt nϑi (UDP Socket) Raw Socket
ðξc ñiηm cβa Socket hưWng kΞt nϑi
Có 1 ñưψng kΞt nϑi ∀o gi3a 2 tiΞn trình MΙt trong 2 tiΞn trình ph∀i ñκi tiΞn trình kia yêu c%u kΞt nϑi
Có thη sχ dΛng ñη liên lΕc theo mô hình Client/Server Trong mô hình Client/Server thì Server l’ng nghe và chγp nhεn mΙt yêu c%u kΞt nϑi
Mϕi thông ñi[p gχi ñΧu có xác nhεn trΚ vΧ Các gói tin chuyηn ñi tu%n tm
ðφc ñiΒm c+a Socket không hư4ng kχt n≅i
Hai tiχn trình liên lςc v4i nhau không kχt n≅i trγc tiχp Thông ñiΙp gηi ñi ph!i kèm theo ñΘa chΡ c+a ngưϕi nhκn Thông ñiΙp có thΒ gηi nhiΥu l∃n
Ngưϕi gηi không chλc chλn thông ñiΙp t4i tay ngưϕi nhκn Thông ñiΙp gηi sau có thΒ ñχn ñích trư4c thông ñiΙp gηi trư4c ñó
Sϑ hi[u c:ng cβa Socket
Trang 10ðη có thη thmc hi[n các cuΙc giao tiΞp, mΙt trong hai quá trình ph∀i công
bϑ sϑ hi[u c:ng cβa socket mà mình sχ dΛng
Mϕi c:ng giao tiΞp thη hi[n mΙt ñ<a ch= xác ñ<nh trong h[ thϑng Khi quá trình ñưκc gán mΙt sϑ hi[u c:ng, nó có thη nhεn d3 li[u gΚi ñΞn c:ng này tν các quá trình khác
Quá trình còn lΕi cũng yêu c%u tΕo ra mΙt socket
2.1.1 Gi i thi u v NameSpace System.Net và System.Net.Sockets
Cung cγp mΙt giao di[n lεp trình ñơn gi∀n cho rγt nhiΧu các giao th,c mΕng
Có rγt nhiΧu lWp ñη lεp trình
Ta quan tâm lWp IPAdress, IPEndPoint, DNS, …
LWp IPAdress
MΙt sϑ Field c%n chú ý:
Any: Cung cγp mΙt ñ<a ch= IP ñη ch= ra r•ng Server ph∀i l’ng nghe trên tγt c∀ các Card mΕng
Broadcast: Cung cγp mΙt ñ<a ch= IP qu∀ng bá Loopback: Tr∀ vΧ mΙt ñ<a ch= IP lξp
AdressFamily: Tr∀ vΧ h∗ ñ<a ch= cβa IP hi[n hành LWp IPAddress
MΙt sϑ phương th,c c%n chú ý:
Phương th,c khΚi tΕo
IPAddress(Byte[]) IPAddress(Int64) IsLoopback: Cho biΞt ñ<a ch= có ph∀i ñ<a ch= lξp không Parse: Chuyηn IP dΕng xâu vΧ IP chu∼n
ToString: Tr∀ ñ<a ch= IP vΧ dΕng xâu TryParse: Kiηm tra IP Κ dΕng xâu có hκp l[ không?
LWp IPEndPoint
MΙt sϑ phương th,c c%n chú ý:
Phương th,c khΚi tΕo
IPEndPoint (Int64, Int32) IPEndPoint (IPAddress, Int32) Create: TΕo mΙt EndPoint tν mΙt ñ<a ch= Socket ToString : Tr∀ vΧ ñ<a ch= IP và sϑ hi[u c:ng theo khuôn dΕng ð<aCh=: C:ng, ví dΛ: 192.168.1.1:8080
LWp DNS
MΙt sϑ thành ph%n cβa lWp:
HostName: Cho biΞt tên cβa máy ñưκc phân gi∀i GetHostAddress: Tr∀ vΧ tγt c∀ IP cβa mΙt trΕm
Trang 11GetHostName: Lγy vΧ tên cβa máy tính cΛc bΙ NameSpace System.Net.Sockets
MΙt sϑ lWp hay dùng: TcpClient, UdpClient, TcpListener, Socket, NetworkStream, …
ðη tΕo ra Socket
Socket(AddressFamily , SocketType , ProtocolType )
communication
Protocol
using System.Net;
using System.Net.Sockets;
class SockProp {
public static void Main() {
IPAddress ia = IPAddress.Parse("127.0.0.1");
IPEndPoint ie = new IPEndPoint(ia, 8000);
Socket test = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Console.WriteLine("AddressFamily: {0}", test.AddressFamily);
Console.WriteLine("SocketType: {0}", test.SocketType);
Console.WriteLine("ProtocolType: {0}", test.ProtocolType);
Console.WriteLine("Blocking: {0}", test.Blocking);
test.Blocking = false;
Console.WriteLine("new Blocking: {0}", test.Blocking);
Console.WriteLine("Connected: {0}", test.Connected);
test.Bind(ie);
IPEndPoint iep = (IPEndPoint)test.LocalEndPoint;
Console.WriteLine("Local EndPoint: {0}", iep.ToString());
test.Close();
Console.ReadKey();
}
}
2.1.2 Vi t chương trình cho phía máy ch∃
ViΞt chương trình cho phía máy chβ
TΕo mΙt Socket Liên kΞt vWi mΙt IPEndPoint cΛc bΙ L’ng nghe kΞt nϑi
Chγp nhεn kΞt nϑi Gχi nhεn d3 li[u theo giao th,c ñã thiΞt kΞ