JunOS, IOS, Unix, Linux, Windows, routing, switching, security, QoS, network design, telecom.. Статьи, заметки. Решил собрать блог, чтоб разместить полезные статьи в одном месте.
Показаны сообщения с ярлыком ip. Показать все сообщения
Показаны сообщения с ярлыком ip. Показать все сообщения
четверг, 3 марта 2016 г.
вторник, 18 ноября 2014 г.
Опять про MTU
Нашел на хабре несколько хороших статей. Картинка из второй ссылки.

Еще несколько слов о Path MTU Discovery Black Hole
Maximum Transmission Unit (MTU). Мифы и рифы
Всё, что вы хотели знать о Ethernet фреймах, но боялись спросить, и не зря

Еще несколько слов о Path MTU Discovery Black Hole
Maximum Transmission Unit (MTU). Мифы и рифы
Всё, что вы хотели знать о Ethernet фреймах, но боялись спросить, и не зря
четверг, 21 июня 2012 г.
Предотвращение IP-фрагментации. Что такое TCP MSS и как оно работает
Оригинал тут http://www.cyberguru.ru/networks/protocols/ip-fragmentation-page3.html
Максимальный Размер TCP Сегмента (MSS) определяет максимальное количество данных, которые хост желает принимать в единственной TCP/IP датаграмме. Эта TCP/IP датаграмма может быть фрагментирована в уровне IP. Значение MSS посылают как опциию TCP заголовка только в сегменте TCP SYN. Каждая сторона на TCP соединении сообщает свое значение MSS другой стороне. Хост отправитель обязан ограничивать размер данных в единственном TCP сегменте в значение, меньшем или равном MSS, о котором сообщает хост получатель.Первоначально, значение MSS означало, сколько памяти нужно выделить (больше или равной 65496 КБ) на станции получателя, чтобы в состоянии хранить TCP данные, содержавшиеся в пределах единственной IP датаграммы. MSS был максимальным сегментом (кусочком) данных, которые желал принимать TCP получатель. Этот TCP сегмент мог быть огромным, примерно до 64 КБ (максимальный размер IP датаграммы), и его необходимо было фрагментировать на уровне IP, чтобы передать по сети к хосту получателю. Принимающий хост повторно должен был собрать IP датаграмму прежде, чем передать полный TCP сегмент на уровень TCP.
Рассмотрим ниже несколько показательных сценариев, от том как установливаются и используются значения MSS, чтобы ограничить размеры TCP сегмента, и соотвественно, размеры IP датаграммы.
Сценарий 1 иллюстрирует способ, которым реализовывлся MSS ранее. Хост A имеет буфер 16 КБ а Хост B - буфер 8 КБ. Они посылают и получают свои МSS значения и корректируют их чтобы послать данные друг другу. Заметьте, что Хост A и Хост B должны фрагментировать IP датаграммы, которые по размеру больше чем MTU интерфейса, но все еще меньше чем посылаемый MSS, потому что стек TCP может передать 16 КБ или 8 КБ данных в IP стек. В случае Хоста B, пакеты могут быть фрагментированы дважды, один раз, чтобы дойти до Token Ring LAN и еще раз, чтобы добраться до сети Ethernet.

- Хост А посылает свое MSS значениеХ в 16К Хосту B
- Хост B принимает значение MSS 16K от Хоста A
- Хост B устанавливает MSS посылки в значение 16K
- Хост B посылает свое значение MSS в 8K хосту A
- Хост A принимает значение MSS 8K от Хоста B
- Хост A устанавливает MSS посылки в значение 8K
Способ которым теперь работает MSS это то, что каждый хост сначала сравнивает свой MTU исходящего интерфейса с его собственным буфером и выберет самое низкое значение в качестве MSS, для посылки. Затем хосты сравнят полученный размер MSS, с их собственным MTU интерфейса и снова выберут меньшее из двух значений.
Сценарий 2 иллюстрирует этот дополнительный шаг, сделанный отправителем, чтобы избежать фрагментации на локальных и удаленных каналах. Посмотрите, как принимается во внимание MTU исходящего интерфейса каждым хостом (прежде, чем хосты пошлют друг другу свои значения MSS), и как это помогает избежать фрагментации.

- Хост A сравнивает свой MSS буфер (16 КБ) и свой MTU (1500 - 40 = 1460) и использует наименьшее значение как MSS (1460), чтобы послать его Хосту B.
- Хост B получает MSS (1460) который послал хост A, и сравнивает его со значением MTU своего исходящего интерфейса - 40 (4422).
- Хост B устанавливает наименьшее значение (1460) как MSS для того, чтобы послать IP датаграммы Хосту A.
- Хост B сравнивает свой MSS буфер (8 КБ) и свой MTU (4462-40 = 4422) и использует 4422 как MSS, чтобы послать его Хосту A.
- Хост A получает MSS от хоста B (4422), и сравнивает его со значением MTU своего исходящего интерфейса -40 (1460).
- Хост А устанавливает наименьшее значение (1460) как MSS для того, чтобы посылать IP датаграммы Хосту B.
В Сценарии 2, фрагментация не происходит, потому что хостами были приняты во внимание MTU обоих интерфейсов. Пакеты могут все еще фрагментироваться в сети между Router A и Router B, если они встретят линк с более низким MTU.
Проблемы IP-фрагментации
Оригинал http://www.cyberguru.ru/networks/protocols/ip-fragmentation-page2.html
Существуют несколько проблем, когда IP-фрагментация нежелательна. Чтобы фрагментировать IP датаграмму требуются больше ресурсов CPU и памяти. Это справедливо как для отправителя так и для маршрутизатора между отправителем и получателем. Создание фрагментов просто влечет за собой создание заголовков для IP-фрагментов и копирование оригинальной датаграммы во фрагменты. Это может быть сделано достаточно эффективно, потому что вся информация для создания фрагментов уже доступна.Фрагментация накладывает больше расходов для получателя, когда он повторно собирает фрагменты, потому что получатель должен выделять память для прибывающих фрагментов и соединять их обратно в одну датаграмму после того, как получены все фрагменты. Реассемблирование на хосте это не проблема, потому что хост имеет время и ресурсы памяти, чтобы посвятить их этой задаче.
понедельник, 9 августа 2010 г.
Perl view my IP
Есть сервер, подключенный к модему с динамическим public ip. Решил обойтись без dynamic dns. На сервере пишу скрипт на Perl, который выходит на сайт whatismyipaddress.com, узнает там свой айпишник, записывает его в файл ip.htm и выкладывает на ftp.
#!/usr/bin/perl
# Script by k4
open DB, "ip.htm";
$pth="/home/user";
chdir $pth;
$lastip=;
chomp $lastip;
#print $lastip;
my $url = 'http://whatismyipaddress.com/';
use LWP::Simple;
my $content = get $url;
die "Couldn't get $url" unless defined $content;
if($content =~ m/(IP\sInformation:\s\)(\d+\.\d+\.\d+\.\d+)(\<\!\-\-\s)/) {
if ($lastip eq $2) { } else { $a=1; print `echo $2 > ip.htm`; }
} else {
print "IP is unknown\n";
}
if ($a) {
use Net::FTP;
$ftp = Net::FTP->new('ftp.host.net', Debug => 0)
or die "Cannot connect to sgsn1: $@";
$ftp->login('login', 'password')
or die "Cannot login", $ftp->message;
#$ftp->cwd("/")
#or die "Cannot change working directory ", $ftp->message;
$ftp->put("ip.htm")
or die "send failed ", $ftp->message;
$ftp->quit;
}
#!/usr/bin/perl
# Script by k4
open DB, "ip.htm";
$pth="/home/user";
chdir $pth;
$lastip=
chomp $lastip;
#print $lastip;
my $url = 'http://whatismyipaddress.com/';
use LWP::Simple;
my $content = get $url;
die "Couldn't get $url" unless defined $content;
if($content =~ m/(IP\sInformation:\s\)(\d+\.\d+\.\d+\.\d+)(\<\!\-\-\s)/) {
if ($lastip eq $2) { } else { $a=1; print `echo $2 > ip.htm`; }
} else {
print "IP is unknown\n";
}
if ($a) {
use Net::FTP;
$ftp = Net::FTP->new('ftp.host.net', Debug => 0)
or die "Cannot connect to sgsn1: $@";
$ftp->login('login', 'password')
or die "Cannot login", $ftp->message;
#$ftp->cwd("/")
#or die "Cannot change working directory ", $ftp->message;
$ftp->put("ip.htm")
or die "send failed ", $ftp->message;
$ftp->quit;
}
Подписаться на:
Сообщения (Atom)