Lập trình giao tiếp mạng với winshock
Trang 1CHƯƠNG 1: SƠ LƯỢC VỀ MẠNG MÁY TÍNH
1.1 Định nghĩa và lợi ích của mạng máy tính
1.1.1 Định nghĩa
Mạng máy tính là sự kết hợp các máy tính lại với nhau thông qua các thiết bị nối kết mạng và phương tiện truyền thông (giao thức mạng, môi trường truyền dẫn) theo một cấu trúc nào đó và các máy tính này trao đổi thông tin qua lại với nhau
Hình 1.1.1: Mô hình liên kết các máy tính trong mạng
1.1.2 Những ích lợi kết nối thành mạng máy tính
− Nhiều người có thể dùng chung một phần mềm tiện ích
− Một nhóm người cùng thực hiện một đề án nếu nối mạng họ sẽ dùng chung dữ liệu của đề án, dùng chung tập tin chính (master file) của đề án, họ trao đổi thông tin với nhau dễ dàng
− Dữ liệu được quản lý tập trung nên bảo mật an toàn, trao đổi giữa những người sử dụng thuận lợi, nhanh chóng, backup dữ liệu tốt hơn
− Sử dụng chung các thiết bị máy in, máy scaner, đĩa cứng và các thiết bị khác
− Người sử dụng và trao đổi thông tin với nhau dễ dàng thông qua dịch vụ thư điện
tử (Email), dịch vụ Chat, dịch vụ truyền file (FTP), dịch vụ Web,
− Xóa bỏ rào cản về khoảng cách địa lý giữa các máy tính trong hệ thống mạng muốn chia sẻ và trao đổi dữ liệu với nhau
− Một số người sử dụng không cần phải trang bị máy tính đắt tiền (chi phí thấp mà chức năng lại mạnh)
− Cho phép người lập trình ở một trung tâm máy tính này có thể sử dụng các chương trình tiện ích, vùng nhớ của một trung tâm máy tính khác đang rỗi để làm tăng hiệu quả kinh tế của hệ thống
− An toàn cho dữ liệu và phần mềm vì nó quản lý quyền truy cập của các tài khoản người dùng (phụ thuộc vào các chuyên gia quản trị mạng)
1.2 Phân loại mạng máy tính
Trang 2Có nhiều cách phân loại mạng khác nhau tuỳ thuộc vào yếu tố chính được chọn dùng để làm chỉ tiêu phân loại, thông thường người ta phân loại mạng theo các tiêu chí như sau
- Khoảng cách địa lý của mạng
- Kỹ thuật chuyển mạch mà mạng áp dụng
- Kiến trúc mạng
- Hệ điều hành mạng sử dụng
Tuy nhiên trong thực tế nguời ta thường chỉ phân loại theo hai tiêu chí đầu tiên
1.2.1 Phân loại mạng theo khoảng cách địa lý :
Nếu lấy khoảng cách địa lý làm yếu tố phân loại mạng thì ta có mạng cục bộ, mạng
đô thị, mạng diện rộng, mạng toàn cầu
Mạng cục bộ ( LAN - Local Area Network ) : là mạng được cài đặt trong phạm vi tương đối nhỏ hẹp như trong một toà nhà, một xí nghiệp với khoảng cách lớn nhất giữa các máy tính trên mạng trong vòng vài km trở lại
Mạng đô thị ( MAN - Metropolitan Area Network ) : là mạng được cài đặt trong phạm vi một đô thị, một trung tâm văn hoá xã hội, có bán kính tối đa khoảng 100 km trở lại
Mạng diện rộng ( WAN - Wide Area Network ) : là mạng có diện tích bao phủ rộng lớn, phạm vi của mạng có thể vượt biên giới quốc gia thậm chí cả lục địa
Mạng toàn cầu ( GAN - Global Area Network ) : là mạng có phạm vi trải rộng toàn cầu
1.2.2 Phân loại theo kỹ thuật chuyển mạch:
Nếu lấy kỹ thuật chuyển mạch làm yếu tố chính để phân loại sẽ có: mạng chuyển mạch kênh, mạng chuyển mạch thông báo và mạng chuyển mạch gói
Mạng chuyển mạch kênh (Circuit Switching Network): Khi có hai trạm cần trao đổi thông tin với nhau thì giữa chúng sẽ được thiết lập một “kênh” cố định và được duy trì cho đến khi một trong hai bên ngắt kết nối Dữ liệu chđược truyền theo con đường cố định này
Kỹ thuật chuyển mạch kênh được sử dụng trong các kết nối ATM (Asynchronous Transfer Mode) và Dial-up ISDN (Integrate Services Digital Networks) Ví dụ về mạng chuyển mạch kênh là mạng điện thoại
Ưu điểm:
-Kênh truyền được dành riêng trong suốt quá trình giao tiếp do đó tốc độ truyền dữ liệu được bảo đảm Điều này là đặc biệt quan trọng đối với các ứng dụn
thời gian thực như audio và video
Phương pháp chuyển mạch kênh có hai nhược điểm chính:
− Phải tốn thời gian để thiết lập đường truyền cố định giữa hai trạm
− Hiệu suất sử dụng đường truyền không cao, vì có lúc trên kênh không có dữ liệu truyền của hai trạm kết nối, nhưng các trạm khác không được sử dụng kênh
truyền này
Mạng chuyển mạch thông báo (Message Switching Network): Không giống chuyển mạch kênh, chuyển mạch thông báo không thiết lập liên kết dành riêng giữa hai trạm giao tiếp mà thay vào đó mỗi thông báo được xem như một khối độc lập bao gồm cả địa chỉ nguồn và địa chỉ đích Mỗi thông báo sẽ được truyền
Trang 3qua các trạm trong mạng cho đến khi nó đến được địa chỉ đích, mỗi trạm trung gian sẽ nhận
và lưu trữ thông báo cho đến khi trạm trung gian kế tiếp sẵn sàng để nhận thông báo sau đó
nó chuyển tiếp thông báo đến trạm kế tiếp, chính vì lý do này mà mạng chuyển mạch thông báo còn có thể được gọi là mạng lưu và chuyển tiếp (Store and Forward Network) Một ví
dụ điển hình về kỹ thuật này là dịch vụ thư điện tử (e-mail), nó được chuyển tiếp qua các trạm cho đến khi tới được đích cần đến
Các ưu điểm của phương pháp:
− Cung cấp một sự quản lý hiệu quả hơn đối với sự lưu thông của mạng Bằng cách gán các thứ tự ưu tiên cho các thông báo và đảm bảo các thông báo có độ ưu tiên cao hơn
sẽ được lưu chuyển thay vì bị trễ do quá trình lưu thông trên mạng
− Giảm sự tắc nghẽn trên mạng Các trạm trung gian có thể lưu giữ các thông báo cho đến khi kênh truyền rảnh mới gửi thông báo đi
− Tăng hiệu quả sử dụng kênh truyền, với kỹ thuật này các trạm có thể dùng
chung kênh truyền
Hai nhược điểm chính:
− Nhược điểm của kỹ thuật này là độ trễ do việc lưu trữ và chuyển tiếp thông báo là không phù hợp với các ứng dụng thời gian thực
− Các trạm trung gian phải có dung lượng bộ nhớ rất lớn để lưu giữ các thông báo trước khi chuyển tiếp nó tới một trạm trung gian khác (kích thước của các thông báo không
bị hạn chế)
1.3 Một số Topology mạng thông dụng
Topology của mạng là cấu trúc hình học không gian mà thực chất là cách bố trí phần
tử của mạng cũng như cách nối giữa chúng với nhau Thông thường mạng có 3 dạng cấu
trúc là: Mạng dạng hình sao (Star Topology), mạng dạng vòng (Ring Topology) và mạng dạng tuyến (Linear Bus Topology) Ngoài 3 dạng cấu hình kể trên còn có một số dạng khác
biến tướng từ 3 dạng này như mạng phân cấp, mạng full mesh, mạng partial mesh…
Trang 4Hình 1.3 Các dạng topologyMạng dạng hình sao (Star topology)
Mạng dạng hình sao bao gồm một trung tâm và các nút thông tin Các nút thông tin là các trạm đầu cuối, các máy tính và các thiết bị khác của mạng Trung tâm của mạng điều phối mọi hoạt động trong mạng với các chức nǎng cơ bản là:
-Xác định cặp địa chỉ gửi và nhận được phép chiếm tuyến thông tin và liên lạc với nhau -Cho phép theo dõi và sử lý sai trong quá trình trao đổi thông tin
-Thông báo các trạng thái của mạng
Các ưu điểm của topo mạng hình sao:
-Hoạt động theo nguyên lý nối song song nên nếu có một thiết bị nào đó ở một nút thông tin bị hỏng thì mạng vẫn hoạt động bình thường
-Cấu trúc mạng đơn giản và các thuật toán điều khiển ổn định
-Mạng có thể mở rộng hoặc thu hẹp tuỳ theo yêu cầu của người sử dụng
với sự phát triển switching hub, mô hình này ngày càng trở nên phổ biến và chiếm đa số các
mạng mới lắp
Mạng hình tuyến (Bus Topology)
Theo cách bố trí hành lang các đường như hình vẽ thì máy chủ (host) cũng như tất cả các máy tính khác (workstation) hoặc các nút (node) đều được nối về với nhau trên một trục
đường dây cáp chính để chuyển tải tín hiệu
Trang 5Tất cả các nút đều sử dụng chung đường dây cáp chính này Phía hai đầu dây cáp được bịt
bởi một thiết bị gọi là terminator Các tín hiệu và gói dữ liệu (packet) khi di chuyển lên
hoặc xuống trong dây cáp đều mang theo điạ chỉ của nơi đến
Ưu điểm của topomạng bus:
- Dùng dây cáp ít, dễ lắp đạt
- Không giới hạn độ dài cáp
Nhược điểm:
- Sẽ gây ra nghẽn mạng khi chuyển lưu lượng dữ liệu lớn
- Khi một trạm trên đường truyền bị hỏng thì các trạm khác cũng phải ngừng hoạt độngMạng dạng vòng (Ring Topology)
Mạng dạng này, bố trí theo dạng xoay vòng, đường dây cáp được thiết kế làm thành một vòng khép kín, tín hiệu chạy quanh theo một chiều nào đó Các nút truyền tín hiệu cho nhau mỗi thời điểm chỉ được một nút mà thôi Dữ liệu truyền đi phải có kèm theo địa chỉ cụ thể của mỗi trạm tiếp nhận
Ưu điểm của topo mạng Ring:
-Mạng dạng vòng có thuận lợi là có thể nới rộng ra xa, tổng đường dây cần thiết ít hơn so với hai kiểu trên
Nhược điểm:
-Đường dây phải khép kín, nếu bị ngắt ở một nơi nào đó thì toàn bộ hệ thống cũng bị ngừng
Mạng dạng kết hợp
Kết hợp hình sao và tuyến ( star/Bus Topology )
Cấu hình mạng dạng này có bộ phận tách tín hiệu (spitter) giữ vai trò thiết bị trung tâm, hệ thống dây cáp mạng có thể chọn hoặc Ring Topology hoặc Linear Bus Topology.
Ưu điểm của cấu hình này là mạng có thể gồm nhiều nhóm làm việc ở cách xa nhau,
ARCNET là mạng dạng kết hợp Star/Bus Topology Cấu hình dạng này đưa lại sự uyển
chuyển trong việc bố trí đường dây tương thích dễ dàng đối với bất cứ toà nhà n
Kết hợp hình sao và vòng (Star/Ring Topology)
Cấu hình dạng kết hợp Star/Ring Topology, có một "thẻ bài" liên lạc (Token) được chuyển vòng quanh một cái HUB trung tâm Mỗi trạm làm việc (workstation) được nối với HUB -
là cầu nối giữa các trạm làm việc và để tǎng khoảng cách cần thiết
Mạng full mesh
Topo này cho phép các thiết bị kết nối trực tiếp với các thiết bị khác mà không cần phải qua
bộ tập trung như Hub hay Switch
Trang 61.4 Giao thức mạng
Việc trao đổi thông tin dù là đơn giản nhất cũng phải tuân theo những nguyên tắc nhất định Đơn giản như hai người nói chuyện với nhau, muốn cho cuộc nói chuyện đạt kết quả thì ít nhất cả hai người phải ngầm tuân thủ quy ước : khi một người nói thì người kia phải biết lắng nghe và ngược lại Việc truyền thông trên mạng cũng vậy Cần có quy tắc, quy ước truyền thông về nhiều mặt : khuôn dạng cú pháp của dữ liệu, các thủ tục gởi, nhận
dữ liệu, kiểm soát hiệu quả nhất chất lượng truyền thông tin Tập hợp những quy tắc, quy ước truyền thông đó được gọi là giao thức của mạng (protocol)
Một tập hợp tiêu chuẩn để trao đổi thông tin giữa hai hệ thống máy tính hoặc hai thiết bị máy tính với nhau được gọi là giao thức Các giao thức này còn được gọi là các nghi thức hoặc định ước của máy tính
1.4.1 Giao thức TCP/IP
Giao thức TCP/IP được phát triển từ mạng ARPANET và Internet và được dùng như giao thức mạng và vận chuyển trên mạng Internet TCP (Transmission Control Protocol) là giao thức thuộc tầng vận chuyển và IP (Internet Prorocol) là giao thức thuộc tầng mạng của mô hình OSI Họ giao thức TCP/IP hiện nay là giao thức được sử dụng rộng rãi nhất để liên kết các máy tính và các mạng
Hiện nay các máy tính của hầu hết các mạng có thể sử dụng giao thức TCP/IP để liên kết với nhau thông qua nhiều hệ thống mạng với kỹ thuật khác nhau Giao thức TCP/IP thực chất là một họ giao thức cho phép các hệ thống mạng cùng làm việc với nhau thông qua việc cung cấp phương tiện truyền thông liên mạng
a Giao thức IP
Nhiệm vụ chính của giao thức IP là cung cấp khả năng kết nối các mạng con thành liên kết mạng để truyền dữ liệu, vai trò của IP là vai trò của giao thức tầng mạng trong mô hình OSI Giao thức IP là một giao thức kiểu không hướng kết nối (connectionless), có nghĩa là không cần có giai đoạn thiết lập liên kết trước khi truyền dữ liệu
Để định danh các trạm (host) trong liên mạng được người ta sử dụng địa chỉ IP có
độ dài 32 bits Mỗi giao diện trong một máy có hỗ trợ giao thức IP đều được gán một địa chỉ IP (một máy tính có thể gắn với nhiều mạng do vậy có thể có nhiều địa chỉ IP) Địa chỉ
IP gồm 3 phần: bit định danh lớp mạng, địa chỉ mạng (netID) và địa chỉ máy (hostID) Mỗi địa chỉ IP được phân thành 4 vùng (mỗi vùng 1 byte), có thể biểu thị dưới dạng thập phân, bát phân, thập lục phân hay nhị phân Cách viết phổ biến nhất là dùng ký pháp thập phân có dấu chấm (dotted decimal notation) để tách các vùng Mục đích của địa chỉ IP là để định danh duy nhất cho một máy tính bất kỳ trên liên mạng
Do tổ chức và độ lớn của mạng con (subnet) của liên mạng có thể khác nhau, người
ta chia các địa chỉ IP thành 5 lớp, ký hiệu là A, B, C, D, và E Trong lớp A, B, C chứa địa chỉ có thể gán được Lớp D dành riêng cho lớp kỹ thuật multicasting Lớp E được dành cho những ứng dụng trong tương lai
Trang 7Hình 1.5 Cấu trúc của các lớp địa chỉ IP
NetID dùng để nhận dạng từng mạng riêng biệt Các mạng liên kết phải có địa chỉ mạng (netID) riêng cho mỗi mạng Ở đây các bit đầu tiên của byte đầu tiên được dùng để định danh lớp địa chỉ (0 - lớp A, 10 - lớp B, 110 - lớp C, 1110 - lớp D và 11110 - lớp E)
Ở đây ta xét cấu trúc của các lớp địa chỉ có thể gán được là lớp A, B, C
Phân lớp của địa chỉ IP như sau:
- Mạng lớp A: địa chỉ mạng (netID) là 1 byte và địa chỉ host (hostID) là 3 byte Lớp A cho
phép định dạng tới 126 mạng, tối đa hơn 16 triệu host trên mỗi mạng Lớp này được dùng cho các mạng có số trạm cực lớn
- Mạng lớp B: địa chỉ mạng (netID) là 2 byte và địa chỉ host (hostID) là 2 byte Lớp B cho
phép định danh tới 16382 mạng, với tối đa 65534 host trên mỗi mạng
- Mạng lớp C: địa chỉ mạng (netID) là 3 byte và địa chỉ host (hostID) là 1 byte Lớp C cho
phép định danh tới 2 triệu mạng, với tối đa 254 host trên mỗi mạng Lớp này được dùng cho các mạng có ít trạm
Trang 8Hình 1.6 Bảng phân lớp địa chỉ IP
Một số địa chỉ có tính chất đặc biệt: một địa chỉ có hostID = 0 được dùng để hướng tới mạng định danh bởi vùng netID Ngược lại, một địa chỉ có vùng hostID gồm toàn số 1 dùng để hướng tới tất cả các host nối vào mạng netID, và nếu vùng netID cũng gồm toàn số
1 thì nó hướng tới tất cả các host liên mạng
Cần lưu ý rằng địa chỉ IP được dùng để định danh các host và mạng ở tầng OSI, và chúng không phải là các địa chỉ vật lý (hay địa chỉ MAC) của các trạm trên đó một mạng cục bộ (Ethernet, Token Ring)
Trong nhiều trường hợp, một mạng có thể được chia làm nhiều mạng con (subnet), lúc đó có thể đưa thêm các vùng subnetid để định danh các mạng con Vùng subnetid được lấy từ vùng hostID, cụ thể đối với lớp A, B, C như ví dụ sau:
Hình 1.7 Ví dụ địa chỉ IP khi bổ sung subnetid
- Các gói tin sẽ được trình ứng dụng nhận được theo đúng thứ tự như chúng được gửi
đi Bởi các gói tin có thể được dẫn đi trên mạng theo nhiều con đường khác nhau trước khi
Trang 9tới đích nên thứ tự khi tới đích của chúng có thể không giống như khi chúng được phát Do
đó để đảm bảo có thể sắp xếp lại các gói tin một cách đúng đắn như ở phía gửi, giao thức TCP sẽ đánh số thứ tự cho từng gói tin trong cả khối tin chung được phát, nhờ vậy bên nhận có thể sắp xếp lại các gói tin theo đúng thứ tự ban đầu của chúng
Như vậy có thể thấy TCP cung cấp cho chúng ta một kênh truyền thông điểm -
điểm phục vụ cho các ứng dụng đòi hỏi giao tiếp tin cậy như HTTP (Hypertext Tranfer Protocol), FPT (File Tranfer Protocol),… Các ứng dụng này đỏi hỏi một kênh giao tiếp tin
cậy bởi thứ tự dữ liệu được gửi và nhận là yếu tố quyết định đến sự thành công hay thất bại của chúng
1.4.2 Giao thức UDP
UDP (User Datagram Protocol) là giao thức không hướng kết nối, được sử dụng thay thế
cho TCP theo yêu cầu của từng ứng dụng Khác với TCP, UDP không có các chức năng thiết lập và kết thúc kết nối Tương tự như IP, nó cũng không cung cấp cơ chế báo nhận
(acknowledgment), không sắp xếp tuần tự các gói tin (datagram) đến và có thể dẫn đến tình
trạng mất hoặc trùng dữ liệu mà không có cơ chế thông báo lỗi cho người gửi Qua đó ta thấy UDP cung cấp các dịch vụ vận chuyển không tin cậy như trong TCP
Khuôn dạng UDP datagram được mô tả với các vùng tham số đơn giản hơn nhiều so với TCP segment
Hình 1.4.2 Khuôn dạng của gói tin UDP
1.5 Các mô hình hoạt động của mạng máy tính
Mô hình hoạt động của mạng máy tính có hai loại:
- Mô hình mạng hoạt động theo dạng peer to peer (Ngang hàng)
- Mô hình mạng hoạt động theo dạng clients/server
1.5.1 Mô hình mạng hoạt động theo dạng peer to peer
Không tồn tại bất kỳ máy chuyên dụng hoặc cấu trúc phân cấp giữa các máy tính, mọi máy tính đều bình đẳng và có vai trò như nhau Thông thường mỗi máy tính hoạt động với
cả vai trò máy khách và máy phục vụ, vì vậy không có máy nào được chỉ định quản lý toàn mạng Người dùng ở từng máy tự quyết định dữ liệu nào trên máy của mình sẽ được chia sẻ
để dùng chung trên mạng
Hình 1.5.1 Mô hình mạng hoạt động theo dạng peer to peer
Ưu điểm
Trang 10- Các peer tham gia vào mạng có thể đóng góp tài nguyên chia sẻ với nhau, tài nguyên có thể riêng lẻ và có thể truy cập tài nguyên ở bất các các nodes nào trong mạng.
- Các peer đóng vai tròn như cả Client khi truy vấn thông tin và Server khi cung cấp thông tin
- Không cần Server riêng, khi hệ thống càng mở rộng thì khả năng hoạt động càng tốt
- Chi phí thấp, dễ cài đặt và bảo trì
- Nhược điểm
- Liên quan đến văn hóa trong chia sẻ về các tài nguyên có bản quyền
- Không đáng tin cậy và không tốt cho các ứng dụng cơ sở dữ liệu cần bảo mật cao.1.5.2 Mô hình mạng hoạt động theo dạng clients/ server
Những mô hình LAN trong thời kỳ đầu (tập trung và máy phục vụ tệp) được xây dựng chủ yếu dựa trên phương thức chia xẻ tài nguyên dùng chung: chia xẻ sử dụng đường truyền theo thời gian, chia xẻ các tài nguyên vật lý khác và dùng chung tài nguyên thông tin
là dữ liệu và các chương trình xử lý chúng trên một hoặc nhiều máy phục vụ (Server) của mạng
Hình 1.5.2.1 Mô hình Client/Server
Mô hình phần mềm Client/Server là mô hình giải pháp phần mềm cho việc khắc phục tình trạng quá tải trên mạng và vượt qua những ngăn cách về sự khác nhau trong cấu trúc vật lý cũng như hệ điều hành của các hệ thống máy tính khác nhau trên mạng
Mỗi phần mềm xây dựng theo mô hình Client/Server sẽ được chia làm hai phần: phần hoạt động trên máy phục vụ gọi là phần phía Server và phần hoạt động trên trạm làm việc gọi là phần phía Client Với mô hình này các trạm làm việc cũng được gọi là các Client (hay máy Client) còn các máy phục vụ gọi là các Server Nhiệm vụ của mỗi phần được quy định như sau:
• Phần phía Server quản lý các giao tiếp môi trường bên ngoài tại Server và với các Client, tiếp nhận các yêu cầu dưới dạng các xâu ký tự (query string), phân tích các query string, xử lý dữ liệu và gửi kết quả trả lời về phía các Client
Trang 11• Phần phía Client tổ chức giao tiếp với người dùng, với môi trường bên ngoài tại trạm làm việc và với phía Server, tiếp nhận yêu cầu của người dùng, thành lập các query string gửi về phía Server, tiếp nhận kết quả và tổ chức trình diễn chúng.
Hình 1.5.2.2 Mô hình phần mềm Client/Server
Đặc điểm của mô hình Client/Server:
Máy phục vụ và máy khách thông minh (máy phục vụ trong mô hình này không phải chỉ đơn thuần là phục vụ tệp mà gồm cả xử lý dữ liệu)
• Các máy chia sẻ chung đường truyền thông tốc độ cao (hàng nghìn Kbps)
• Mỗi phần mềm ứng dụng được xây dựng thành 2 phần: chương trình phục vụ và chương trình khách
• Lưu trữ dữ liệu tập trung tại máy phục vụ
• Xử lý dữ liệu phân tán trên các máy khách
• Thông tin trên đường truyền là các xâu truy vấn và trả lời
Trang 12Hình 1.2.2.3 Ví dụ về một số chương trình quản lý xây dựng trên mô hình Client/Server
o Không còn các chương trình phải gửi đi trên đường truyền từ các máy phục
dữ liệu dạng ASCII text
• Tăng hiệu suất hoạt động của hệ thống
Nhược điểm:
• Ưu thế của phần mềm Client/Server được thực hiện qua chính các đặc điểm ở trên Nếu một phần mềm được xây dựng từ hai phía Client và Server nhưng lại thực hiện việc gửi các chương trình tính toán hay gửi dữ liệu dạng nguyên gốc từ phía Server về Client thì ý nghĩa hiệu quả của Client/Server không còn nữa
Trang 13• Mô hình Client/ Server cũng bộc lộ những nhược điểm do những khó khăn trong việc xây dựng và phát triển các phần mềm theo mô hình của nó Người lập trình phải tổ chức quản lý được các giao tiếp giữa hai phần của chương trình và giao tiếp với môi trường bên ngoài tại cả hai phía Server và phía Client Công tác bảo trì
và phát triển phải được thực hiện cả từ hai phía Vấn đề cũng trở nên phức tạp hơn đối với mạng có nhiều Client phân bố trên diện rộng
1.6 Kết luận
Trang 14CHƯƠNG II LẬP TRÌNH GIAO TIẾP MẠNG VỚI WINSHOCK
WinSock API (Windows Sockets Application Programming Interface) là thư viện các hàm giao diện lập trình mạng cho Microsoft Windows WinSock tương thích với họ nghi thức mạng TCP/IP
2.1 Giới thiệu về socket
2.1.1 Giới thiệu
Socket là một giao diện lập trình ứng dụng (API-Application Programming Interface) Nó được giới thiệu lần đầu tiên trong ấn bản UNIX - BSD 4.2 dưới dạng các hàm hệ thống theo cú pháp ngôn ngữ C (socket(), bind(), connect(), send(), receive(), read(), write(), close() , ) Ngày nay, Socket được hỗ trợ trong hầu hết các hệ điều hành như MS Windows, Linux và được sử dụng trong nhiều ngôn ngữ lập trình khác nhau: như
C, C++, Java, Visual Basic, Visual C++,
Socket cho phép thiết lập các kênh giao tiếp mà hai đầu kênh được đánh dấu bởi hai cổng (port) Thông qua các cổng này một quá trình có thể nhận và gởi dữ liệu với các quá trình khác
Mô hình socketHai loại Socket :
Stream Socket :
Dựa trên nghi thức TCP ( Tranmission Control Protocol ), việc truyền dữ liệu chỉ thực hiện giữa hai quá trình đã thiết lập kết nối Dữ liệu được truyền tin cậy, đúng trình tự và không lập lại
Dữ liệu được truyền như dòng liên tục các byte không phân biệt ranh giới các record
Datagram Socket :
Dựa trên nghi thức UDP ( User Datagram Protocol ), việc truyền dữ liệu không yêu cầu có
sự thiết lập kết nối giữa hai quá trình Dữ liệu truyền không tin cậy, có thể không đúng trình tự hoặc lập lại
Dữ liệu được truyền như dòng các record
2.1.2 Số hiệu cổng (Port Number) của socket
Để có thể thực 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 dữ 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 được yêu cầu tạo ra một socket
Ngoài số hiệu cổng, hai bên giao tiếp còn phải biết địa chỉ IP của nhau Địa chỉ IP giúp phân biệt máy tính này với máy tính kia trên mạng TCP/IP Trong khi số hiệu cổng dùng để phân biệt các quá trình khác nhau trên cùng một máy tính
Trang 15Cổng trong socketTrong hình trên, địa chỉ của quá trình B1 được xác định bằng 2 thông tin: (Host B, Port B1):
Địa chỉ máy tính có thể là địa chỉ IP dạng 203.162.36.149 hay là địa chỉ theo dạng tên miền như www.cit.ctu.edu.vn Số hiệu cổng gán cho Socket phải duy nhất trên phạm vi máy tính đó, có giá trị trong khoảng từ 0 đến 65535 (16 bits) Trong đó, các cổng từ 1 đến
1023 được gọi là cổng hệ thống được dành riêng cho các quá trình của hệ thống
Trang 16Bộ giao thức TCP/IPTầng vận chuyển giúp chuyển tiếp các thông điệp giữa các chương trình ứng dụng với nhau Nó có thể hoạt động theo hai chế độ:
• Giao tiếp có nối kết, nếu sử dụng giao thức TCP
• Hoặc giao tiếp không nối kết, nếu sử dụng giao thức UDP
Socket là giao diện giữa chương trình ứng dụng với tầng vận chuyển Nó cho phép ta chọn giao thức sử dụng ở tầng vận chuyển là TCP hay UDP cho chương trình ứng dụng của mình
Bảng sau so sánh sự khác biệt giữa hai chế độ giao tiếp có nối kết và không nối kết:
Chế độ có nối kết (TCP) Chế độ không nối kết (UDP)
• Tồn tại kênh giao tiếp ảo giữa
hai bên giao tiếp
• Dữ liệu được gởi đi theo chế độ
bảo đảm: có kiểm tra lỗi truyền
lại gói tin lỗi hay mất, bảo đảm
thứ tự đến của các gói tin
• Dữ liệu không chính xác, tốc độtruyền nhanh
• Thích hợp cho các ứng dụng cầntốc độ, không cần chính xác cao:
truyền âm thanh, hình ảnh 2.2 Xây dựng ứng dụng Client-Server với Socket
Socket là phương tiện hiệu quả để xây dựng các ứng dụng theo kiến trúc Client-Server Các ứng dụng trên mạng Internet như Web, Email, FTP là các ví dụ điển hình
Phần này trình bày các bước cơ bản trong việc xây dựng các ứng dụng Client-Server sử dụng Socket làm phương tiện giao tiếp theo cả hai chế độ: Có nối kết và không nối kết.2.2.1 Mô hình Client-Server sử dụng Socket ở chế độ có nối kết (TCP)
Trang 17Giai đoạn 1: Server tạo Socket, gán số hiệu cổng và lắng nghe yêu cầu nối kết.
• socket(): Server yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển
• bind(): Server yêu cầu gán số hiệu cổng (port) cho socket
• listen(): Server lắng nghe các yêu cầu nối kết từ các client trên cổng đã được gán Server sẵn sàng phục vụ Client
Giai đoạn 2: Client tạo Socket, yêu cầu thiết lập một nối kết với Server
• socket(): Client yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển, thông thường hệ thống tự động gán một số hiệu cổng còn rảnh cho socket của Client
• connect(): Client gởi yêu cầu nối kết đến server có địa chỉ IP và Port xác định
• accept(): Server chấp nhận nối kết của client, khi đó một kênh giao tiếp ảo được hình thành, Client và server có thể trao đổi thông tin với nhau thông qua kênh ảo này
Giai đoạn 3: Trao đổi thông tin giữa Client và Server
Trang 18• Sau khi chấp nhận yêu cầu nối kết, thông thường server thực hiện lệnh read() và nghẽn cho đến khi có thông điệp yêu cầu (Request Message) từ client gởi đến
• Server phân tích và thực thi yêu cầu Kết quả sẽ được gởi về client bằng lệnh write()
• Sau khi gởi yêu cầu bằng lệnh write(), client chờ nhận thông điệp kết quả (ReplyMessage) từ server bằng lệnh read()
Trong giai đoạn này, việc trao đổi thông tin giữa Client và Server phải tuân thủ giao thức của ứng dụng (Dạng thức và ý nghĩa của các thông điệp, qui tắc bắt tay, đồng bộ hóa, ) Thông thường Client sẽ là người gởi yêu cầu đến Server trước Nếu chúng ta phát triển ứng dụng theo các Protocol đã định nghĩa sẵn, chúng ta
phải tham khảo và tuân thủ đúng những qui định của giao thức Bạn có thể tìm đọc mô tả chi tiết của các Protocol đã được chuẩn hóa trong các tài liệu RFC (Request For Comments) Ngược lại, nếu chúng ta phát triển một ứng dụng Client-Server riêng của mình, thì công việc đầu tiên chúng ta phải thực hiện là đi xây dựng Protocol cho ứng dụng.Giai đoạn 4: Kết thúc phiên làm việc
• Các câu lệnh read(), write() có thể được thưc hiện nhiều lần (ký hiệu bằng hình ellipse)
• Kênh ảo sẽ bị xóa khi Server hoặc Client đóng socket bằng lệnh close()
Như vậy toàn bộ tiến trình diễn ra như sau: