1. Trang chủ
  2. » Công Nghệ Thông Tin

CCNA's notes

33 440 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

CCNA's notes Mạng máy tính Viện điện tử viễn thông ĐH Bách Khoa Hà Nội

Trình bày chi tiết các vấn đề được nêu trong đề bài và các vấn đề có liên quan: Transport layer: I. Nhiệm vụ, các dịch vụ trong lớp transport layer. (elements of transport protocol) II. Thành phần của Transport protocol. 1. Giải phóng liên kết (communication release). 2. Điều khiển luồng và đệm (Flow control & buffering) 3. Ghép kênh (Multiplexing ) 4. Phục hồi sự cố (Crash Recovery) I. Nhiệm vụ của Transport layer: Quá trình truyền dữ liệu giữa các người dùng đầu cuối, cung cấp dịch vụ truyền tin tin cậy đối với các dịch vụ lớp trên. Tầng giao vận cũng kiểm soát độ tin cậy của liên kết đang sử dụng bằng các phương thức điều khiển luồng , phân mảnh/ ghép mảnh và kiểm soát lỗi. Một số giao thức đã có các trạng thái xác định và có hướng kết nối. * Các mục đích chính của lớp Transport layer: - Theo dõi các kết nối của từng ứng dụng từ nguồn đến đích. Bất cứ host nào cũng đều sử dụng rất nhiều ứng dụng qua mạng. từng ứng dụng này có thể tương tác với một hoặc nhiều ứng dụng ở các host khác. Lớp transport có nhiệm vụ duy trì nhiều luồng kết nối giữa các ứng dụng này. Cho rằng 1 máy tính kết nối đến mạng internet đồng thời nhận và gửi email và thông điệp chat, duyệt web, thực hiện thoại IP. Từng ứng dụng này gửi và nhận dữ liệu qua mạng cùng thời điểm. Tuy nhiên dữ liệu thoại không gửi qua các trình duyệt web, và chữ trong các trình duyệt instant message không xuất hiện trong email. - Phân mảnh dữ liệu, đánh số thứ tự từng mảnh. Lớp giao vận chia nhỏ dữ liệu ra thành nhiều mẩu nhỏ được gọi là các segments. Quá trình này bao gồm quá trình đóng gói các mẩu dữ liệu. Từng headers của phần dữ liệu từ lớp application được gán tại lớp transport sẽ chỉ ra dữ liệu này thuộc loại ứng dụng nào.Việc phân mảnh dữ liệu thành nhiều mảnh nhỏ trước khi truyền giúp cho host có thể truyền nhiều dữ liệu của nhiều ứng dụng trong 1 thời điểm qua mạng WAN. Trong khi nếu không phân mảnh dữ liệu và truyền thì chỉ chạy được 1 số lượng nhất định các ứng dụng được truyền đi. - Ghép lại các mảnh thành luồng của dữ liệu cho ứng dụng tương ứng. Do dữ liệu được phân mảnh và truyền qua rất nhiều tuyến đường nên thứ tự đến của các mảnh dữ liệu tại đích là rất khác nhau. Bằng việc đánh số và số thứ tự các mảnh, lớp giao vận đảm bảo cho các dữ liệu này sẽ được khôi phục lại theo đúng thứ tự tại đích. Tại host nhận dữ liệu, các mảnh dữ liệu này được ghép lại theo đúng thứ tự rồi chuyển lên lớp application. Giao thức tại lớp transport diễn tả cách thức thông tin header ở lớp giao vận được dùng để ghép lại các mảnh theo thứ tự trước khi đi lên xử lý ở lớp application. - Phân biệt các ứng dụng khác nhau. Để dữ liệu đến được đúng ứng dụng cần thiết , tầng giao vận phải có 1 cơ chế phân biệt được các ứng dụng ở đích. Trong mô hình TCP/IP cơ chế này được gọi là port. Từng phần mềm nếu muốn truy cập vào mạng internet đều được gán một số port duy nhất ở host. Số port này được sử dụng trong header của lớp giao vận để chỉ ra ứng dụng của mẩu dữ liệu tương ứng. Tại lớp giao vận, từng nhóm các mẩu dữ liệu đi từ ứng dụng nguồn đến ứng dụng đích được gọi là “thoại” ( conversation giữa các ứng dụng nguồn và đích). Việc chia nhỏ dữ liệu ra thành nhiều đơn vị truyền dẫn , cách thức truyền các phần này từ nguồn đến đích, muốn thực hiện được cần nhiều quá trình ghép nối các dạng dữ liệu. Tầng giao vận là liên kết giữa tầng ứng dụng và các tầng dưới chịu trách nhiệm cho việc truyền dẫn trong mạng internet. Tầng giao vận cho phép dữ liệu từ các conversations khác nhau xuống các lớp thấp hơn dưới dạng các bản tin có thể quản lý được. Các bản tin này sau cùng sẽ được ghép nối để truyền dẫn qua nhiều thiết bị truyền thông trung giãn. - Điều khiển luồng Vì tài nguyên của đường truyền internet là rất có hạn nên 1 khi mà đường truyền trung gian bị quá tải, một số giao thức có thể yêu cầu gửi các ứng dụng với tốc độ thấp hơn để đảm bảo lưu lượng của các luồng dữ liệu. Điều này thực hiện được do lớp giao vận điều khiển 1 lượng lớn các dữ liệu truyền từ nguồn dưới dạng nhóm. Điều khiển luồng có thể chống việc mất gói dữ liệu trong mạng và tránh việc phải truyền lại. - Hỗ trợ khôi phục lỗi. Lớp giao vận cho phép truyền lại các mẩu tin bị lỗi trong lúc truyền phát bị mất. 1 ví dụ điển hình là các ứng dụng sử dụng TCP ( WEB, mail …) . - Khởi tạo pha. Lớp giao vận tạo ra các kết nối có định hướng bằng cách khởi tạo pha giữa các ứng dụng. Các kết nối này chuẩn bị cho các ứng dụng để sẵn sang kết nối với các ứng dụng khác trước khi truyền dữ liệu. Trong những phiên này, dữ liệu cho kết nối giữa 2 ứng dụng được quản lý sát sao. * Các dịch vụ trong lớp giao vận: 1. Lý thuyết: (xét theo mô hình tham chiếu OSI) a. Dịch vụ cho các lớp trên: Mục đích cuối cùng của lớp transport là cung cấp năng suất cao, độ tin cậy, hiệu quả về cost của các gói tin trên đường đi cho người dùng. Để đạt được mục đích này, lớp giao vận được sử dụng các dịch vụ mà lớp network mang lại. Các phần cứng và phần mềm của tầng giao vận còn được gọi là các thực thể giao vận ( transport entity). Các thực thể lớp giao vận nằm ở hạt nhân của hệ điều hành, trong 1 process riêng biệt của người dùng, nằm trong các gói thư viện liên kết với các ứng dụng ở lớp network hoặc hình thành trong card mạng. Mối quan hệ về mặt logic giữa các lớp application, transport , network được minh họa trong hình sau. Có 2 loại network service, connection-oriented và connectionless. Tương ứng với nó cũng có 2 loại transport service. Trong nhiều trường hợp, kết nối connection-oriented có 3 pha: khởi tạo, truyền dữ liệu, giải phóng kết nối. Gán địa chỉ và điều khiển luồng là giống nhau trong cả 2 lớp. Hơn nữa, dịch vụ lớp giao vận connectionless cũng tương tự như connectionless ở lớp network. Câu hỏi được đặt ra ở đây là : nếu tầng transport giống tầng network thì vì sao vẫn cần 2 tầng khác nhau? Tại sao không gộp lại thành 1 tầng? Câu trả lời là code của tầng transport chạy chủ yếu vào máy tính của người dùng. Nhưng code ở lớp network thì chạy trên router là chính. Chuyện gì sẽ xảy ra nếu lớp network cung cấp thiếu các dịch vụ? Điều đó có thể dẫn tới việc mất gói thường xuyên? Chuyện gì xảy ra nếu router bị hỏng liên tục? Người dùng không có cách nào để kiểm soát tầng network nên không thể xử lý được vấn đề của việc thiếu thốn các dịch vụ cần thiết bằng cách sử dụng các routers chất lượng cao hơn hoặc hỗ trợ thêm các biện pháp xử lý lỗi ở lớp data link. Khả năng duy nhất là đặt trên lớp network 1 lớp khác có thể làm tăng cường chất lượng dịch vụ. Ví dụ như trong kết nối có định hướng, thực thể lớp giao vận được thông báo giữa đường rằng kết nối đã bị gián đoạn. Vì không có chỉ dẫn nào cho trạng thái của dữ liệu hiện tại, một kết nối mới rất có khả năng được khởi tạo đến các thực thể lớp giao vận ở nơi khác trên mạng. Trên kết nối mới này, thực thể lớp giao vận ở nơi khác gửi truy hồi hỏi peer dữ liệu nào đã đến, dữ liệu nào chưa, và có thể truyền lại những phần dữ liệu chưa đến đích. Về bản chất, sự tồn tại của lớp transport làm cho các dịch vụ ở tầng giao vận tạo độ tin cậy cao hơn các dịch vụ ở các lớp dưới. Các gói bị mất hoặc bị phân mảnh có thể phát hiện được và bù trừ bởi tầng giao vận. Hơn nữa, các dịch vụ nguyên thủy của lớp giao vận có thể thực thi bằng cách gọi các thủ tục thư viện. Điều này khiến chúng độc lập với các dịch vụ nguyên thủy của lớp network. Các dịch vụ rất đa dạng tùy vào kiểu kết nối mạng. Bằng việc ẩn những dịch vụ lớp network dưới những thiết lập ở lớp transport , việc thay đổi 1 số dịch vụ mạng chỉ đơn giản là thay đổi các thủ tục trong thư viện bằng dịch vụ tương đương nhưng khác underlying service. Nhờ có lớp giao vận mà các lập trình viên có thể code theo nhữn thiết lập ban đầu nhất định và những chương trình này hoạt động giống nhau trên nhiều thiết bị, không quan trọng việc khác subnet interface hoặc truyền tin không tin cậy. Nói 1 cách khác, lớp giao vận đóng vai trò cô lập các lớp trên với công nghệ, thiết kế, sự dở dang của subnet. Vì lý do này người ta thường chia các tầng ra thành 2 nhóm: 4 lớp trên là transport service user (dịch vụ của người dùng) còn 4 lớp dưới là transport service provider ( dịch vụ thuộc về nhà cung cấp). Sự khác biệt giữa nhà cung cấp và người dùng là tác động quan trọng cần phải tính toán đến trong khi thiết kế và đặt lớp giao vận trong vị trí chủ chốt cần quan tâm. b. Các dịch vụ căn bản của tầng giao vận: Để cho phép người dùng can thiệp vào các dịch vụ ở tầng giao vận, một số chương trình được phát triển ví dụ như transport service interface được phát triển. Trong phần này chúng ta tìm hiểu 1 dịch vụ lớp transport cơ bản đề nắm được các ứng dụng. Các dịch vụ lớp transport gần giống như các dịch vụ lớp network nhưng vẫn có nhiều điểm khác biệt quan trọng. Network service dùng để mô hình hóa các dịch vụ được cung cấp bởi mạng thật. Trên thực tế việc truyền gói tin qua mạng luôn xảy ra hiện tượng mất gói, do đó nhìn chung các network service thường hạn chế về độ tin cậy. Các dịch vụ kết nối có định hướng (connection-oriented) có độ tin cậy cao là nhờ khả năng hỗ trợ xử lý các tổn thất trên đường truyền (đương nhiên sẽ xảy ra) như acknowledgement, congestion, lost packet… và che giấu chúng trong các ứng dụng của người dùng. Do đó người dùng có thể xem như các dòng bit là không có lỗi. Tầng giao vận cũng hỗ trợ các dịch vụ cho kết nối không tin cậy (connectionless service). Sự khác biệt thứ 2 giữa transport service và network service là network service được sử dụng bởi các thực thể của tầng giao vận. Dưới đây là 1 số các dịch vụ sơ khai của lớp transport. Những dịch vụ này cho phép người dùng khởi tạo, giải phóng kết nối cho các ứng dụng chạy trên các thiết bị cá nhân. Dưới đây là một số ví dụ về các dịch vụ của lớp transport , ta xem xét 2 mô hình client server với 2 kiểu kết nối TCP và UDP. Các dịch vụ của lớp transport được tóm gọn trong 1 khái niệm rất tổng quát: SOCKET. I. MÔ HÌNH TCP CLIENT-SERVER Mô hình TCP Client-Server 1. Phía Server:  Hàmsocket(): socket(int domain, int type, int protocol)  Ý nghĩa: Gọi socket descriptor mà ta muốn sử dụng  Tham số: int domain: Kiểu socket nào đang cần được sử dụng. domain có thể lấy các giá trị PF_INET cho IPv4 / PF_INET6 cho IPv6 hoặc AF_INET cho IPv4/ AF_INET6 cho IPv6. AF_INET = address family chỉ ra tập hợp những giao thức có chung định dạng địa chỉ, trong khi đó PF_INET là tập hợp những giao thức có cùng kiến trúc. Thông thường AF_INET và PF_INET có thể thay thế nhau. int type: cách thức truyền tin được sử dụng. tham số này có thể là SOCK_STREAM nếu ta muốn sử dụng truyền tin TCP; SOCK_DGRAM nếu ta muốn sử dụng truyền tin UDP; bên cạnh đó còn có SOCK_SEQPACKET để thiết lập truyền tin tin cậy với các bản tin UDP; SOCK_RAW cho internal network interface. int protocol: giao thức được sử dụng để truyền tin. Trường này có thể nhận 1 trong số các giá trị sau: IPPROTO_TCP nếu muốn sử dụng giao thức truyền tin TCP. IPPROTO_UDP nếu muốn sử dụng giao thức truyền tin UCP. IPPROTO_SCTP nếu muốn sử dụng giao thức truyền tin SCTP. 0 nếu muốn chương trình tự động chọn giao thức phù hợp với kiểu truyền tin tương ứng. Ngoài ra có thể sử dụng hàm getprotobyname() để tìm giá trị gán phù hợp cho giao thức trong trường này.  Giá trị trả về: Socket descriptor được dùng nếu thành công. Trả về giá trị -1 nếu lỗi.  Hàmbind(): bind(int sockfd,struct sockaddr * my_addr, socklen_t addrlen)  Ý nghĩa: Gán IP và port cho socket.  Tham số: sockfd: socket descriptor trả về từ hàm socket() vừa gọi ở trên. Với từng IP và port , giao thức ta có thể có những socket descriptor khác nhau và có thể bind vào các socket khác nhau. *my_addr: con trỏ trỏ đến struct địa chỉ tương ứng của socket. Struct địa chỉ của socket gồm 3 trường cơ bản là address family, IP , port và phải được biểu diễn theo cấu trúc big endian (network byte ordering). addrlen: chiều dài của cấu trúc sockaddr tương ứng.  Giá trị trả về: Trả về giá trị 0 nếu thành công. Trả về giá trị -1 nếu lỗi  Hàm listen(): listen(int sockfd, int backlog);  Ý nghĩa: thiết lập socket ở chế độ listen- lắng nghe các kết nối đến.  Tham số: sockfd: socket descriptor được gọi từ hàm socket() , cũng là file descriptor ta muốn lắng nghe cho những client nào. backlog: Số kết nối chưa được giải quyết tối đa có thể listen. Nếu số kết nối vượt quá backlog , kernel sẽ từ chối các kết nối đó.  Giá trị trả về: Trả về giá trị 0 nếu thành công. Trả về giá trị -1 nếu lỗi  Hàm accept(): accept(int s,struct sockaddr *addr, socklen_t *addrlen)  Ý nghĩa: Chấp nhận kết nối mới ở listening socket. Accept được gọi khi bên client thực hiện hàm connect().  Tham số: s: socket descriptor listening được gọi ở hàm socket(); *addr: con trỏ trỏ đến cấu trúc địa chỉ của client đang muốn khởi tạo kết nối đến server. addrlen: chiều dài cấu trúc địa chỉ của remote client đang muốn khởi tạo kết nối đến server.  Giá trị trả về: Trả về connected socket descriptor mới nếu thành công. Trả về giá trị -1 nếu bị lỗi.  Hàm send(): send(int s,const void *buf,size_t len, int flags);  Ý nghĩa: Thường được sử dụng cho TCP socket. Send sẽ gửi dữ liệu qua socket đến địa chỉ đích đã tạo kết nối ở trên.  Tham số: s: file descriptor được trả về từ hàm accept() Client sẽ trao đổi thông tin với server qua file descriptor này. *buf: con trỏ trỏ đến vùng nhớ cần được gửi đến client. Server sẽ gửi đi nội dung của con trỏ này đến client tương ứng. len: Số các bytes được gửi đi ở vùng nhớ được chỉ ra bởi con trỏ *buf ở trên. flags: chỉ ra thông tin về cách thức dữ liệu sẽ được gửi đi qua mạng. Trường flags =0 nếu muốn gửi dữ liệu theo cách thông thường. Ngoài ra còn có một số kiểu dữ liệu khác như sau: MSG_OOB Gửi out-of-band data – dữ liệu sử dụng để kiểm soát hệ thống, duy trì kết nối giữa 2 bên. Dữ liệu loại này có quyền ưu tiên hơn những dữ liệu bình thường. Receiver sẽ nhận ngay lập tức mà không bắt dữ liệu loại này nằm trong hàng đợi. MSG_DONTROUTE Không gửi dữ liệu loại này qua router, chỉ giữ nó trong mạng LAN (dữ liệu mang tính cục bộ) MSG_DONTWAIT Gửi dữ liệu bất chấp việc outbound traffic bị cản trở. MSG_NOSIGNAL Ngăn không cho tín hiệu SIGPIPE (chỉ thị socket này đã bị block ở remote side) xuất hiện, gửi dữ liệu đến client mặc dù client không còn thực hiện hàm recv().  Giá trị trả về: Số bytes đã được gửi đi thật sự. Trả về giá trị -1 nếu bị lỗi.  Hàm recv(): recv(int s , void const *buf, size_t len,int flags)  Ý nghĩa: Nhận dữ liệu qua socket.  Tham số: s: socket descriptor đang kết nối đến client tương ứng. *buf: con trỏ chỉ vào vùng nhớ chứa dữ liệu nhận được từ client. len: chiều dài vùng nhớ để nhận dữ liệu từ client. flags: cờ điều khiển thông tin về dữ liệu nhận. Có thể có một trong số các giá trị sau:

Ngày đăng: 04/04/2014, 00:03

Xem thêm

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w