Không giữ trạng trái trước đó.Lập trình mạng – Chương 1221.3 Khái niệm về Socket.• Socket API– Được giới thiệu ở BSD4.1 UNIX, 1981 Trang 12 Lập trình mạng – Chương 1231.3 Khái niệm về S
Trang 1Lập trình mạng – Chương 1 1
Nội dung môn học
CHƯƠNG 1: GIỚI THIỆU VỀ TCP/IP
CHƯƠNG 2: THIẾT KẾ GIẢI THUẬT CHO
CHƯƠNG TRÌNH CLIENT/SERVER CHƯƠNG 3: LẬP TRÌNH MẠNG TRÊN CÁC MÔI
TRUỜNG PHỔ DỤNG CHƯƠNG 4: LẬP TRÌNH MẠNG VỚI JAVA
Lập trình mạng – Chương 1 2
Nội dung môn học(tt)
CHƯƠNG 5: LẬP TRÌNH WEB — CGI
CHƯƠNG 6: LẬP TRÌNH WEB VỚI CÁC CÔNG
NGHỆ PHỔ BIẾN CHƯƠNG 7: ỨNG DỤNG XML TRONG LẬP
TRÌNH MẠNG
CHƯƠNG 8: BẢO MẬT DỮ LIỆU TRUYỀN
Trang 2Lập trình mạng – Chương 1 3
Tài liệu tham khảo
• [1] Douglas E Comer, Internetworking with TCP/IP, Prentice-Hall,1993.
• [2] W Richard Stevens, Unix Network Programming, Prentice-Hall,1990.
• [3] Arthur Dumas, Programming Winsock, Sams Publishing,1995.
• [4] Merlin, Conrad Hughes , Java Network Programming, Manning Publications
Co., 1997
• [5] D Travis Dewire, Second-Generation Client/Server Computing, Mc Graw-Hill,
1997.
• [6] John Shapley Gray, Interprocess Comunication in UNIX, Prentice-Hall,1997.
• [7] Deitel & Deitel Java How to program, 3th edition, Prentice-Hall,1999.
• [8] Richard Anderson, , Professional Active Server Pages 3.0, Wrox Press, 1999.
• [9] Marty Hall, Core Servlet and Java Server Pages, Prentice-Hall PTR, 2000
• [10] MSDN.
• [11] Tập tài liệu RFC.
Lập trình mạng – Chương 1 4
Trang 3Lập trình mạng – Chương 1 5
CHƯƠNG 1 GIỚI THIỆU VỀ TCP/IP
1.1 Tổng quát về TCP/IP.
1.2 Các giao thức và dịch vụ trên TCP/IP.
1.3 Khái niệm về Socket.
Transport layer (host level)
Applications layer
TCP/IPOSI
Trang 5Lập trình mạng – Chương 1 9
1.1 Tổng quát về TCP/IP (tt)
• Địa chỉ Internet:
có netid giống nhau.
Trang 6transport
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical network
data link physical
logica
l en d-e
nd t ransport
Trang 7– Dùng chuỗi ký tự để đánh địa chỉ, không phân biệt
chữ hoa, thường, mỗi thành phần có thể 63 ký tự
và tên đầy đủ không dài quá 255, dưới đây gọi là
tên.
– Tên được đặt theo cây phân cấp
– Địa chỉ tài nguyên biểu diễn dạng tên được hình
thành từ nó cho đến root
Trang 8– Network chỉ hiểu địa chỉ IP (binary) => ánh xạ
giữa địa chỉ IP và tên.
database , quản lý theo dạng phân cấp với name
servers
– Network chỉ hiểu địa chỉ IP (binary) => ánh xạ
giữa địa chỉ IP và tên.
– Mỗi ứng dụng mạng phải chuyển tên sang địa chỉ
IP
Trang 9Lập trình mạng – Chương 1 17
1.2 Các giao thức và dịch vụ(tt)
• DNS (tt)
– Ứng dụng giao tiếp với
local name server để hỏi
địa chỉ ánh xạ
– Local name server sẽ trả
lời hoặc request tiếp…
requesting host
surf.eurecom.fr
gaia.cs.umass.edu
root name server
local name server
dns.eurecom.fr
1
2 3 4
– Các ứng dụng phải định nghĩa protocol để giao
tiếp với nhau.
– Protocol qui định thứ tự các thông điệp trao đổi,
hành động khi nhận mỗi loại thông điệp.
– Ứng dụng cũng phải hiện thực phần giao tiếp với
người dùng.
Trang 10• E-mail: mail reader
• streaming audio/video: media player
Trang 11– Stateless : Mỗi lần request/response thì cầu nối
hủy bỏ Không giữ trạng trái trước đó.
Lập trình mạng – Chương 1 22
1.3 Khái niệm về Socket.
• Socket API
– Được giới thiệu ở BSD4.1 UNIX, 1981
– Được ứng dụng khởi tạo, sử dụng hay hủy bỏ
Trang 12Lập trình mạng – Chương 1 23
1.3 Khái niệm về Socket(tt)
• Socket :
– Là môi trường để các process ứng dụng giao tiếp
với nhau, process ứng dụng có thể chạy trên cùng
một máy hoặc trên hai máy khác nhau.
– Được ứng dụng tạo ra và sử dụng tuy nhiên được
hệ thống (hệ điều hành) kiểm soát.
Lập trình mạng – Chương 1 24
1.3 Khái niệm về Socket(tt)
end-end-transport protocol (UCP or TCP)
process
process
TCP with buffers, variables socket
process
TCP with buffers, variables socket
controlled by application developer controlled by operating system host or
server internet
Trang 13Lập trình mạng – Chương 1 25
1.3 Khái niệm về Socket(tt)
• Lập trình socket với TCP
– Client phải kết nối đến server
• server process phải chạy trước (phần tử thụ động)
• server phải tạo một socket để lắng nghe và chấp nhận
các kết nối từ client
– Client kết nối đến server bằng cách:
• Khởi tạo TCP socket ở local
• Xác định IP address, port number của server process
– Khi server nhận yêu cầu kết nối, nó sẽ chấp nhận
yêu cầu và khởi tạo socket mới để giao tiếp với
client.
• Cho phép server chấp nhận nhiều client tại một thời
điểm
Trang 14Lập trình mạng – Chương 1 27
1.3 Khái niệm về Socket(tt)
wait for incoming
create socket, connect to hostid, port=x
clientSocket = Socket()
close
connectionSocket
read reply from clientSocket close clientSocket
Server (running on hostid) Client
send request using clientSocket read request from
connectionSocket
write reply to
connectionSocket
TCP connection setup
String sentence;
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("hostname", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
Trang 15Lập trình mạng – Chương 1 29
Example: Java client (TCP), cont.
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true) { Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
Trang 16Lập trình mạng – Chương 1 31
Example: Java server (TCP), cont
DataOutputStream outToClient = new DataOutputStream (connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
} } }
Lập trình mạng – Chương 1 32
1.3 Khái niệm về Socket(tt)
• Lập trình socket với UTP
– Cung cấp cơ chế truyền không tin cậy các nhóm
các byte (datagrams) giữa client và server.
– Không cần thiết lập kết nối giữa client với server.
– Sender phải gởi kèm địa chỉ IP và port đích
– Server khi nhận dữ liệu sẽ phân tích địa chỉ của
sender để truyền lại
Trang 17Lập trình mạng – Chương 1 33
1.3 Khái niệm về Socket(tt)
• Lập trình socket với UTP(tt)
close clientSocket
Server (running on hostid)
read reply from clientSocket
create socket, clientSocket = DatagramSocket()
Client
Create, address (hostid, port=x,
send datagram request using clientSocket
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("hostname");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
Trang 18Lập trình mạng – Chương 1 35
Example: Java client (UDP), cont.
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
} }
Create datagram with
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
Trang 19Lập trình mạng – Chương 1 37
Example: Java server (UDP), cont
String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress,
port);
serverSocket.send(sendPacket);
} } }
• server: Web server gởi kết quả
cho client đối với mỗi request.
– http1.0: RFC 1945
– http1.1: RFC 2068
PC running Explorer
Server running NCSA Web server
Mac running Navigator
http request
http request
http re sponse
http response
Trang 20• server chấp nhận kết nối từ client
• http messages (application-layer protocol messages)
được trao đổi giữa browser (http client) và Web server
1a http client tạo TCP connection
(tạo socket) đến http server ở
www.dit.hcmut.edu.vn Port 80
2 http client gởi http request
message (chứa đường dẫn)
thông qua TCP connection
socket
1b http server ở địa chỉ www.dit.hcmut.edu.vn đang chờ đợi kết nối ở port 80, chấp nhận kết nối
và notifying đến clienttime
Trang 22Accept: text/html, image/gif,image/jpeg Accept-language:vn
(extra carriage return, line feed)
request line
(GET, POST,
HEAD commands)
header lines Carriage return,
Last-Modified: Mon, 22 Jun 1998 …
Content-Length: 6821 Content-Type: text/html data data data data data
data, e.g.,
requested
html file
Trang 23Lập trình mạng – Chương 1 45
1.4 Một số ứng dụng mạng(tt)
Authentication goal: control access to
server documents
• stateless: client must present
authorization in each request
• authorization: typically name, password
– authorization: header line in
request
– if no authorization presented, server
refuses access, sends
WWW authenticate:
header line in response
usual http request msg 401: authorization req.
WWW authenticate:
usual http request msg + Authorization:line
usual http response msg
usual http request msg + Authorization:line
usual http response msg time
Browser caches name & password so
that user does not have to repeatedly enter it.
• server matches
presented-cookie with server-stored info
spectific action
Trang 24cookie-Lập trình mạng – Chương 1 47
1.4 Một số ứng dụng mạng(tt)
Conditional GET
• Goal: don’t send object if client
has up-to-date stored (cached)
version
• client: specify date of cached
copy in http request
If-modified-since: <date>
• server: response contains no
object if cached copy up-to-date:
FTP client local file system
remote file system
user
at host
• File Transfer Protocol (ftp)
– Chuyển file từ local đến server hoặc lấy file từ server về
local
– Hoạt động theo cơ chế client/server
– FTP server chạy ở port 21
– Tham khảo : RFC 959
Trang 25Lập trình mạng – Chương 1 49
1.4 Một số ứng dụng mạng(tt)
• FTP (tt)
– ftp client giao tiếp đến ftp server qua TCP ở port 21
– Hai cầu nối TCP được thiết lập:
• control: exchange commands, responses between
client, server “out of band control”
• data: file data to/from server
– ftp server hiện thực cơ chế “state”: current directory, earlier
• LIST return list of file in current directory
• RETR filenameretrieves (gets) file
• STOR filenamestores (puts) file onto
remote host
Trang 26Lập trình mạng – Chương 1 51
1.4 Một số ứng dụng mạng(tt)
Sample return codes
• status code and phrase (as in http)
• 331 Username OK, password required
• 125 data connection already open;
transfer starting
• 425 Can’t open data connection
• 452 Error writing file
mail server
user agent
user agent
user agent
mail server
user agent user
agent
mail server
user agent
SMTPSMTPSMTP
Trang 27S: 250 Hello crepes.fr, pleased to meet you
C: MAIL FROM: <alice@crepes.fr>
S: 250 alice@crepes.fr Sender ok
C: RCPT TO: <bob@hamburger.edu>
S: 250 bob@hamburger.edu Recipient ok
C: DATA
S: 354 Enter mail, end with "." on a line by itself
C: Do you like ketchup?
C: How about pickles?
transaction phase, client:
• list: list message numbers
• retr: retrieve message by
number
• dele: delete
• quit
C: list S: 1 498 S: 2 912 S: C: retr 1 S: <message 1 contents>
S: C: dele 1 C: retr 2 S: <message 1 contents>
S: C: dele 2 C: quit S: +OK POP3 server signing off
S: +OK POP3 server ready C: user alice
S: +OK C: pass hungry S: +OK user successfully logged on
Trang 28Lập trình mạng – Chương 2 55
CHƯƠNG 2 THIẾT KẾ GIẢI THUẬT CHO CHƯƠNG
TRÌNH CLIENT/SERVER
2.1 Giao tiếp socket (Socket Interface )
2.2 Thiết kế giải thuật cho chương trình client
2.3 Thiết kế giải thuật cho chương trình server
Lập trình mạng – Chương 2 56
2.1 Giao tiếp socket
• Giao tiếp socket (Socket Interface) là các API
dùng cho việc lập trình các ứng dụng mạng.
• Socket Interface được định nghĩa trong UNIX
BSD, dựa trên việc mở rộng tập các system
calls (access files).
=> Phần này chỉ giới thiệu các khái niệm, ý
tưởng và các hàm, kiểu dữ liệu dùng cho lập
trình mạng với Socket Interface.
Trang 29Lập trình mạng – Chương 2 57
2.1 Giao tiếp socket (tt)
• Một số cấu trúc dữ liệu
trúc trong ngôn ngữ C Cấu trúc này chỉ có 1 field kiểu
u_long chứa địa chỉ IP 32 bit
Lập trình mạng – Chương 2 58
2.1 Giao tiếp socket (tt)
• Một số cấu trúc dữ liệu (tt)
– Cấu trúc địa chỉ socket :
• địa chỉ này lưu trữ địa chỉ IP, chỉ số port, và dạng
(family protocol)
• Tên cấu trúc là sockaddr_in được biểu diễn ở hình
trong slide kế Trong đó:
– sin_len: lưu trữ chiều dài cấu trúc của sockaddr_in
– sin_family: dạng protocol của socket
– sin_port: chỉ số port
– sin_addr: địa chỉ in Internet của socket
– sin_zero[8]: không dùng, đặt giá trị = 0
Trang 30sin_len sin_family sin_port sin_addr sin_zero
Hình - Cấu trúc địa chỉ socket
Lập trình mạng – Chương 2 60
2.1 Giao tiếp socket (tt)
• Một số cấu trúc dữ liệu (tt)
– Cấu trúc socket :
• socket được định nghĩa trong hệ điều hành bằng một
cấu trúc, được xem như điểm nối để hai procceses giao
tiếp với nhau
• Cấu trúc socket gồm 5 field được mô tả như hình trong
slide kế:
– Family : xác định protocol group
– Type : xác loại socket, stream, datagram hay raw socket.
– Protocol : là field thường gán giá trị bằng 0
– Local Socket Address và Remote Socket Address : là địa chỉ
socket của process cục bộ và từ xa.
Trang 31Lập trình mạng – Chương 2 61
2.1 Giao tiếp socket (tt)
sin_len sin_family sin_port sin_addr sin_zero
sin_len sin_family sin_port sin_addr sin_zero
Remote Socket Address Local Socket Address
• Giao tiếp socket định nghĩa 3 loại socket có thể dùng
trên môi trường TCP/IP (hình ở slide kế)
• Các loại socket gồm:
– Stream Socket: dùng cho connection-oriented protocol như
TCP.
– Datagram Socket: dùng cho connectionless protocol như UDP.
– Raw Socket: dùng cho một số protocol của một số ứng dụng
đặc biệt, dùng các dịch vụ trực tiếp của lớp IP.
Trang 32socket interface
Hình - Các loại socket
Lập trình mạng – Chương 2 64
• Một số cấu trúc dữ liệu (tt)
– Thông tin remote host :
• Thông tin được lưu trữ trong một cấu trúc hostent được
trả về khi ứng dụng muốn ánh xạ địa chỉ tên miền bằng
cách gọi hàm gethostbyname():
struct hostent * gethostbyname(const char * hostname);
struct hostent {
char *h_name; char **h_aliases;
int h_addrtype; int h_length;
char **h_addr_list;
}
Trang 33Lập trình mạng – Chương 2 65
2.1 Giao tiếp socket (tt)
• Một số cấu trúc dữ liệu (tt)
– Byte Ordering
• Big-Endian Byte Order : byte có trọng số lớn lưu trước
• Little -Endian Byte Order : byte có trọng số nhỏ lưu
trước
• Tuỳ cấu trúc của mỗi máy, lưu trữ số theo một trong hai
cách trên => khi giao tiếp mạng sẽ không đồng nhất
• Giao tiếp socket định nghĩa một số hàm để thực hiện
các thao tác chuyển đổi :
– htons và htonl : chuyển từ dạng lưu trữ của máy sang Network
– ntohs và ntohl : chuyển từ dạng lưu trữ của Network sang dạng
lưu trữ của máy.
Trang 34Lập trình mạng – Chương 2 67
2.1 Giao tiếp socket (tt)
• Các hàm dùng cho lập trình socket
– Hàm socket() để tạo mới một socket
Hàm này tạo một socket, kết quả trả về là một số
nguyên nhận dạng (socket descriptor), nếu có lỗi
giá trị trả về là -1 Các thông số :
• family: họ socket
• type: kiểu socket (stream hay datagram)
• protocol: giao thức, thường đặt bằng 0
Lập trình mạng – Chương 2 68
2.1 Giao tiếp socket (tt)
• Các hàm dùng cho lập trình socket (tt)
– Hàm bind() để đăng ký với hệ thống
Đăng ký socket đã khởi tạo với địa chỉ socket
local Trả về 0 nếu thành công, -1 nếu thất bại
Các thông số :
• sockfd: mô tả socket đã tạo bởi hàm socket()
• localaddr:con trỏ chỉ đến địa chỉ socket của local
• localaddrlen: chiều dài của địa chỉ socket
Trang 35Lập trình mạng – Chương 2 69
2.1 Giao tiếp socket (tt)
• Các hàm dùng cho lập trình socket (tt)
– Hàm connect() để kết nối đến server
Dùng cho chương trình client thiết lập kết nối đến
server Trả về 0 nếu thành công, -1 nếu thất bại
Các thông số :
• sockfd: mô tả socket đã tạo bởi hàm socket()
• serveraddr:con trỏ địa chỉ socket của server
• serveraddrlen: chiều dài của địa chỉ socket server
Lập trình mạng – Chương 2 70
2.1 Giao tiếp socket (tt)
• Các hàm dùng cho lập trình socket (tt)
– Hàm listen() để kết nối đến server
Hàm này dùng cho chương trình server
connection-oriented để đặt socket ở trạng thái chờ,
lắng nghe kết nối từ phía client Trả về 0 nếu thành
công, -1 nếu thất bại Các thông số:
• sockfd: mô tả socket đã tạo bởi hàm socket()
• backlog: số request có thể queued.
Trang 36Lập trình mạng – Chương 2 71
2.1 Giao tiếp socket (tt)
• Các hàm dùng cho lập trình socket (tt)
– Hàm accept() : chấp nhận kết nối từ client đến.
Chấp nhận kết nối từ client, tạo socket mới Giá trị
là một socket descriptor của socket mới Các
thông số :
• sockfd: mô tả socket đã tạo bởi hàm socket()
• clientaddr:con trỏ địa chỉ socket của client kết nối đến.
• clientaddrlen: chiều dài của clientaddr
Lập trình mạng – Chương 2 72
2.1 Giao tiếp socket (tt)
• Các hàm dùng cho lập trình socket (tt)
– Hàm read() để đọc dữ liệu từ socket
int read(int sockfd, const void *buf, int len);
Đọc dữ liệu từ connection vào bộ nhớ Trả về số
bytes đọc được nếu thành công, trả về 0 nếu
không có dữ liệu, trả về -1 nếu thất bại Các thông
số :
• sockfd: mô tả socket đã tạo bởi hàm socket()
• buf: con trỏ đến bộ đệm để lưu thông tin đọc được
• len: chiều dài của bộ đệm
Trang 37Lập trình mạng – Chương 2 73
2.1 Giao tiếp socket (tt)
• Các hàm dùng cho lập trình socket (tt)
– Hàm write() để ghi dữ liệu
Ghi dữ liệu từ bộ nhớ lên connection Trả về số
bytes ghi được nếu thành công, trả về -1 nếu thất
bại Các thông số :
• sockfd: mô tả socket đã tạo bởi hàm socket()
• buf: con trỏ đến bộ đệm để lưu thông tin đọc được
• len: chiều dài của bộ đệm
Lập trình mạng – Chương 2 74
2.1 Giao tiếp socket (tt)
• Các hàm dùng cho lập trình socket (tt)
– Hàm sendto() để gởi dữ liệu
toaddrlen);
Gởi dữ liệu đến một địa chỉ socket từ xa Trả về
số bytes gởi được nếu thành công, trả về -1 nếu