3.4 các nguyên tắc của truyền dữ liệu đáng tin cậyTrong phần này, chúng tôi xem xét vấn đề đáng tin cậy dữ liệu truyền trong một con chung, văn bản. Điều này là thích hợp vì vấn đề của việc thực hiện truyền dữ liệu đáng tin cậy xảy ra không chỉ ở tầng giao vận, nhưng cũng tại tầng liên kết và các lớp ứng dụng. Vấn đề chung như vậy là trung tâm quan trọng với mạng. Thật vậy, nếu một trong những phải xác định một danh sách "top 10" của các vấn đề quan trọng về cơ bản trong tất cả các mạng, điều này sẽ là một ứng cử viên dẫn đầu danh sách. Trong phần tiếp theo, chúng ta sẽ xem xét TCP và hiển thị, đặc biệt, TCP khai thác nhiều người trong số các nguyên tắc mà chúng tôi đang về để mô tả. 3.8 hình minh hoạ nền tảng để chúng tôi nghiên cứu về truyền dữ liệu đáng tin cậy. Trừu tượng dịch vụ cung cấp cho các thực thể trên lớp là một kênh đáng tin cậy qua dữ liệu có thể được chuyển giao. Với một kênh đáng tin cậy, không có bit dữ liệu chuyển giao đang bị hỏng (lộn từ 0 tới 1, hoặc ngược lại) hoặc bị mất, và tất cả được gửi theo thứ tự chúng đã được gửi. Điều này là chính xác có mô hình dịch vụ được cung cấp bởi TCP đến các ứng dụng Internet gọi nó. Nó là trách nhiệm của một giao thức truyền dữ liệu đáng tin cậy để thực hiện điều này trừu tượng dịch vụ. Nhiệm vụ này được thực hiện khó khăn bởi thực tế rằng các lớp dưới đây giao thức truyền dữ liệu đáng tin cậy có thể không đáng tin cậy. Ví dụ, TCP là một giao thức truyền dữ liệu đáng tin cậy được thực hiện trên đầu trang của một không đáng tin cậy (IP) end-to-end net-làm việc lớp. Nói chung, các lớp bên dưới hai điểm cuối đáng tin cậy giao tiếp có thể bao gồm một liên kết duy nhất vật lý (như trong trường hợp của một giao thức truyền dữ liệu liên kết cấp) hoặc một internetwork toàn cầu (như trong trường hợp của một vận chuyển cấp proto-col). Cho các mục đích của chúng tôi, Tuy nhiên, chúng tôi có thể xem lớp thấp này đơn giản là một kênh thể unreli điểm. Trong phần này, chúng tôi sẽ từng bước phát triển ở hai bên người gửi và người nhận của một giao thức truyền dữ liệu đáng tin cậy, xem xét các mô hình ngày càng phức tạp của các kênh nằm dưới. Ví dụ, chúng tôi sẽ xem xét những gì cơ chế giao thức là cần thiết khi các kênh nằm bên dưới có thể tham nhũng bit hoặc mất toàn bộ gói. Một trong những giả định chúng tôi sẽ áp dụng trong suốt cuộc thảo luận của chúng tôi ở đây là gói tin sẽ được gửi theo thứ tự mà trong đó họ đã được gửi, với một số gói có thể bị mất; có nghĩa là, các kênh cơ bản sẽ không sắp xếp lại gói. Tìm 3.8(b) minh họa các giao diện cho giao thức truyền dữ liệu của chúng tôi. Bên giao thức truyền dữ liệu, gửi sẽ được kích hoạt từ phía trên bằng một cuộc gọi đến rdt_send(). Nó sẽ vượt qua các dữ liệu sẽ được chuyển giao cho lớp trên ở phía bên nhận. (Ở đây rdt là viết tắt của giao thức truyền dữ liệu đáng tin cậy và _send chỉ ra rằng bên gửi của rdt được gọi là. Bước đầu tiên trong việc phát triển bất kỳ giao thức là để chọn một tên tốt!) Về phía nhận, rdt_rcv() sẽ được gọi là khi một gói tin đến từ phía nhận của các kênh. Khi giao thức rdt muốn cung cấp dữ liệu cho lớp trên, nó sẽ làm như vậy bằng cách gọi điện thoại deliver_data(). Ở đây chúng tôi sử dụng thuật ngữ "gói" thay vì tầng giao vận "phân đoạn". Bởi vì lý thuyết được phát triển trong phần này áp dụng cho mạng máy tính nói chung và không chỉ để Internet cho tầng giao vận, thuật ngữ chung "gói" có lẽ thêm thích hợp ở đây.Trong phần này chúng tôi xem xét trường hợp của truyền dữ liệu unidirectional, có nghĩa là, truyền dữ liệu gửi đến phía bên nhận. Trường hợp của hai chiều đáng tin cậy (có nghĩa là, đầy đủ-kép) truyền dữ liệu là khái niệm không khó khăn nhưng đáng kể hơn tẻ nhạt để giải thích. Mặc dù chúng tôi xem xét chỉ unidirectional dữ liệu chuyển giao, nó là quan trọng cần lưu ý rằng ở hai bên gửi và nhận của chúng tôi giao thức sẽ Tuy nhiên cần phải truyền tải gói dữ liệu trong cả hai chiều, như được chỉ ra ở hình 3.8. Chúng ta sẽ thấy ngay rằng, ngoài việc trao đổi các gói dữ liệu có chứa dữ liệu được chuyển giao, gửi và nhận tin nhắn bên rdt cũng sẽ cần phải trao đổi gói dữ liệu kiểm soát lại. Cả hai gửi và nhận được bên rdt gửi gói để phía bên kia của một cuộc gọi đến udt_send() (nơi udt tượng trưng cho truyền dữ liệu không đáng tin cậy).3.4.1 xây dựng một giao thức truyền dữ liệu đáng tin cậyChúng tôi bây giờ bước thông qua một loạt các giao thức, mỗi một ngày càng trở nên phức tạp hơn, chóng-ing tại một giao thức truyền dữ liệu hoàn hảo, đáng tin cậy.Đáng tin cậy dữ liệu chuyển trong một hoàn toàn đáng tin cậy kênh: rdt1.0Chúng tôi đầu tiên xem xét trường hợp đơn giản nhất, trong đó các kênh nằm bên dưới là hoàn toàn đáng tin cậy. Giao thức chính nó, mà chúng tôi sẽ gọi là rdt1.0, là tầm thường. Các định nghĩa hữu hạn trạng thái máy (FSM) cho rdt1.0 người gửi và người nhận được hiển thị trong hình 3.9. FSM ở con số 3.9(a) xác định các hoạt động của người gửi, trong khi FSM ở con số 3.9(b) xác định hoạt động của người nhận. Nó là quan trọng cần lưu ý rằng không có riêng biệt FSMs cho người gửi và người nhận. Người gửi và người nhận FSMs trong hình 3.9 mỗi có chỉ là một nhà nước. Các mũi tên trong các mô tả FSM cho thấy sự chuyển đổi của các giao thức từ một tiểu bang khác. (Kể từ khi mỗi FSM trong hình 3.9 đã chỉ là một nhà nước, một quá trình chuyển đổi là nhất thiết phải từ một tiểu bang quay lại chính nó; chúng ta sẽ thấy phức tạp hơn bang sơ đồ ngay.) Các sự kiện gây ra quá trình chuyển đổi được hiển thị ở trên đường ngang ghi nhãn quá trình chuyển đổi, và hành động thực hiện khi xảy ra các sự kiện được hiển thị dưới mức ngang. Khi không có hành động được thực hiện trên một sự kiện, hoặc không có sự kiện xảy ra và một hành động được lấy, chúng tôi sẽ sử dụng biểu tượng dưới hoặc trên ngang, tương ứng, để biểu thị một cách rõ ràng thiếu một hành động hoặc sự kiện. Bang FSM, ban đầu được chỉ định bởi tiêu tan mũi tên. Mặc dù FSMs trong hình 3.9 có nhưng một tiểu bang, FSMs chúng ta sẽ thấy ngay có nhiều kỳ, do đó, nó sẽ là quan trọng để xác định các bang mỗi FSM, ban đầu.The sending side of rdt simply accepts data from the upper layer via the rdt_send(data) event, creates a packet containing the data (via the action make_pkt(data)) and sends the packet into the channel. In practice, the rdt_send(data) event would result from a procedure call (for example, to rdt_send()) by the upper-layer application.On the receiving side, rdt receives a packet from the underlying channel via the rdt_rcv(packet) event, removes the data from the packet (via the action extract (packet, data)) and passes the data up to the upper layer (via the action deliver_data(data)). In practice, the rdt_rcv(packet) event would result from a procedure call (for example, to rdt_rcv()) from the lower-layer protocol.In this simple protocol, there is no difference between a unit of data and a packet. Also, all packet flow is from the sender to receiver; with a perfectly reliable channel there is no need for the receiver side to provide any feedback to the sender since nothing can go wrong! Note that we have also assumed that the receiver is able to receive data as fast as the sender happens to send data. Thus, there is no need for the receiver to ask the sender to slow down!Reliable Data Transfer over a Channel with Bit Errors: rdt2.0A more realistic model of the underlying channel is one in which bits in a packet may be corrupted. Such bit errors typically occur in the physical components of a network as a packet is transmitted, propagates, or is buffered. We’ll continue to assume for the moment that all transmitted packets are received (although their bits may be corrupted) in the order in which they were sent.Before developing a protocol for reliably communicating over such a channel, first consider how people might deal with such a situation. Consider how you your-self might dictate a long message over the phone. In a typical scenario, the message taker might say “OK” after each sentence has been heard, understood, and recorded. If the message taker hears a garbled sentence, you’re asked to repeat the garbled sentence. This message-dictation protocol uses both positive acknowledgments (“OK”) and negative acknowledgments (“Please repeat that.”). These control mes-sages allow the receiver to let the sender know what has been received correctly, and what has been received in error and thus requires repeating. In a computer network setting, reliable data transfer protocols based on such retransmission are known as ARQ (Automatic Repeat reQuest) protocols.Fundamentally, three additional protocol capabilities are required in ARQ protocols to handle the presence of bit errors:Error detection. First, a mechanism is needed to allow the receiver to detect when bit errors have occurred. Recall from the previous section that UDP uses the Internet checksum field for exactly this purpose. In Chapter 5 we’ll exam- ine error-detection and -correction techniques in greater detail; these tech-niques allow the receiver to detect and possibly correct packet bit errors. For now, we need only know that these techniques require that extra bits (beyond the bits of original data to be transferred) be sent from the sender to the receiver; these bits will be gathered into the packet checksum field of the rdt2.0 data packet.
đang được dịch, vui lòng đợi..