SlideShare a Scribd company logo
Socket
1. BÙI THỊ LOAN
2. DƯƠNG MINH HIẾU
3. NGUYỄN VĂN ĐÔNG
NỘI DUNG
1. Khái niệm Socket
2. Kết nối Socket
3. Network Information
4. Multiple Clients
5. Datagram
1. Socket là gì?
- Là cơ chế giao tiếp cho client và server trên một máy tính hoặc giữa các máy tính trên
mạng.
- Được tạo và sử dụng riêng biệt cho client và server
- Cho phép nhiều client kết nối với một server
- Các chức năng trên Linux như in, cơ sở dữ liệu,… sử dụng socket
2. Kết nối Socket
2.1. Thuộc tính của Socket
1. Socket Domains
- Phổ biến nhất là AF_INET, sử dụng trên nhiều mạng cục bộ Linux và trên Internet
- Giao thức tầng dưới là IP (Internet Protocol), sử dụng địa chỉ IP address.
- Các địa chỉ IP gồm 4 byte, mỗi số nhỏ hơn 256 và ngăn các bằng dấu chấm
- Ngoài ra còn có thể sử dụng AF_ISO cho các mạng sử dụng giao thức chuẩn ISO
hoặc AF_XNS cho hệ thống mạng Xerox.
- Đặc trưng bởi ba thành phần:
+ Socket Domain + Socket Type + Socket Protocol
2.1. Thuộc tính của Socket
2. Socket Type
Gồm 2 cơ chế chính: Stream và Datagram
- Stream Sockets
+ SOCK_STREAM
+ AF_INET , kết nối TCP/IP
+ Kết nối hai luồng ( two byte stream) đảm
bảo dữ liệu gửi đi không bị mất, lặp lại. Các
gói tin bị lỗi sẽ được gửi lại.
+ Các gói tin lớn được chia ra, gửi và sẽ
được ghép lại ở nơi nhận.
- Datagram Sockets
+ SOCK_DGRAM
+ AF_INET, kết nối UDP/IP
+ Không có sự đảm bảo cho các gói tin như
Stream Socket, các gói tin được truyền đi không
có phản hổi nên không đảm bảo không có lỗi
+ Ưu điểm: Tiết kiệm tài nguyên, các sự cố của
Server không làm phiền tới các Client
3. Socket Protocols
Cơ chế truyền tải cho phép nhiều hơn 1 protocol cung cấp loại socket yêu cầu. Có thể
chọn 1 protocol cụ thể cho socket. Giá trị mặc định thường là 0
2.2. Khởi tạo một socket
Sử dụng lời gọi hệ thống socket, sẽ tạo một socket và trả về một descriptor
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
- domain:
◦ AF_UNIX: UNIX internal (file system sockets)
◦ AF_INET: ARPA Internet protocols (UNIX network sockets)
◦ AF_ISO: ISO standard protocols
◦ AF_NS: Xerox Network Systems protocols
◦ AF_IPX: Novell IPX protocol
◦ AF_APPLETALK: Appletalk DDS
- type: SOCK_STREAM, SOCK_DGRAM
- protocol: 0: chọn giao thức mặc định. Ngoài ra có thể có các lựa khác
2.3. Socket Addresses
- Với AF_UNIX domain, gọi sockaddr_un, định nghĩa trong thư viện sys/uni.h:
struct sockaddr_un {
sa_family_t sun_family; /* AF_UNIX , domain*/
char sun_path[]; /* pathname, address */
};
- Với AF_INET domain, gọi sockaddr_in, định nghĩa trong thư viện netinet/in.h, tối thiểu
các thành phần:
struct sockaddr_in {
short int sin_family; /* AF_INET */
unsigned short int sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
};
2.4. Đặt tên cho socket
- Để môt socket có thể sử dụng bởi process khác, server cần có tên.
- Sử dụng lệnh gọi bind:
#include <sys/socket.h>
int bind(int socket, const struct sockaddr *address, size_t address_len);
Trong đó:
- socket: socket được khởi tạo bằng lệnh socket
- Addresss: địa chỉ của socket được thiết lập trước đó
- Address_len: sizeof(serveraddress)
2.5. Tạo hàng đợi socket
- Server cần tạo hang đợi để lưu trữ các yêu cầu xử lý của các kết nối
- Sử dụng lời gọi listen:
#include <sys/socket.h>
int listen(int socket, int backlog);
Trong đó:
- socket: tên server socket
- Backlog: độ dài hàng đợi, thường đặt nhất là 5
2.6. Yêu cầu kết nối
- Client kết nối tới server bằng sử dụng kết nối giữa unnamed socket với socket listen
phía server
- Sử dụng lời gọi connect:
#include <sys/socket.h>
int connect(int socket, const struct sockaddr *address, size_t address_len);
Trong đó:
+ socket: client Socket
+ address: Server Adress
+ address_len: sizeof(serverAddrress)
2.7. Chấp nhận kết nối
- Server chấp nhận một kết nối của Client trong hàng đợi
- Sử dụng lời gọi accept:
#include <sys/socket.h>
int accept(int socket, struct sockaddr *address, size_t *address_len);
- Khi hàng đợi không còn kết nối, server sẽ block lệnh accept cho đến khi có kết nối đến
- Để thay đổi việc block lệnh accept của server, ta có thể gọi
int flags = fcntl(socket, F_GETFL, 0);
fcntl(socket, F_SETFL, O_NONBLOCK|flags);
2.8. Đóng kết nối
- Kết thúc kết nối của client và server bằng gọi close
- Thực hiện đóng cả hai phía
- Đóng phía server khi lệnh read trả về giá trị 0
3. Network Information
- Sử dụng thông tin mạng để xác định địa chỉ và port
- Các hàm CSDL host có trong header file netdb.h
#include <netdb.h>
struct hostent *gethostbyaddr(const void *addr, size_t len, int type);
struct hostent *gethostbyname(const char *name);
- Các tham số trả về
struct hostent {
char *h_name; /* name of the host */
char **h_aliases; /* list of aliases (nicknames) */
int h_addrtype; /* address type */
int h_length; /* length in bytes of the address */
char **h_addr_list /* list of address (network order) */
};
- Tương tự với server
3. Network Information
- Tương tự với server
#include <netdb.h>
struct servent *getservbyname(const char *name, const char *proto);
struct servent *getservbyport(int port, const char *proto);
- Các tham số trả về
struct servent {
char *s_name; /* name of the service */
char **s_aliases; /* list of aliases (alternative names) */
int s_port; /* The IP port number */
char *s_proto; /* The service type, usually “tcp” or “udp” */
};
3. Network Information
- Internet Daemon (xinetd/inetd)
Internet Daemon đợi kết nối từ các trên nhiều port cùng nhau. Khi client kết nối đến
service, chương trình daemon sẽ chạy một server phù hợp.
+ Mỗi service được cung cấp bởi xinetd có file cấu hình tại /etc/xinetd.d. xinetd
4. Multiple Clients
- Xử lý trường hợp nhiều client đồng thời kết nối tới Server
- Khi một client kết nối, server sẽ chấp nhận và giao tiếp bằng cách tạo ra một bản sao
socket của nó, khi giao tiếp với 1 client 1 lúc, các client khác sẽ được thêm vào hang đợi
- Khi cùng lúc kết nối với nhiều client, Server gọi fork để tạo ra bản sao thứ 2 của nó và
được xử lý bởi một tiến trình khác
- Khi tạo ra các tiến trình con, vì không chờ các kết nối kết thúc, nên cần phải thiết lập
sắp xếp server bỏ qua tín hiệu SIGCHLD để loại bỏ các zombie processes
4.1 Select
- Server xử lý nhiều khác hàng cùng lúc bằng cách chờ nhiều yêu cầu kết nối trong cùng
thời gian
- Sử dụng cấu trúc hàm select, cho cấu trúc dữ liệu fd_set:
#include <sys/types.h>
#include <sys/time.h>
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *errorfds, struct timeval *timeout);
nfds: số lượng file descriptor để kiểm thử, từ 0 đến nfds-1
Readfds: số các descriptor sẵn sàng cho đọc
Writefds: số các descriptor sẵn sang cho ghi
Errfds: số các descriptor lỗi
Timeout: select sẽ return sau khoảng thời gian timeout, nếu timeout là con trỏ null, lời gọi bị block vô thời hạn
4.2 Multiple Clients
- Server đơn giản có thể sử dụng select để xử lý nhiều client cùng lúc, không cần gọi
các tiến trình con. Tuy nhiên cần thận trọng để client không phải chờ đợi quá lâu khi
server xử lý với việc kết nối.
- Server có thể sử dụng select cho các listen socket và cẩ các socket kết nối tới client
trong cùng thời gian
- Nếu listen socket đã sẵn sàng, ta có thể gọi accept để đọc và xử lý client được chỉ
định.
- Khi đọc được zero bytes, có nghĩa tiến trình với client đã kết thúc, ta có thể đóng và
xóa socket.
5. Datagram – Gói tin dữ liệu

More Related Content

What's hot

Tài liệu CCNA - Lưu hành nội bộ
Tài liệu CCNA  - Lưu hành nội bộTài liệu CCNA  - Lưu hành nội bộ
Tài liệu CCNA - Lưu hành nội bộ
Popping Khiem - Funky Dance Crew PTIT
 
Giao thuc ip
Giao thuc ipGiao thuc ip
Giao thuc ipĐăng DC
 
Datotnghiep openvpn
Datotnghiep openvpnDatotnghiep openvpn
Datotnghiep openvpn
Thanh Nguyen
 
Hướng dẫn tự học Linux
Hướng dẫn tự học LinuxHướng dẫn tự học Linux
Hướng dẫn tự học LinuxNguyễn Duy Nhân
 
TRIỂN KHAI OPENVPN TRÊN UBUNTU SERVER
TRIỂN KHAI OPENVPN TRÊN UBUNTU SERVERTRIỂN KHAI OPENVPN TRÊN UBUNTU SERVER
TRIỂN KHAI OPENVPN TRÊN UBUNTU SERVERBảo Bối
 
Đề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đ
Đề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đĐề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đ
Đề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đ
Dịch vụ viết bài trọn gói ZALO 0917193864
 
Giam sat-switch-bằng-phần-mềm-prtg
Giam sat-switch-bằng-phần-mềm-prtgGiam sat-switch-bằng-phần-mềm-prtg
Giam sat-switch-bằng-phần-mềm-prtg
laonap166
 
Cấu hình và bảo mật cho Ubuntu Server
Cấu hình và bảo mật cho Ubuntu Server Cấu hình và bảo mật cho Ubuntu Server
Cấu hình và bảo mật cho Ubuntu Server
Ho Quang Thanh
 
Bai 4
Bai 4Bai 4
Python İle Ağ Programlama
Python İle Ağ ProgramlamaPython İle Ağ Programlama
Python İle Ağ Programlama
Oguzhan Coskun
 
Sistem operasi jaringan
Sistem operasi jaringanSistem operasi jaringan
Sistem operasi jaringan
Yuliana Spega
 
Hệ Thống DNS
Hệ Thống DNSHệ Thống DNS
Hệ Thống DNS
Tuấn Nguyễn Văn
 
Đồ án xây dựng hệ thống mạng LAN cho doanh nghiệp.doc
Đồ án xây dựng hệ thống mạng LAN cho doanh nghiệp.docĐồ án xây dựng hệ thống mạng LAN cho doanh nghiệp.doc
Đồ án xây dựng hệ thống mạng LAN cho doanh nghiệp.doc
DV Viết Luận văn luanvanmaster.com ZALO 0973287149
 
Tìm hiểu và triển khai hệ thống tường lửa OPNSense cho doanh nghiệp.docx
Tìm hiểu và triển khai hệ thống tường lửa OPNSense cho doanh nghiệp.docxTìm hiểu và triển khai hệ thống tường lửa OPNSense cho doanh nghiệp.docx
Tìm hiểu và triển khai hệ thống tường lửa OPNSense cho doanh nghiệp.docx
DV Viết Luận văn luanvanmaster.com ZALO 0973287149
 
Tạo home folder user profile
Tạo home folder user profileTạo home folder user profile
Tạo home folder user profile
laonap166
 
Đồ án Xây dựng hệ thống bảo mật mạng VPN/IPSEC
Đồ án Xây dựng hệ thống bảo mật mạng VPN/IPSECĐồ án Xây dựng hệ thống bảo mật mạng VPN/IPSEC
Đồ án Xây dựng hệ thống bảo mật mạng VPN/IPSEC
nataliej4
 
Hệ thống quản lý và phân tích log tập trung elk stack
Hệ thống quản lý và phân tích log tập trung elk stackHệ thống quản lý và phân tích log tập trung elk stack
Hệ thống quản lý và phân tích log tập trung elk stack
laonap166
 
Windows routing phần 2
Windows routing phần 2Windows routing phần 2
Windows routing phần 2
laonap166
 
Pf sense firewall
Pf sense  firewallPf sense  firewall
Pf sense firewall
Quan Tâm
 

What's hot (20)

Tài liệu CCNA - Lưu hành nội bộ
Tài liệu CCNA  - Lưu hành nội bộTài liệu CCNA  - Lưu hành nội bộ
Tài liệu CCNA - Lưu hành nội bộ
 
Giao thuc ip
Giao thuc ipGiao thuc ip
Giao thuc ip
 
Datotnghiep openvpn
Datotnghiep openvpnDatotnghiep openvpn
Datotnghiep openvpn
 
Hướng dẫn tự học Linux
Hướng dẫn tự học LinuxHướng dẫn tự học Linux
Hướng dẫn tự học Linux
 
TRIỂN KHAI OPENVPN TRÊN UBUNTU SERVER
TRIỂN KHAI OPENVPN TRÊN UBUNTU SERVERTRIỂN KHAI OPENVPN TRÊN UBUNTU SERVER
TRIỂN KHAI OPENVPN TRÊN UBUNTU SERVER
 
Đề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đ
Đề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đĐề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đ
Đề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đ
 
NGHIEN CUU VA TRIEN KHAI VPN
NGHIEN CUU VA TRIEN KHAI VPN NGHIEN CUU VA TRIEN KHAI VPN
NGHIEN CUU VA TRIEN KHAI VPN
 
Giam sat-switch-bằng-phần-mềm-prtg
Giam sat-switch-bằng-phần-mềm-prtgGiam sat-switch-bằng-phần-mềm-prtg
Giam sat-switch-bằng-phần-mềm-prtg
 
Cấu hình và bảo mật cho Ubuntu Server
Cấu hình và bảo mật cho Ubuntu Server Cấu hình và bảo mật cho Ubuntu Server
Cấu hình và bảo mật cho Ubuntu Server
 
Bai 4
Bai 4Bai 4
Bai 4
 
Python İle Ağ Programlama
Python İle Ağ ProgramlamaPython İle Ağ Programlama
Python İle Ağ Programlama
 
Sistem operasi jaringan
Sistem operasi jaringanSistem operasi jaringan
Sistem operasi jaringan
 
Hệ Thống DNS
Hệ Thống DNSHệ Thống DNS
Hệ Thống DNS
 
Đồ án xây dựng hệ thống mạng LAN cho doanh nghiệp.doc
Đồ án xây dựng hệ thống mạng LAN cho doanh nghiệp.docĐồ án xây dựng hệ thống mạng LAN cho doanh nghiệp.doc
Đồ án xây dựng hệ thống mạng LAN cho doanh nghiệp.doc
 
Tìm hiểu và triển khai hệ thống tường lửa OPNSense cho doanh nghiệp.docx
Tìm hiểu và triển khai hệ thống tường lửa OPNSense cho doanh nghiệp.docxTìm hiểu và triển khai hệ thống tường lửa OPNSense cho doanh nghiệp.docx
Tìm hiểu và triển khai hệ thống tường lửa OPNSense cho doanh nghiệp.docx
 
Tạo home folder user profile
Tạo home folder user profileTạo home folder user profile
Tạo home folder user profile
 
Đồ án Xây dựng hệ thống bảo mật mạng VPN/IPSEC
Đồ án Xây dựng hệ thống bảo mật mạng VPN/IPSECĐồ án Xây dựng hệ thống bảo mật mạng VPN/IPSEC
Đồ án Xây dựng hệ thống bảo mật mạng VPN/IPSEC
 
Hệ thống quản lý và phân tích log tập trung elk stack
Hệ thống quản lý và phân tích log tập trung elk stackHệ thống quản lý và phân tích log tập trung elk stack
Hệ thống quản lý và phân tích log tập trung elk stack
 
Windows routing phần 2
Windows routing phần 2Windows routing phần 2
Windows routing phần 2
 
Pf sense firewall
Pf sense  firewallPf sense  firewall
Pf sense firewall
 

Similar to Socket - Lập trình hệ thống

Python Beginner Class day-15-networking
Python Beginner Class day-15-networkingPython Beginner Class day-15-networking
Python Beginner Class day-15-networking
Khánh Nguyễn
 
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdfBai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
CanhPhuongVan
 
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik RouterTìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
Le Trung Hieu
 
Bai 4 lap trình phia client
Bai 4  lap trình phia clientBai 4  lap trình phia client
Bai 4 lap trình phia clientLee Nam Nguyen
 
Basic cau hinh ip tren solaris
Basic cau hinh ip tren solarisBasic cau hinh ip tren solaris
Basic cau hinh ip tren solarisBui Van Cuong
 
Basic cau hinh ip tren solaris
Basic cau hinh ip tren solarisBasic cau hinh ip tren solaris
Basic cau hinh ip tren solaris
Bui Van Cuong
 
Bao cao final
Bao cao finalBao cao final
Bao cao final
Quân Quạt Mo
 
Lt socket
Lt socketLt socket
Lt socket
Hung Pham
 
Lab 8 dhcp server
Lab 8 dhcp server Lab 8 dhcp server
Lab 8 dhcp server tinhban269
 
50137078 đề-tai-giao-thức-sip (1)
50137078 đề-tai-giao-thức-sip (1)50137078 đề-tai-giao-thức-sip (1)
50137078 đề-tai-giao-thức-sip (1)didauday01
 
Báo cáo thực tập cuối kỳ
Báo cáo thực tập cuối kỳBáo cáo thực tập cuối kỳ
Báo cáo thực tập cuối kỳ0909128965
 
Linux thietlaphethongmangubunt-45879
Linux thietlaphethongmangubunt-45879Linux thietlaphethongmangubunt-45879
Linux thietlaphethongmangubunt-45879Son Giap
 
OSPF
OSPFOSPF
OSPF
Tai Vo
 
Fire wall
Fire wallFire wall
Fire wallICTU
 
chương 4 - TCP/IP - mạng máy tính
chương 4 - TCP/IP - mạng máy tínhchương 4 - TCP/IP - mạng máy tính
chương 4 - TCP/IP - mạng máy tính
Quyên Nguyễn Tố
 
Run Openstack with SSL
Run Openstack with SSLRun Openstack with SSL
Run Openstack with SSL
Lam To
 
VoIP with Opensips
VoIP with OpensipsVoIP with Opensips
VoIP with Opensips
Trần Thanh
 
Lab security+baiso8 netcat
Lab security+baiso8 netcatLab security+baiso8 netcat
Lab security+baiso8 netcatxeroxk
 

Similar to Socket - Lập trình hệ thống (20)

Python Beginner Class day-15-networking
Python Beginner Class day-15-networkingPython Beginner Class day-15-networking
Python Beginner Class day-15-networking
 
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdfBai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
 
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik RouterTìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
Tìm Hiểu WLAn, Giao Thức Radius, Mikrotik Router
 
Bai 4 lap trình phia client
Bai 4  lap trình phia clientBai 4  lap trình phia client
Bai 4 lap trình phia client
 
Basic cau hinh ip tren solaris
Basic cau hinh ip tren solarisBasic cau hinh ip tren solaris
Basic cau hinh ip tren solaris
 
Basic cau hinh ip tren solaris
Basic cau hinh ip tren solarisBasic cau hinh ip tren solaris
Basic cau hinh ip tren solaris
 
Bao cao final
Bao cao finalBao cao final
Bao cao final
 
Lt socket
Lt socketLt socket
Lt socket
 
Lab 8 dhcp server
Lab 8 dhcp server Lab 8 dhcp server
Lab 8 dhcp server
 
Lab 8 dhcp server
Lab 8 dhcp server Lab 8 dhcp server
Lab 8 dhcp server
 
50137078 đề-tai-giao-thức-sip (1)
50137078 đề-tai-giao-thức-sip (1)50137078 đề-tai-giao-thức-sip (1)
50137078 đề-tai-giao-thức-sip (1)
 
Báo cáo thực tập cuối kỳ
Báo cáo thực tập cuối kỳBáo cáo thực tập cuối kỳ
Báo cáo thực tập cuối kỳ
 
Linux thietlaphethongmangubunt-45879
Linux thietlaphethongmangubunt-45879Linux thietlaphethongmangubunt-45879
Linux thietlaphethongmangubunt-45879
 
OSPF
OSPFOSPF
OSPF
 
Fire wall
Fire wallFire wall
Fire wall
 
chương 4 - TCP/IP - mạng máy tính
chương 4 - TCP/IP - mạng máy tínhchương 4 - TCP/IP - mạng máy tính
chương 4 - TCP/IP - mạng máy tính
 
Run Openstack with SSL
Run Openstack with SSLRun Openstack with SSL
Run Openstack with SSL
 
VoIP with Opensips
VoIP with OpensipsVoIP with Opensips
VoIP with Opensips
 
Cain & abel
Cain & abelCain & abel
Cain & abel
 
Lab security+baiso8 netcat
Lab security+baiso8 netcatLab security+baiso8 netcat
Lab security+baiso8 netcat
 

Recently uploaded

Hoàn thiện hoạt đông phân phối xe máy Honda Việt Nam tại Công ty TNHH Thương ...
Hoàn thiện hoạt đông phân phối xe máy Honda Việt Nam tại Công ty TNHH Thương ...Hoàn thiện hoạt đông phân phối xe máy Honda Việt Nam tại Công ty TNHH Thương ...
Hoàn thiện hoạt đông phân phối xe máy Honda Việt Nam tại Công ty TNHH Thương ...
https://www.facebook.com/garmentspace
 
Vai trò và tác dụng của các nguyên tố vi lượng.doc
Vai trò và tác dụng của các nguyên tố vi lượng.docVai trò và tác dụng của các nguyên tố vi lượng.doc
Vai trò và tác dụng của các nguyên tố vi lượng.doc
https://www.facebook.com/garmentspace
 
Dung sai_va ky ky thuat do danh cho sinh vien
Dung sai_va ky ky thuat do danh cho sinh vienDung sai_va ky ky thuat do danh cho sinh vien
Dung sai_va ky ky thuat do danh cho sinh vien
nguyenquoccuong29
 
Dung sai_chuong_5_danh cho sv nganh ky thuat
Dung sai_chuong_5_danh cho sv nganh ky thuatDung sai_chuong_5_danh cho sv nganh ky thuat
Dung sai_chuong_5_danh cho sv nganh ky thuat
nguyenquoccuong29
 
Lập trình game trên thiết bị di động.pdf
Lập trình game trên thiết bị di động.pdfLập trình game trên thiết bị di động.pdf
Lập trình game trên thiết bị di động.pdf
TÀI LIỆU NGÀNH MAY
 
Dung sai_ky thuat do chuong 3 danh cho nganh che tao ma
Dung sai_ky thuat do chuong 3 danh cho nganh che tao maDung sai_ky thuat do chuong 3 danh cho nganh che tao ma
Dung sai_ky thuat do chuong 3 danh cho nganh che tao ma
nguyenquoccuong29
 

Recently uploaded (6)

Hoàn thiện hoạt đông phân phối xe máy Honda Việt Nam tại Công ty TNHH Thương ...
Hoàn thiện hoạt đông phân phối xe máy Honda Việt Nam tại Công ty TNHH Thương ...Hoàn thiện hoạt đông phân phối xe máy Honda Việt Nam tại Công ty TNHH Thương ...
Hoàn thiện hoạt đông phân phối xe máy Honda Việt Nam tại Công ty TNHH Thương ...
 
Vai trò và tác dụng của các nguyên tố vi lượng.doc
Vai trò và tác dụng của các nguyên tố vi lượng.docVai trò và tác dụng của các nguyên tố vi lượng.doc
Vai trò và tác dụng của các nguyên tố vi lượng.doc
 
Dung sai_va ky ky thuat do danh cho sinh vien
Dung sai_va ky ky thuat do danh cho sinh vienDung sai_va ky ky thuat do danh cho sinh vien
Dung sai_va ky ky thuat do danh cho sinh vien
 
Dung sai_chuong_5_danh cho sv nganh ky thuat
Dung sai_chuong_5_danh cho sv nganh ky thuatDung sai_chuong_5_danh cho sv nganh ky thuat
Dung sai_chuong_5_danh cho sv nganh ky thuat
 
Lập trình game trên thiết bị di động.pdf
Lập trình game trên thiết bị di động.pdfLập trình game trên thiết bị di động.pdf
Lập trình game trên thiết bị di động.pdf
 
Dung sai_ky thuat do chuong 3 danh cho nganh che tao ma
Dung sai_ky thuat do chuong 3 danh cho nganh che tao maDung sai_ky thuat do chuong 3 danh cho nganh che tao ma
Dung sai_ky thuat do chuong 3 danh cho nganh che tao ma
 

Socket - Lập trình hệ thống

  • 1. Socket 1. BÙI THỊ LOAN 2. DƯƠNG MINH HIẾU 3. NGUYỄN VĂN ĐÔNG
  • 2. NỘI DUNG 1. Khái niệm Socket 2. Kết nối Socket 3. Network Information 4. Multiple Clients 5. Datagram
  • 3. 1. Socket là gì? - Là cơ chế giao tiếp cho client và server trên một máy tính hoặc giữa các máy tính trên mạng. - Được tạo và sử dụng riêng biệt cho client và server - Cho phép nhiều client kết nối với một server - Các chức năng trên Linux như in, cơ sở dữ liệu,… sử dụng socket
  • 4. 2. Kết nối Socket
  • 5. 2.1. Thuộc tính của Socket 1. Socket Domains - Phổ biến nhất là AF_INET, sử dụng trên nhiều mạng cục bộ Linux và trên Internet - Giao thức tầng dưới là IP (Internet Protocol), sử dụng địa chỉ IP address. - Các địa chỉ IP gồm 4 byte, mỗi số nhỏ hơn 256 và ngăn các bằng dấu chấm - Ngoài ra còn có thể sử dụng AF_ISO cho các mạng sử dụng giao thức chuẩn ISO hoặc AF_XNS cho hệ thống mạng Xerox. - Đặc trưng bởi ba thành phần: + Socket Domain + Socket Type + Socket Protocol
  • 6. 2.1. Thuộc tính của Socket 2. Socket Type Gồm 2 cơ chế chính: Stream và Datagram - Stream Sockets + SOCK_STREAM + AF_INET , kết nối TCP/IP + Kết nối hai luồng ( two byte stream) đảm bảo dữ liệu gửi đi không bị mất, lặp lại. Các gói tin bị lỗi sẽ được gửi lại. + Các gói tin lớn được chia ra, gửi và sẽ được ghép lại ở nơi nhận. - Datagram Sockets + SOCK_DGRAM + AF_INET, kết nối UDP/IP + Không có sự đảm bảo cho các gói tin như Stream Socket, các gói tin được truyền đi không có phản hổi nên không đảm bảo không có lỗi + Ưu điểm: Tiết kiệm tài nguyên, các sự cố của Server không làm phiền tới các Client 3. Socket Protocols Cơ chế truyền tải cho phép nhiều hơn 1 protocol cung cấp loại socket yêu cầu. Có thể chọn 1 protocol cụ thể cho socket. Giá trị mặc định thường là 0
  • 7. 2.2. Khởi tạo một socket Sử dụng lời gọi hệ thống socket, sẽ tạo một socket và trả về một descriptor #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); - domain: ◦ AF_UNIX: UNIX internal (file system sockets) ◦ AF_INET: ARPA Internet protocols (UNIX network sockets) ◦ AF_ISO: ISO standard protocols ◦ AF_NS: Xerox Network Systems protocols ◦ AF_IPX: Novell IPX protocol ◦ AF_APPLETALK: Appletalk DDS - type: SOCK_STREAM, SOCK_DGRAM - protocol: 0: chọn giao thức mặc định. Ngoài ra có thể có các lựa khác
  • 8. 2.3. Socket Addresses - Với AF_UNIX domain, gọi sockaddr_un, định nghĩa trong thư viện sys/uni.h: struct sockaddr_un { sa_family_t sun_family; /* AF_UNIX , domain*/ char sun_path[]; /* pathname, address */ }; - Với AF_INET domain, gọi sockaddr_in, định nghĩa trong thư viện netinet/in.h, tối thiểu các thành phần: struct sockaddr_in { short int sin_family; /* AF_INET */ unsigned short int sin_port; /* Port number */ struct in_addr sin_addr; /* Internet address */ };
  • 9. 2.4. Đặt tên cho socket - Để môt socket có thể sử dụng bởi process khác, server cần có tên. - Sử dụng lệnh gọi bind: #include <sys/socket.h> int bind(int socket, const struct sockaddr *address, size_t address_len); Trong đó: - socket: socket được khởi tạo bằng lệnh socket - Addresss: địa chỉ của socket được thiết lập trước đó - Address_len: sizeof(serveraddress)
  • 10. 2.5. Tạo hàng đợi socket - Server cần tạo hang đợi để lưu trữ các yêu cầu xử lý của các kết nối - Sử dụng lời gọi listen: #include <sys/socket.h> int listen(int socket, int backlog); Trong đó: - socket: tên server socket - Backlog: độ dài hàng đợi, thường đặt nhất là 5
  • 11. 2.6. Yêu cầu kết nối - Client kết nối tới server bằng sử dụng kết nối giữa unnamed socket với socket listen phía server - Sử dụng lời gọi connect: #include <sys/socket.h> int connect(int socket, const struct sockaddr *address, size_t address_len); Trong đó: + socket: client Socket + address: Server Adress + address_len: sizeof(serverAddrress)
  • 12. 2.7. Chấp nhận kết nối - Server chấp nhận một kết nối của Client trong hàng đợi - Sử dụng lời gọi accept: #include <sys/socket.h> int accept(int socket, struct sockaddr *address, size_t *address_len); - Khi hàng đợi không còn kết nối, server sẽ block lệnh accept cho đến khi có kết nối đến - Để thay đổi việc block lệnh accept của server, ta có thể gọi int flags = fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, O_NONBLOCK|flags);
  • 13. 2.8. Đóng kết nối - Kết thúc kết nối của client và server bằng gọi close - Thực hiện đóng cả hai phía - Đóng phía server khi lệnh read trả về giá trị 0
  • 14. 3. Network Information - Sử dụng thông tin mạng để xác định địa chỉ và port - Các hàm CSDL host có trong header file netdb.h #include <netdb.h> struct hostent *gethostbyaddr(const void *addr, size_t len, int type); struct hostent *gethostbyname(const char *name); - Các tham số trả về struct hostent { char *h_name; /* name of the host */ char **h_aliases; /* list of aliases (nicknames) */ int h_addrtype; /* address type */ int h_length; /* length in bytes of the address */ char **h_addr_list /* list of address (network order) */ }; - Tương tự với server
  • 15. 3. Network Information - Tương tự với server #include <netdb.h> struct servent *getservbyname(const char *name, const char *proto); struct servent *getservbyport(int port, const char *proto); - Các tham số trả về struct servent { char *s_name; /* name of the service */ char **s_aliases; /* list of aliases (alternative names) */ int s_port; /* The IP port number */ char *s_proto; /* The service type, usually “tcp” or “udp” */ };
  • 16. 3. Network Information - Internet Daemon (xinetd/inetd) Internet Daemon đợi kết nối từ các trên nhiều port cùng nhau. Khi client kết nối đến service, chương trình daemon sẽ chạy một server phù hợp. + Mỗi service được cung cấp bởi xinetd có file cấu hình tại /etc/xinetd.d. xinetd
  • 17. 4. Multiple Clients - Xử lý trường hợp nhiều client đồng thời kết nối tới Server - Khi một client kết nối, server sẽ chấp nhận và giao tiếp bằng cách tạo ra một bản sao socket của nó, khi giao tiếp với 1 client 1 lúc, các client khác sẽ được thêm vào hang đợi - Khi cùng lúc kết nối với nhiều client, Server gọi fork để tạo ra bản sao thứ 2 của nó và được xử lý bởi một tiến trình khác - Khi tạo ra các tiến trình con, vì không chờ các kết nối kết thúc, nên cần phải thiết lập sắp xếp server bỏ qua tín hiệu SIGCHLD để loại bỏ các zombie processes
  • 18. 4.1 Select - Server xử lý nhiều khác hàng cùng lúc bằng cách chờ nhiều yêu cầu kết nối trong cùng thời gian - Sử dụng cấu trúc hàm select, cho cấu trúc dữ liệu fd_set: #include <sys/types.h> #include <sys/time.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout); nfds: số lượng file descriptor để kiểm thử, từ 0 đến nfds-1 Readfds: số các descriptor sẵn sàng cho đọc Writefds: số các descriptor sẵn sang cho ghi Errfds: số các descriptor lỗi Timeout: select sẽ return sau khoảng thời gian timeout, nếu timeout là con trỏ null, lời gọi bị block vô thời hạn
  • 19. 4.2 Multiple Clients - Server đơn giản có thể sử dụng select để xử lý nhiều client cùng lúc, không cần gọi các tiến trình con. Tuy nhiên cần thận trọng để client không phải chờ đợi quá lâu khi server xử lý với việc kết nối. - Server có thể sử dụng select cho các listen socket và cẩ các socket kết nối tới client trong cùng thời gian - Nếu listen socket đã sẵn sàng, ta có thể gọi accept để đọc và xử lý client được chỉ định. - Khi đọc được zero bytes, có nghĩa tiến trình với client đã kết thúc, ta có thể đóng và xóa socket.
  • 20. 5. Datagram – Gói tin dữ liệu