Mencoba mencari tahu biaya overhead TCP yang tepat

9

Sesuai dengan topik ini:

/programming/3613989/what-of-traffic-is-network-overhead-on-top-of-http-s-requests

Ukuran segmen maksimum (yang tidak termasuk tajuk TCP atau IP) biasanya dinegosiasikan antara lapisan dengan ukuran MTU dikurangi ukuran tajuk. Untuk Ethernet MTU biasanya dikonfigurasi pada 1500 byte. Header TCP adalah 160 bit, atau 20 byte. Bagian tetap dari header IPv4 adalah 160 bit, atau 20 byte juga. ... Jadi:

  • untuk HTTP melalui TCP / IPv4

overhead = TCP + IP = 40 byte

payload = 1500 - 40 = 1460 byte

overhead% = 2% (40 * 100/1460)

Inilah 100 Mbit dan 1Gbit hasil iperf dalam mode TCP dengan distro Debian default:

[  5] local 10.0.51.1 port 5001 connected with 10.0.51.20 port 45009
[  5]  0.0-10.0 sec   112 MBytes  94.1 Mbits/sec
[  4] local 10.0.51.1 port 5001 connected with 10.0.51.94 port 35065
[  4]  0.0-10.0 sec  1.10 GBytes   941 Mbits/sec

Saya dapat menurunkannya ke hampir 2% overhead dengan menaikkan MTU ke 9000:

[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  1.14 GBytes   982 Mbits/sec

Tapi bukankah seharusnya lebih sedikit?

overhead = TCP + IP = 40 bytes
payload = 9000 - 40 = 8960 bytes
overhead % = 0.4% (40 * 100 / 8960)

Mengapa sebenarnya "kehilangan bandwidth" jauh lebih besar daripada teori? Jika formula kehilangan sesuatu yang berharga?

agrrh
sumber

Jawaban:

16

Paket Ethernet 1.5k

1500 - 20 B (IPv4) - 20 B (TCP + checksum) = 1460 B DATA (dan 40 B Overhead)

Tambahkan 40 B + 14 B (Ethernet) + 4 B (FCS) + 12 B (Interframe gap) + 8 B (Pembukaan) = 78 B Overhead

78/1460 * 100 = overhead 5,34%

1460 / (1460 + 78) * 100 = 94,93% Throughput / Goodput

1.000.000.000 (1Gbit) * 94,93% = 949Mbit / s (0,949Gbit / s)

Anda mengukur 941Mbit / s yang menghasilkan (949 - 941) / 949 * 100 = 0,84% kesalahan antara teori dan aktual.


Paket Jumbo 9k - Maks. Teoritis

(9000-40) / ( 9000 - 40 + 78 ) *100 = 99.14%  (Overhead 0.86%)  

1.000.000.000 (1Gbit) * 99,14% = 991Mbit / s (0,99Gbit / s)

Pieter
sumber
1
Mungkin ada juga pengaruh fitur mulai lambat, tapi saya tidak yakin apakah itu cukup besar. Terima kasih. :)
agrrh
Ah, ethernet memiliki 4 byte FCS di akhir frame, izinkan saya menambahkannya ke perhitungan.
Pieter
4

Overhead biasanya dihitung berdasarkan ukuran data total . Dengan begitu, angka tersebut sesuai dengan nilai efisiensi.

Untuk TCP over IPv4 over Ethernet yang Anda miliki (tanpa opsi header):

  • L1 overhead - pembukaan, IPG: 8 + 12 = 20
  • Overhead L2 - tajuk Ethernet, FCS = 18
  • Overhead L3 - header IPv4 = 20
  • L4 overhead - header TCP = 20

Ukuran paket maksimum L3 dari 1500 menghasilkan total ukuran data L1 dari 1500 + 18 + 20 = 1538 byte dan ukuran muatan L4 maksimum 1500-20-20 = 1460 byte .

  • Overhead: 78/1538 * 100% = 5.07%
  • Efisiensi: 1460/1538 * 100% = 94,93%

Dengan bingkai jumbo 9k (non-802.3), Anda akan mendapatkannya

  • Overhead: 78/9038 * 100% = 0,86%
  • Efisiensi: 8960/9038 * 100% = 99,14%

Ini adalah nilai - nilai teoretis dan terbaik . Dalam kehidupan nyata, Anda juga akan memiliki beberapa perangkat keras dan overhead OS sedikit memakan nilai efisiensi. Fitur-fitur seperti offloading dan multi-core interrupt steering dapat mengurangi overhead pemrosesan dan membuat Anda lebih dekat dengan angka-angka teoretis (lebih relevan dengan NIC kecepatan lebih tinggi). Yang Anda ukur terlihat cukup realistis seperti yang ditunjukkan Pieter.

Zac67
sumber