TCP neden paket başına 1'den fazla ack gönderir?


0

Kaynağım 4794 baytlık paketler gönderir (en azından her birinin 1 paket gibi göründüğüne göre), hedef makine gönderir 2 acks için her Paket kaynaktan gönderildi.
Hedef makinenin okuma yığını boyutunu değiştirmeyi denedim ( /proc/sys/net/ipv4/tcp_rmem ) 4906'dan daha yüksek bir değere (bu varsayılan minimumdur), ancak herhangi bir değişiklik görmedim.
Her iki sistemde linux (centos) çalışıyor.
kullanırım tcpdump ve yakalanmaları analiz etmek için 'wireshark'.

İşte wireshark bir ekran görüntüsü:

enter image description here

Src 172.16.33.237, dst 172.16.34.111'dir.
Her 4794 paketinin 2 dolara sahip olduğuna dikkat edin.
194 baytlık paketler varış yerinin uygulama yanıtıdır (ve bu tartışma için uygun olmadığını düşünüyorum)


wireshark resimlerini içerir. Resmin gizlenmesini istediğiniz kısımlarını kesebilirsiniz
barlop

ekledi, lütfen bir göz atın, teşekkürler
SagiLow

uzman değilim ama belki (bilmiyorum ama belki de), örneğin; SYN, SYN ACK, FIN, ör.
barlop

Yanıtlar:


1

Çok sayıda NIC kullanımı Büyük Segment Boşaltma NIC sürücüsünün, TCP verilerini, sistem CPU'sundan ziyade, iletim için daha küçük paketlere bölmekten sorumlu olduğu durumlarda. tcpdump / Wireshark, NIC tarafından kesilmeden önce trafiği yakalar; bu nedenle, yakalamadaki arabirimin MTU değerinden daha büyük paketleri bazen görebilirsiniz.

Standart bir MTU'nun 1500 Byte kullanıldığını varsayarsak, 4 paket gönderilmesini gerektirir. TCP Gecikmeli Onay tipik olarak her ikinci paket için bir ACK gönderilmesine neden olacak başka bir performans özelliğidir.


Merhaba, Uyarı Paket başına 2 ack, 2 paket için 1 ack görmüyorum, her iki sistemde mtu ayarını 9000 olarak ayarlamayı denedim ve
SagiLow

İki cihazınız tarafından kullanılan MTU nedir?
Mark Riddell

1500 ile başladım ve 9000'e yükselttim, her iki durumda da paket başına 2 acks kazanıyorum
SagiLow

Tamam, standart 1500 MTU'ya sadık kalalım. 1500'lük MTU ile, tek bir paketin 4794 Bayt olması imkansızdır. Bu nedenle, Büyük Segment boşaltmasının etkilerini, verilerin henüz bölünmemiş olduğu Wireshark'ta gördüğünüzü gösterir. 4794 Baytlık tek bir "paket" gönderilecek 4 gerçek paket gerektirecektir. Gecikmeli ACK, her ikinci paket için bir ACK paketi gönderir. Bu yüzden göreceksin iki senin için acks bir Wireshark'ta görüntülendiğinde "paket".
Mark Riddell

1
Kaynağınız TCP paketleri gönderiyorsa, MSS'yi de ayarlıyor musunuz?
Mark Riddell

0

Yazının tamamını okuyun İşte .

TCP Buffer boyutunu ayarlayabilirsiniz. İlk önce lütfen yapılandırılmış değerleri kontrol etmek için aşağıdaki komutları yazın:

$ cat /proc/sys/net/ipv4/tcp_mem

Soket belleği almak için maksimum miktarı bulun:

$ cat /proc/sys/net/core/rmem_default

$ cat /proc/sys/net/core/rmem_max

Gönderme soketi hafızası için:

$ cat /proc/sys/net/core/wmem_default

$ cat /proc/sys/net/core/wmem_max

Ve bellek arabellekleri için maksimum miktar:

$ cat /proc/sys/net/core/optmem_max

Ayar Değerleri (wmem ve rmem):

Tüm protokollerde maksimum gönderme wmem ayarlamalısınız ve rmem tampon boyutunu 12 MB olarak almalısınız. Lütfen komutları takip edin:

# echo 'net.core.wmem_max=12582912' >> /etc/sysctl.conf

# echo 'net.core.rmem_max=12582912' >> /etc/sysctl.conf

Minimum, başlangıç ​​ve maksimum boyutu ayarla (bayt cinsinden belirtin):

# echo 'net.ipv4.tcp_rmem= 10240 87380 12582912' >> /etc/sysctl.conf

# echo 'net.ipv4.tcp_wmem= 10240 87380 12582912' >> /etc/sysctl.conf

Aktarım penceresini büyüt:

# echo 'net.ipv4.tcp_window_scaling = 1' >> /etc/sysctl.conf

RFC1323'te tanımlandığı gibi zaman damgalarını etkinleştirin:

# echo 'net.ipv4.tcp_timestamps = 1' >> /etc/sysctl.conf

Onayları etkinleştir:

# echo 'net.ipv4.tcp_sack = 1' >> /etc/sysctl.conf

Bağlantıyı kapatırken kök önbellek için bağlantı metrikleri ayarlanmışsa, o zaman:

# echo 'net.ipv4.tcp_no_metrics_save = 1' >> /etc/sysctl.conf

Giriş tarafı için maksimum paket sayısını ayarlayın:

# echo 'net.core.netdev_max_backlog = 5000' >> /etc/sysctl.conf

Lütfen değişiklikleri tekrar yükleyin:

# sysctl -p

Değişiklikleri görüntüleyin:

# tcpdump -ni eth0

1
Yararlı bilgi iken, bunun asıl soruyu nasıl cevapladığından emin değilim.
Mark Riddell

0

MarkoPolo haklı. Ancak, eğer bir ağ musluğu kullanırsanız, ağ üzerinden gönderilen gerçek paketleri yakalayacağınızı ve daha mantıklı olacağını söylemedi. Gördüğünüz şey, bir pakette birleştirilen 3 paket. Alıcı TCP, gecikmiş ACK kullanıyor ve her bir veya iki paketi onaylıyor.

194 baytlık uygulama yanıtı, gönderen aygıtın dur ve bekle davranışı nedeniyle ilgilidir. Bu model, sorunuzu tetikleyen şeydir. Eğer bu sadece sunucunun tepkisi olmayan tek yönlü bir toplu transfer olsaydı, çok farklı bir model ortaya çıkardı.

Ayrıca, MTU'nuzu varsayılan yol olan bir ağda 9000 olarak ayarlamak kötü. Bu sorunlara yol açacak ve hiçbir şey başaramayacak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.