Select the product you need help with
Isu-isu desain - mengirim data kecil segmen atas TCP dengan WinsockID Artikel: 214397 Pada Halaman iniRINGKASANKetika Anda perlu mengirim paket data kecil atas TCP, desain aplikasi Winsock Anda terutama penting. Desain yang tidak memperhitungkan interaksi pengakuan tertunda, tiba algoritma dan Winsock buffer dapat secara drastis mempengaruhi kinerja. Artikel ini membahas isu-isu ini, menggunakan beberapa kasus studi, dan berasal dari rekomendasi untuk mengirimkan paket-paket data kecil efisien dari aplikasi Winsock serangkaian. INFORMASI LEBIH LANJUTLatar belakangKetika setumpuk Microsoft TCP menerima paket data, waktu tunda 200-ms pergi. Ketika ACK akhirnya dikirim, waktu tunda reset dan akan memulai lain 200-ms menunda ketika paket data berikutnya yang diterima. Untuk meningkatkan efisiensi di Internet dan aplikasi intranet, Microsoft TCP tumpukan menggunakan kriteria berikut untuk memutuskan kapan untuk mengirim satu ACK pada paket data yang diterima:
Winsock menggunakan aturan berikut untuk menunjukkan penyelesaian kirim ke aplikasi (tergantung pada bagaimana Kirim dipanggil, pemberitahuan penyelesaian dapat fungsi kembali dari Pemblokiran panggilan, menandakan suatu peristiwa atau memanggil fungsi pemberitahuan, dan sebagainya):
Studi kasus 1Ikhtisar:Kebutuhan Winsock TCP klien untuk mengirim catatan 10000 Winsock TCP server untuk menyimpan dalam database. Ukuran catatan bervariasi dari 20 bytes 100 byte yang panjang. Untuk menyederhanakan logika aplikasi, desain adalah sebagai berikut:
Kinerja:Selama pengujian, pengembang menemukan klien hanya bisa mengirim catatan lima per detik ke server. Total 10000 catatan, maksimum pada 976 K bytes of data (10000 * 100 / 1024), mengambil lebih dari setengah jam untuk mengirim ke server.Analisis:Karena klien tidak menetapkan pilihan TCP_NODELAY, algoritma tiba memaksa TCP tumpukan untuk menunggu ACK sebelum itu dapat mengirim paket lain pada kabel. Namun, klien telah dinonaktifkan Winsock buffer dengan menetapkan pilihan SO_SNDBUF ke 0. Oleh karena itu, 10000 Kirim panggilan harus dikirim dan ACK'ed secara individual. ACK masing-masing adalah 200-ms tertunda karena berikut terjadi pada server TCP tumpukan:
Bagaimana untuk meningkatkan:Ada dua masalah dengan desain ini. Pertama, ada masalah waktu penundaan. Klien harus dapat untuk mengirim dua paket ke server dalam 200-MS karena klien menggunakan algoritma tiba secara default, itu harus hanya menggunakan default Winsock buffer dan tidak mengatur SO_SNDBUF ke 0. Setelah tumpukan TCP telah menyatu buffer yang lebih besar daripada Unit transmisi maksimum (MTU), berukuran penuh paket dikirim segera tanpa menunggu ACK dari remote host.Kedua, desain ini panggilan mengirim satu untuk setiap record seperti ukuran kecil. Mengirimkan ini kecil ukuran ini tidak sangat efisien. Dalam kasus ini, pengembang mungkin ingin pad setiap record untuk 100 byte dan mengirim catatan 80 pada waktu dari satu klien mengirim panggilan. Untuk membiarkan server yang tahu berapa banyak catatan akan dikirim secara total, klien mungkin ingin memulai komunikasi dengan memperbaiki berukuran header yang berisi jumlah record untuk mengikuti. Studi kasus 2Ikhtisar:Aplikasi klien Winsock TCP membuka dua koneksi dengan aplikasi server Winsock TCP yang menyediakan layanan saham. Sambungan pertama digunakan sebagai saluran perintah untuk mengirim simbol saham ke server. Koneksi kedua digunakan sebagai saluran data untuk menerima penawaran saham. Setelah dua sambungan telah dibentuk, klien mengirimkan simbol saham ke server melalui saluran perintah dan menunggu Penawaran saham kembali melalui saluran data. Mengirim permintaan simbol saham berikutnya ke server hanya setelah Penawaran saham pertama telah diterima. Klien dan server tidak mengatur opsi SO_SNDBUF dan TCP_NODELAY.Kinerja:Selama pengujian, pengembang menemukan klien hanya bisa mengutip lima per detik.Analisis:Desain ini hanya memungkinkan satu permintaan penawaran saham biasa pada satu waktu. Simbol saham pertama dikirim ke server melalui saluran perintah (sambungan) dan respon segera dikirim kembali dari server untuk klien melalui saluran data (sambungan). Kemudian, klien segera mengirimkan permintaan simbol saham kedua dan kirim kembali segera sebagai penyangga permintaan dalam panggilan mengirim disalin ke Winsock kernel buffer. Namun, tumpukan TCP klien tidak dapat mengirim permintaan dari kernel buffer segera karena pertama mengirim lebih dari saluran perintah tidak diakui lagi. Setelah 200-ms menunda timer pada server perintah saluran berakhir, ACK untuk permintaan simbol pertama datang kembali ke klien. Kemudian, permintaan penawaran kedua berhasil dikirim ke server setelah terlambat untuk 200-MS penawaran untuk simbol saham kedua datang kembali segera melalui saluran data karena, pada saat ini, waktu tunda pada saluran data klien telah kedaluwarsa. ACK untuk respon kutipan sebelumnya yang diterima oleh server. (Ingat bahwa klien tidak dapat mengirim permintaan penawaran saham kedua untuk 200-ms, sehingga memberikan waktu untuk waktu tunda pada klien untuk berakhir dan mengirim ACK ke server.) Sebagai hasilnya, klien mendapatkan respon kutipan kedua dan dapat mengeluarkan permintaan penawaran lain, yang tunduk pada siklus yang sama.Bagaimana untuk meningkatkan:Desain dua koneksi (saluran) tidak perlu di sini. Jika Anda menggunakan hanya satu sambungan untuk penawaran saham permintaan dan tanggapan, ACK untuk permintaan penawaran dapat piggybacked pada respon kutipan dan kembali segera. Untuk lebih meningkatkan kinerja, klien bisa "membuat" beberapa permintaan penawaran saham ke dalam satu panggilan kirim ke server dan server dapat juga "membuat" beberapa kutipan tanggapan ke satu Kirim panggilan kepada klien. Jika dua saluran unidirectional desain benar-benar perlu untuk beberapa alasan, kedua belah pihak harus menyetel opsi TCP_NODELAY sehingga paket-paket kecil dapat dikirim langsung tanpa harus menunggu ACK untuk paket sebelumnya.Rekomendasi:Sementara ini studi kasus dua fabrikasi, mereka membantu untuk menggambarkan beberapa skenario kasus yang terburuk. Ketika Anda merancang aplikasi yang melibatkan data kecil yang luas segmen mengirim dan recvs, Anda harus mempertimbangkan panduan berikut:
REFERENSIUntuk informasi lebih lanjut tentang tertunda pengakuan dan algoritma tiba, silakan lihat berikut: Braden, R. [1989], RFC 1122, persyaratan untuk Internet host--komunikasi lapisan, Internet Engineering Task Force. PropertiID Artikel: 214397 - Kajian Terakhir: 19 September 2011 - Revisi: 2.0
Penerjemahan Mesin PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah. Klik disini untuk melihat versi Inggris dari artikel ini:214397
(http://support.microsoft.com/kb/214397/en-us/
)
| Terjemahan Artikel |




Kembali ke atas








