4.3 Исследование таймера "оставайся в живых"
Выполненные действия, в соответствии с поставленным алгоритмом (п. 2.3), и результаты исследования, включая подробные комментарии, приведе-ны в листинге 5.
Листинг 5 – Исследование таймера "оставайся в живых"
//запускаем сервер. Параметр –К включает опцию "оставайся в живых"
anton@ubuntu:~$ sock -K -s -v 1111
//Клиент подключился
connection on 192.168.1.2.1111 from 192.168.1.3.57341
TCP_MAXSEG = 1448
now 02:56:00
hello client
lets start
//Больше сообщений не отсылаем
//в 08:02:16 отключили сетевой кабель от сервера
//спустя около 3 часов вернулись к машине и увидели
//ошибку которая показывает, что клиент не подтвердил запрос "оставайся в //живых"
read error: Connection timed out
//Включаем клиент
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -v 192.168.1.2 1111
//подключились к серверу
connected on 192.168.1.3.57341 to 192.168.1.2.1111
TCP_MAXSEG = 1448
//обмениваемся сообщениями
now 02:56:00
hello client
lets start
//т.к. опция –К не была включена, то клиент не будет проверять состояние //сервера
//Включаем tcpdump //Обмен сообщениями
02:56:31.883954 IP (tos 0x0, ttl 64, id 41779, offset 0, flags [DF], proto TCP (6), length 65)
anton-HP-Pavilion-dv6-Notebook-PC.local.57341 > ubuntu.local.1111: Flags [P.], cksum 0x778d (correct), seq 3042185411:3042185424, ack 162283466, win 913, options [nop,nop,TS val 5947975 ecr 2883874], length 13
02:56:31.884581 IP (tos 0x0, ttl 64, id 16104, offset 0, flags [DF], proto TCP (6), length 52)
ubuntu.local.1111 > anton-HP-Pavilion-dv6-Notebook-PC.local.57341: Flags [.], cksum 0x2cd9 (correct), seq 1, ack 13, win 91, options [nop,nop,TS val 2887542 ecr 5947975], length 0
02:58:45.958056 IP (tos 0x0, ttl 64, id 41781, offset 0, flags [DF], proto TCP (6), length 63)
anton-HP-Pavilion-dv6-Notebook-PC.local.57341 > ubuntu.local.1111: Flags [P.], cksum 0xacfd (correct), seq 13:24, ack 14, win 913, options [nop,nop,TS val 5981493 ecr 2889451], length 11
//обратить внимание на время отправки последнего сообщения
02:58:45.958931 IP (tos 0x0, ttl 64, id 16106, offset 0, flags [DF], proto TCP (6), length 52)
ubuntu.local.1111 > anton-HP-Pavilion-dv6-Notebook-PC.local.57341: Flags [.], cksum 0x26e2 (correct), seq 14, ack 24, win 91, options [nop,nop,TS val 2921062 ecr 5981493], length 0
//через 2 часа запрос "оставайся в живых"
04:58:50.824099 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has anton-HP-Pavilion-dv6-Notebook-PC.local tell ubuntu.local, length 28
04:58:50.824127 ARP, Ethernet (len 6), IPv4 (len 4), Reply anton-HP-Pavilion-dv6-Notebook-PC.local is-at cc:52:af:60:f8:65 (oui Unknown), length 28
//прошло ещё 2 часа. запрос "оставайся в живых"
06:58:50.688502 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has anton-HP-Pavilion-dv6-Notebook-PC.local tell ubuntu.local, length 28
06:58:50.688525 ARP, Ethernet (len 6), IPv4 (len 4), Reply anton-HP-Pavilion-dv6-Notebook-PC.local is-at cc:52:af:60:f8:65 (oui Unknown), length 28
//Больше запросов "оставайся в живых" не наблюдалось, т.к. tcpdump был //запущен на стороне клиента
Заключение: Результат эксперимента удовлетворяет ожидаемому результату.
4.4 Исследование таймера 2MSL
Выполненные действия, в соответствии с поставленным алгоритмом (п. 2.4), и результаты исследования, включая подробные комментарии, приведе-ны в листинге 6.
Листинг 6 – исследование таймера 2MSL
//Запускаем сервер
anton@ubuntu:~$ sock -v -s 1111
//клиент подключился
connection on 192.168.1.2.1111 from 192.168.1.3.57311
TCP_MAXSEG = 1448
//Отключаем сервер командой Ctrl+C
^C time 00:00:00:00 //делаем попытки запустить сервер на том же порту, на котором он работал до //отлючения
anton@ubuntu:~$ sock -v -s 1111 time 00:00:04:55
can't bind local address: Address already in use
anton@ubuntu:~$ sock -v -s 1111 time 00:00:10:32
can't bind local address: Address already in use
anton@ubuntu:~$ sock -v -s 1111 time 00:00:14:41
can't bind local address: Address already in use
anton@ubuntu:~$ sock -v -s 1111 time 00:00:19:85
can't bind local address: Address already in use
anton@ubuntu:~$ sock -v -s 1111 time 00:00:26:14
can't bind local address: Address already in use
anton@ubuntu:~$ sock -v -s 1111 time 00:00:31:98
can't bind local address: Address already in use
anton@ubuntu:~$ sock -v -s 1111 time 00:00:38:02
can't bind local address: Address already in use
anton@ubuntu:~$ sock -v -s 1111 time 00:00:44:75
can't bind local address: Address already in use
anton@ubuntu:~$ sock -v -s 1111 time 00:00:47:45
can't bind local address: Address already in use
anton@ubuntu:~$ sock -v -s 1111 time 00:00:52:51
can't bind local address: Address already in use
//сервер запустился
anton@ubuntu:~$ sock -v -s 1111 time 00:01:01:31
connection on 192.168.1.2.1111 from 192.168.1.3.57313
TCP_MAXSEG = 1448
//запускаем клиент
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -v 192.168.1.2 1111
//клиент подключился к серверу
connected on 192.168.1.3.57311 to 192.168.1.2.1111
TCP_MAXSEG = 1448
//соединение прервано из-за выключения сервера
connection closed by peer
//запускаем сервер заново
anton@ubuntu:~$ sock -v -s 1111
//клиент подключился
connection on 192.168.1.2.1111 from 192.168.1.3.57311
TCP_MAXSEG = 1448
//клиент отключился
connection closed by peer
//Запускаем клиент
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111
//клиент подключился к серверу. Порт клиента 57313
connected on 192.168.1.3.57313 to 192.168.1.2.1111
TCP_MAXSEG = 1448
//отключаем клиент
^C time 00:00:00:00
//запускаем клиент заново на 57313 порту
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:08:05
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:13:21
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:17:11
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:20:73
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:24:99
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:28:22
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:32:31
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:37:16
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:41:78
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:45:57
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:51:03
bind() error: Address already in use
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:00:56:63
bind() error: Address already in use
//Порт освободился, однако сервер выключен, подключение невозможно
anton@anton-HP-Pavilion-dv6-Notebook-PC ~/TCPIP_Chat $ sock -b57313 -v 192.168.1.2 1111 time 00:01:00:44
connect() error: Connection refused
Заключение: отрезок времени между отключением и запуском заново у клиента и сервера приблизительно одинаковое, расхождение из-за человеческого фактора. MSL равно половине интервала между выключением и запуском сервера или клиента, в эксперименте . Результат эксперимента удовлетворяет ожидаемому результату.