一文读懂TCP的可靠传输原理

Dec 19, 2020 pm 12:52 PM
tcp

TCP下面的IP层是尽最大努力的交付,是不可靠的,所以TCP需要靠自己去完成可靠传输。下面,我们先从简单的停止等待协议来讲解可靠传输的如何实现的。需要注意可靠传输的几个特点:不丢失、不重复、按序到达。

注意,TCP并不使用停止等待协议来实现可靠传输。

停止等待协议

传输层的数据传输单元称为段。下面,为了方便,都称为分组。

停止等待协议的原理非常简单,发送一个分组后就停止继续发送,等待收到上一个分组的确认后,再继续发送后面的分组。

下面通过几个不同情况来分析:

无差错情况

无差错情况非常简单,如下图。每发送完一个分组后,就停止发送,等待收到该分组的确认后,再继续发送后面的分组。

QQ截图20201219115912.jpg

出现差错

出现差错分两种情况,第一种是发送的分组没有交付成功到目的地址,另一种情况是传送的数据包有差错。通过图例,我们来分析两种情况

QQ截图20201219115942.jpg

QQ截图20201219120001.jpg

首先来看看B的操作:A发送M1分组,该分组如果是错误的,B收到后会丢弃该数分组,然后什么也不做(不会通知A收到了错误分组)。如果B没有收到M1分组,那么它什么也不知道,也不会去做任何动作。

接下来看A是如何做的:A发完分组后,迟迟收不到B对M1分组的确认后,当等待的时间超时了,那么就需要重新发送该M1分组。要实现超时重传,就需要设置一个超时计时器,当发送的一个分组在超时时间前收到了确认,那么就重置超时计时器,否则的话就需要重传分组。

有几点是需要注意的:

  • A在发送完一个分组后,必须还要保存该分组的副本,以便超时重传。当收到这个分组的确认后,就可以丢弃该分组的副本了。

  • 需要给每一个分组做编号,这样才知道是各个分组的到达情况。

  • 超时时间应该设置的比平均传输时间稍长一些,以免引起不必要的重传。

确认丢失和确认迟到

除了分组在传送过程中会出现差错,在返回确认的时候,也会出现差错——确认丢失和确认迟到。

QQ截图20201219120013.jpg

首先看确认丢失情况,A的分组B收到了,并给A发送了确认,但该确认丢失了,A没有收到。因为A没有收到M1的确认,那么等待超过超时后,就会向B重传M1。这个时候B收到了重复的分组M1,需要做两个操作:

  • 将重复的分组M1丢弃

  • 向A发送M1的确认。因为既然A重传了M1,就表示A没有收到M1的分组。所以B需要继续发送对M1的确认。

QQ截图20201219120103.jpg

再来看另一种情况,对M1的分组确认迟到了(超过超时时间后才收到)。A在收到重复的确认后,会丢弃,其他什么也不做。

通过上述的超时重传机制,就可以实现在不可靠的网络传输上实现可靠的传输。

信道利用率

上述的停止等待协议简单,但它有一个非常大的缺点——信道的利用率太低。在等待收到确认的这段时间,信道是完全空闲的,十分浪费。

QQ截图20201216113001.jpg

为了提高信道利用率,可以使用流水线传输,流水线传输可以连续发送多个分组,这样就可以大大提高信道利用率了。

QQ截图20201216113011.jpg

采用流水线传输的协议有连续ARQ协议窗口滑动协议。而TCP就是采用滑动窗口协议来完成可靠传输的。

Atas ialah kandungan terperinci 一文读懂TCP的可靠传输原理. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menetapkan semula protokol tcp/ip dalam win10? Bagaimana untuk menetapkan semula timbunan protokol tcp/ip dalam windows 10 Bagaimana untuk menetapkan semula protokol tcp/ip dalam win10? Bagaimana untuk menetapkan semula timbunan protokol tcp/ip dalam windows 10 Mar 16, 2024 am 11:07 AM

Bagaimana untuk menetapkan semula protokol tcp/ip dalam win10? Sebenarnya, kaedahnya sangat mudah Pengguna boleh terus memasukkan command prompt, dan kemudian tekan kombinasi kekunci ctrl+shift+enter untuk melaksanakan operasi, atau terus laksanakan arahan set semula untuk menyediakan pengguna pengenalan terperinci tentang cara menetapkan semula susunan protokol TCP/IP dalam Windows 10. Kaedah 1 untuk menetapkan semula timbunan protokol tcp/ip dalam windows 10. Kebenaran pentadbir 1. Kami menggunakan kekunci pintasan win+R untuk terus membuka tetingkap jalankan, kemudian masukkan cmd dan tahan ctrl+shift+enter kombinasi kekunci. 2. Atau kita boleh terus mencari command prompt dalam menu mula dan klik kanan

Menggunakan Netty4 untuk komunikasi TCP dalam pembangunan API Java Menggunakan Netty4 untuk komunikasi TCP dalam pembangunan API Java Jun 17, 2023 pm 11:18 PM

TCP ialah protokol komunikasi rangkaian komputer dan protokol penghantaran berorientasikan sambungan. Dalam pembangunan aplikasi Java, komunikasi TCP digunakan secara meluas dalam pelbagai senario, seperti penghantaran data antara pelanggan dan pelayan, penghantaran audio dan video masa nyata, dsb. Netty4 ialah rangka kerja pengaturcaraan rangkaian berprestasi tinggi, sangat berskala dan berprestasi tinggi yang boleh mengoptimumkan proses pertukaran data antara pelayan dan pelanggan untuk menjadikannya lebih cekap dan boleh dipercayai. Langkah-langkah pelaksanaan khusus menggunakan Netty4 untuk komunikasi TCP adalah seperti berikut: Pengenalan

Cara menggunakan TCP untuk melaksanakan perbualan antara klien dan pelayan dalam python Cara menggunakan TCP untuk melaksanakan perbualan antara klien dan pelayan dalam python May 17, 2023 pm 03:40 PM

Klien TCP Kod sampel pelanggan yang menggunakan protokol TCP untuk mencapai dialog berterusan: importsocket#Konfigurasi pelanggan HOST='localhost'PORT=12345#Buat soket TCP dan sambung ke pelayan client_socket=socket.socket(socket.AF_INET,socket . SOCK_STREAM)client_socket.connect((HOST,PORT))whileTrue:#Dapatkan mesej input pengguna=input("Sila masukkan mesej yang hendak dihantar:&

Jumpa lagi! TCP bergelombang dua kali, pernahkah anda melihatnya? Bagaimana dengan empat jabat tangan? Jumpa lagi! TCP bergelombang dua kali, pernahkah anda melihatnya? Bagaimana dengan empat jabat tangan? Jul 24, 2023 pm 05:18 PM

"Berorientasikan sambungan" yang disebut di sini bermakna anda perlu membuat sambungan, menggunakan sambungan dan melepaskan sambungan. Mewujudkan sambungan merujuk kepada jabat tangan tiga hala TCP yang terkenal. Apabila menggunakan sambungan, data dihantar dalam bentuk satu hantaran dan satu pengesahan. Terdapat juga pelepasan sambungan, yang merupakan gelombang empat gelombang TCP biasa kami.

Isyarat SIGPIPE Linux Isyarat SIGPIPE Linux Feb 19, 2024 pm 04:00 PM

Di antara pihak komunikasi TCP, untuk kemudahan penerangan, pihak komunikasi digantikan dengan A dan B dalam perkara berikut. Menurut protokol TCP, jika B terus menghantar data selepas A menutup sambungan, B akan menerima respons RST A. Jika B terus menghantar data, sistem akan menghantar isyarat SIGPIPE untuk memaklumkan bahawa sambungan telah diputuskan dan berhenti menghantar. Tingkah laku pemprosesan lalai sistem untuk isyarat SIGPIPE adalah untuk membiarkan proses B keluar. Tingkah laku pemprosesan lalai sistem pengendalian untuk isyarat SIGPIPE adalah sangat tidak mesra. Komunikasi TCP ialah saluran dupleks penuh, yang bersamaan dengan dua saluran simpleks, dan setiap hujung sambungan bertanggungjawab untuk satu. Apabila hujung bertentangan "menutup", walaupun niatnya adalah untuk menutup keseluruhan dua saluran, hujung tempatan hanya menerima paket FIN. Menurut peruntukan protokol TCP, apabila a

Bagaimana untuk menghantar berbilang fail menggunakan sambungan TCP tunggal dalam Java? Bagaimana untuk menghantar berbilang fail menggunakan sambungan TCP tunggal dalam Java? Apr 27, 2023 am 08:49 AM

Mengapakah terdapat blog ini tentang menggunakan satu sambungan TCP untuk menghantar berbilang fail? Saya telah membaca beberapa perkara yang berkaitan baru-baru ini. Tiada masalah dengan hanya menggunakan Socket untuk pengaturcaraan, tetapi ini hanya menetapkan beberapa konsep asas. Masih tiada apa yang boleh dilakukan tentang masalah sebenar. Apabila saya perlu memindahkan fail, saya mendapati bahawa saya seolah-olah baru sahaja menghantar data (data binari), tetapi beberapa maklumat tentang fail itu hilang (sambungan fail). Dan setiap kali saya hanya boleh menggunakan satu Soket untuk menghantar satu fail, tidak ada cara untuk menghantar fail secara berterusan (kerana saya bergantung pada penutupan strim untuk menyelesaikan penghantaran fail, yang bermaksud bahawa saya sebenarnya tidak tahu panjang fail, jadi saya hanya boleh menghantar fail kerana satu sambungan Soket mewakili fail).

Apakah perbezaan antara tcp dan ip Apakah perbezaan antara tcp dan ip Sep 04, 2023 pm 02:19 PM

TCP dan IP adalah dua protokol yang berbeza dalam Internet: 1. TCP ialah protokol lapisan pengangkutan, manakala IP ialah protokol lapisan rangkaian 2. TCP menyediakan fungsi seperti pembahagian, pengisihan, pengesahan dan penghantaran semula paket data , dan IP protokol bertanggungjawab untuk menyediakan alamat sumber dan destinasi untuk paket data; 3. TCP ialah protokol berorientasikan sambungan, manakala protokol IP adalah tanpa sambungan;

Penemuduga bertanya: Berapa banyak permintaan HTTP yang boleh dihantar oleh sambungan TCP? Penemuduga bertanya: Berapa banyak permintaan HTTP yang boleh dihantar oleh sambungan TCP? Feb 22, 2023 pm 12:00 PM

Pernah ada soalan temu bual klasik seperti ini: Apakah yang berlaku dalam proses daripada URL yang dimasukkan dalam penyemak imbas ke halaman yang dipaparkan? Saya percaya bahawa kebanyakan pelajar yang telah menyediakan boleh menjawabnya, tetapi jika anda terus bertanya: Jika HTML yang diterima mengandungi berpuluh-puluh teg imej, dalam cara bagaimana, dalam susunan apa, berapa banyak sambungan yang diwujudkan dan protokol yang digunakan untuk memuat turun gambar-gambar ini?

See all articles