Di RFC 793 ada bagian tentang pengakuan segmen TCP:
Ketika TCP mentransmisikan segmen yang berisi data, ia menempatkan salinan pada antrian pengiriman ulang dan memulai timer; ketika pengakuan untuk data itu diterima, segmen dihapus dari antrian. Jika pengakuan tidak diterima sebelum timer habis, segmen dikirim ulang.
Pengakuan oleh TCP tidak menjamin bahwa data telah dikirim ke pengguna akhir , tetapi hanya bahwa penerima TCP telah mengambil tanggung jawab untuk melakukannya.
Sekarang, ini menarik. Di NOC kami, kami sering memecahkan masalah konektivitas antara jaringan kami dan jaringan klien eksternal dan setiap kali kami mengendus lalu lintas pada firewall dan melihat SYN dan ACK bit dikirim dan diterima di kedua arah, kami menganggap bahwa konektivitas dibuat dan masalah tidak ada lakukan dengan jaringan.
Tapi sekarang RFC ini membuat saya berpikir - apa lagi yang harus saya periksa (tanpa mengatur Wireshark) jika koneksi TCP dibuat tetapi pengguna masih mengalami masalah konektivitas?
sumber
Jawaban:
Bagian dari RFC ini adalah tentang menyerahkan tanggung jawab ke sistem operasi atau apa pun tahap proses selanjutnya. Ini pada dasarnya berkaitan dengan pemisahan lapisan.
Saya selalu memikirkannya seperti ini:
Semua yang dikatakannya adalah bahwa ini adalah pengakuan lapisan 3 ("Saya mendengar byte Anda") bukan pengakuan lapisan yang lebih tinggi . Pertimbangkan misalnya perbedaan antara ACK TCP, SMTP
250 OK
setelah gateway email next-hop menerima pesan, pesan penerimaan pesan (misalnya per RFC 3798 ), piksel pelacakan yang dibuka pesan, catatan terima kasih dari PA, dan sebuah jawaban yang mengatakan "Ya, aku akan melakukannya."Contoh konkret lainnya adalah printer:
Saya akan menyarankan bahwa jika pengguna melihat dan mengirim ACK tetapi masih mengalami masalah konektivitas, itu adalah urutan besarnya kemungkinan bahwa ada masalah kemacetan, OS, atau aplikasi daripada apa pun yang terkait dengan jaringan.
Untuk mendiagnosis saya sarankan mencari transmisi ulang, daripada ACK secara khusus.
sumber
recv()
soket, dalam hal ini data yang diterima akan tetap berada di buffer-terima soket TCP tanpa batas.Dari perspektif RFC, "pengguna akhir" adalah aplikasi. Tidak ada jaminan bahwa aplikasi mendapatkan data, hanya saja proses TCP menerimanya.
Dari perspektif NOC Anda, jaringan berfungsi dan data mencapai host akhir. Agaknya, hanya itu yang Anda pedulikan.
sumber
Anda bisa melihatnya dengan cara ini.
Anda adalah M.Smith dan Anda ingin mengirim surat ke M.Toto (orang adalah lapisan aplikasi).
Untuk mengirim surat, Anda pergi ke kantor pos setempat A yang akan mengirim surat ke M.Toto kantor pos lokal B (kantor pos adalah lapisan TCP).
Semuanya dapat berjalan dengan baik di antara Anda, kantor pos A dan kantor pos B - B akan mengirim ACK ke kantor pos A. Tetapi tidak ada yang menjamin bahwa surat itu akan sampai ke M.Toto. Apa pun bisa terjadi antara kantor pos B dan M.Toto.
Pada dasarnya itulah yang dikatakan RFC.
sumber