Mô hình truyền tin socket

Một phần của tài liệu Bài giảng mạng máy tính ths nguyễn xuân anh (Trang 99 - 101)

Hai giao thức TCP và UDP là các giao thức tầng vận tải để truyền dữ liệu, mỗi giao thức có những ưu và nhược điểm riêng. Giao thức TCP là giao thức có liên kết, nó có độ tin cậy truyền tin cao nhưng tốc độ truyền tin bị hạn chế do phải có giai đoạn thiết lập và giải phóng liên kết, khi đoạn tin có lỗi hay bị thất lạc thì giao thức TCP phải thực hiện truyền lại. Giao thức UDP thuộc loại không liên kết, có tốc độ truyền tin rất nhanh vì không cần phải thiết lập và giải phóng

liên kết. Khi lập trình cho giao thức TCP thì sử dụng các socket dạng luồng, còn đối với giao thức UDP sẽ sử dụng DatagramSocket và DatagramPacket.

Hình 5.2 Các bước cơ bản của tiến trình Client/Server

Truyền tin có liên kết nghĩa là cần phải có giai đoạn thiết lập và giải phóng liên kết trước và sau khi truyền tin. Dữ liệu được truyền trên mạng máy tính dưới dạng các gói tin, mỗi gói tin chứa thông tin điều khiển bao gồm địa chỉ + cổng nguồn và đích. Tuy nhiên do các gói tin có chiều dài hữu hạn nên bên gửi thường phải phân chia dữ liệu thành nhiều gói tin và khôi phục lại dữ liệu ban đầu từ các gói ở bên nhận. Trong quá trình truyền tin có thể có thể có một hay nhiều gói bị mất hay bị hỏng và cần phải truyền lại hoặc các gói tin đến không theo đúng trình tự. Để giải quyết những vấn đề này, bên gửi phải chia dữ liệu thành các gói và thêm thông tin điều khiển, bên nhận phải phân tích thông tin điều khiển và quản lý danh sách các gói tin nhận được, ... rất nhiều công việc cần phải thực hiện và việc phát triển phần mềm mạng trở nên phức tạp. Tuy nhiên, những công việc phức tạp đó đã được socket xử lý, chúng cho phép người lập trình xem một liên kết mạng như là một luồng mà có thể đọc dữ liệu ra hay ghi dữ liệu vào từ luồng này. Socket coi tất cả các thao tác gửi/nhận tương tự như thao tác đọc/ghi tập tin trên ổ đĩa máy tính, các thao tác mức thấp hoàn toàn trong suốt đối với người lập trình.

6 Socket() Bind() Listen() Accept() Các chức năng gửi và nhận Close() Socket() Bind() Connect() Các chức năng gửi và nhận Close() 1 3 4 5 7 2 Server Client

Một socket có thể thực hiện bảy thao tác cơ bản: - Kết nối với một máy ở xa

- Gửi dữ liệu - Nhận dữ liệu - Ngắt liên kêt - Gán cổng

- Nghe dữ liệu đến

- Chấp nhận liên kết từ các máy ở xa trên cổng đã được gán.

Mỗi khi liên kết được thiết lập, một kênh truyền logic được hình thành giữa các hai tiến trình mạng và chúng có thể trao đổi thông tin với nhau theo chế độ song công. Khi việc truyền dữ liệu hoàn thành, một hoặc cả hai tiến trình sẽ gửi yêu cầu ngắt liên kết. Với sự phát triển của công nghệ thông tin, lập trình viên có nhiều lựa chọn khác để phát triển các ứng dụng mạng như: gọi thủ tục từ xa (Remote Procedure Call - RPC), Java RMI, CORBA, webservice…, nhưng socket vẫn tiếp tục đóng vai trò quan trọng trong việc duy trì các luồng truyền thông trên mạng máy tính. Các ứng dụng có liên quan đến mạng máy tính đều viết ở lớp bên trên socket.

Một phần của tài liệu Bài giảng mạng máy tính ths nguyễn xuân anh (Trang 99 - 101)