Пусть есть 2 хоста: client и server . С client хотим на server послать много немыслимых данных и нагрузить сеть.
Пусть client с ip = 192.168.50.100, а server с ip = 192.168.4.5.
Устанавливаем простейшее соединение клиент-сервер с помощью netcat. На сервере начнем слушать с портом соединения 10000 (можно поставить другой, незарерервированный под системные нужды):
Запустим nc на server'e (ip = 192.168.4.5):
nc -l -p 10000
С клиента (ip = 192.168.100.50) устанавливаем соединение с серверной машиной по 10000-му порту:
nc 192.168.4.5 10000
Соединение установлено.
Теперь апгрейд простейшего соединения:
1. Добавим бесконечный цикл с прослушкой на сервере, чтобы при отключении клиента, соединение не прерывалось
2. Все данные, пришедшие с клиента отправляем в /dev/null, чтобы не наблюдать хаос и ужас из рандомов (в случае с нулями нам повезет больше и мы ничего страшного не увидим):
while sleep 1; do nc -l -p 10000 > /dev/null; done
Про хаос и ужас. Увидим мы это:
���dw`���8��, ״r ��9�ŝ_Wv & ��<o��a�\�5�.l�� X.�v� _ s}{b�g�|ކ�n��� ��{ x\t12 qk��q��o�} G�)�qv�
�:� C4�D �� +� s��g}�w" <��e�I;7)=�|�5�
��s��R^��/
� }"� a� � �.�9yk�C҇V~x��(g�tE�Z� ��"5r�v�rQ�p�v�EYv��bU Q ��gl��nr*;�2�� 1��dtU#�%��y.T"� ���
���e~_G% g �ݪY T�l� �"��'| B�M�)P$6! 6��W ���"�֮^���V:
w0rG� �@�-���a!� y?<��c2 �M!�M5�Z#VD�o-#��z
Cd�Sb� u � �FA_ ��u�s�)�^�v��bO
�i �h? B}�K'
%dl�x���|u�C6`'u=`�UIL,P� d D�e� N�ym�� �^ ?� ] � �Ʌ��C&JUxG}p�xD0��% �q ��Kbgz� �u �u[_q��+E �
�N
�&� A�*p�Z�GB�D ���es� (j:�r���1���G�C�6�F�K��=5gRDU� �) ��E�f�n�̄8��(l�d6 ��(/�l �u�Q� �(K�9h�u�K� n [��]Z�=JʙcvS�io�OG �Ot�& Z��-W�� ���?d�B7�� yl��q � �/َ=�BD4��� �ۍg�?)z���sC� |�Qfʩ=*D8�H��� f �{$:Kq�H�je��G�Z�R��H�j� 1%Ss�&�2.
LE �gM�
8[��7n5�\L��z ]�Ng���=� � ��� �j�{x^�E�xF cl��?�f���* �a@&h �9�&�K�!�(�/�5 a =�j� 3�{}��L�=�\�/6 1�(@�dn 8@Nw��'#� ?8x) � X�zh���;0 �w�"[��}���E�)�>�'���[/�*'\� ERY) �M��v0f��m�ˡod��C��� 쿺t��� ���]���|�*@ �Z�Wx� QP��2��:S Eb�j i)F\4.>L@�}*|dγc;F|^E�� �a�Ex$ m]Z�W xJ�� �N^k_N�Ys 9RZ � fGF��A���_l�.e2��6P�\v���B�F�3� � ��u a�� G�D9���!�
V�H9'\�u *�9 �y2=� ��-*��� C h#5ޥ*�7 �d�,p z�pqSe�*Z3�K�3 `
�� 1�3�ib<}���s�zu YC s[>n "��^@ k
0�x
j��b֜ ��C0�j ��?�P�5g�Q>�+�Z�%'`#}�X-BO~
�0=���iz
�7�c [fK� �l�A�B
Y� ��NBs��6�;$G�hI�CYuhYF��� ��e>h�cOQ�ql�KD>�� �m��Y 2��5~ �+� A_ � �~� �V�]
� ̎�|
��j�N�/qJ�f�
W"��
ו| w(dZ�� 1 C
w&� g.I
�o��T%�w�t1اy���cDY<D�� fx�9(���C���SF��,���y �����
�
M�'b �Lei�(�/��_ �J
|�IЖsk�̊Zh � ��u�� 5ٓ h�5$���p���=E3 щj���!��J]�[�P
�=� �g��{.B" b:{8^KL/I~����~`��/su� .�n*~ M�,�W�Y�9v�� �@ 6�N1$F})
��� j�Ni���Av��*��Vf���R�_�P�� Ye�Dd�� �2
p���f=�G
3. Установим pv - утилита для мониторинга соединения. Показывает с какой скоростью, в каком направлении, сколько всего передано данных и сколько по времени продолжался коннект.
���dw`���8��, ״r ��9�ŝ_Wv & ��<o��a�\�5�.l�� X.�v� _ s}{b�g�|ކ�n��� ��{ x\t12 qk��q��o�} G�)�qv�
�:� C4�D �� +� s��g}�w" <��e�I;7)=�|�5�
��s��R^��/
� }"� a� � �.�9yk�C҇V~x��(g�tE�Z� ��"5r�v�rQ�p�v�EYv��bU Q ��gl��nr*;�2�� 1��dtU#�%��y.T"� ���
���e~_G% g �ݪY T�l� �"��'| B�M�)P$6! 6��W ���"�֮^���V:
w0rG� �@�-���a!� y?<��c2 �M!�M5�Z#VD�o-#��z
Cd�Sb� u � �FA_ ��u�s�)�^�v��bO
�i �h? B}�K'
%dl�x���|u�C6`'u=`�UIL,P� d D�e� N�ym�� �^ ?� ] � �Ʌ��C&JUxG}p�xD0��% �q ��Kbgz� �u �u[_q��+E �
�N
�&� A�*p�Z�GB�D ���es� (j:�r���1���G�C�6�F�K��=5gRDU� �) ��E�f�n�̄8��(l�d6 ��(/�l �u�Q� �(K�9h�u�K� n [��]Z�=JʙcvS�io�OG �Ot�& Z��-W�� ���?d�B7�� yl��q � �/َ=�BD4��� �ۍg�?)z���sC� |�Qfʩ=*D8�H��� f �{$:Kq�H�je��G�Z�R��H�j� 1%Ss�&�2.
LE �gM�
8[��7n5�\L��z ]�Ng���=� � ��� �j�{x^�E�xF cl��?�f���* �a@&h �9�&�K�!�(�/�5 a =�j� 3�{}��L�=�\�/6 1�(@�dn 8@Nw��'#� ?8x) � X�zh���;0 �w�"[��}���E�)�>�'���[/�*'\� ERY) �M��v0f��m�ˡod��C��� 쿺t��� ���]���|�*@ �Z�Wx� QP��2��:S Eb�j i)F\4.>L@�}*|dγc;F|^E�� �a�Ex$ m]Z�W xJ�� �N^k_N�Ys 9RZ � fGF��A���_l�.e2��6P�\v���B�F�3� � ��u a�� G�D9���!�
V�H9'\�u *�9 �y2=� ��-*��� C h#5ޥ*�7 �d�,p z�pqSe�*Z3�K�3 `
�� 1�3�ib<}���s�zu YC s[>n "��^@ k
0�x
j��b֜ ��C0�j ��?�P�5g�Q>�+�Z�%'`#}�X-BO~
�0=���iz
�7�c [fK� �l�A�B
Y� ��NBs��6�;$G�hI�CYuhYF��� ��e>h�cOQ�ql�KD>�� �m��Y 2��5~ �+� A_ � �~� �V�]
� ̎�|
��j�N�/qJ�f�
W"��
ו| w(dZ�� 1 C
w&� g.I
�o��T%�w�t1اy���cDY<D�� fx�9(���C���SF��,���y �����
�
M�'b �Lei�(�/��_ �J
|�IЖsk�̊Zh � ��u�� 5ٓ h�5$���p���=E3 щj���!��J]�[�P
�=� �g��{.B" b:{8^KL/I~����~`��/su� .�n*~ M�,�W�Y�9v�� �@ 6�N1$F})
��� j�Ni���Av��*��Vf���R�_�P�� Ye�Dd�� �2
p���f=�G
И это можно будет остановить убив соединение с сервером. И то, простой Ctrl+C не поможет.
3. Установим pv - утилита для мониторинга соединения. Показывает с какой скоростью, в каком направлении, сколько всего передано данных и сколько по времени продолжался коннект.
sudo apt-get install pv
4. Шлем с клиента на сервер /dev/null или /dev/urandom. Через pipe соединяем 2 команды и получаем:
pv </dev/zero | nc 192.168.4.5 10000
Наблюдаем за пакетами с сервера (ip=192.168.4.5):
watch cat /proc/net/dev
Внутри будет информация о интерфейсах, кол-ве переданных и принятых байт, пакетов, ошибок, потерянных файлов и т.д. Обновление будет происходить каждые 2 сек.
Если нагрузка идет на Ethernet(eth0), то можно просмотреть проспускную способность и изменить некоторые параметры.
Рассмотрим подробнее:
1. Смотрим настройки eth0-интерфейса.
sudo ethtool eth0
Откроются неведомые ранее режимы работы этого интерфейса. Так, например, он может работать в полудуплексном режиме, а не в full-mode. Скорость тоже важный параметр.
Пример моего интерфейса eth0:
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: Symmetric
Link partner advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000033 (51)
drv probe ifdown ifup
Link detected: yes
Пример моего интерфейса eth0:
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: Symmetric
Link partner advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000033 (51)
drv probe ifdown ifup
Link detected: yes
2. С помощью команды:
ethtool -s eth0 autoneg on advertise 0xf
Можно перевести eth0 в полнодуплексный режим и установить скорость 100Мб/с(если она поддерживается физически).
Подробнее о ключах:
-s - изменяет настройки интерфейса
autoneg on - Настраивает режим авто-согласования, если он поддерживается данным устройством. Обычно этот режим включен, но в случае возникновения проблем с некоторыми устройствами, вы можете его отключить.
advertise N - устанавливает скорсоть и дуплекс при включенном автосогласовании. Аргумент N - hex-число, которое может принимать следующие значения:
0x001 10 Half
0x002 10 Full
0x004 100 Half
0x008 100 Full
0x010 1000 Half(not supported by IEEE standards)
0x020 1000 Full
0x8000 2500 Full(not supported by IEEE standards)
0x1000 10000 Full
0x03F Auto
0x001 10 Half
0x002 10 Full
0x004 100 Half
0x008 100 Full
0x010 1000 Half(not supported by IEEE standards)
0x020 1000 Full
0x8000 2500 Full(not supported by IEEE standards)
0x1000 10000 Full
0x03F Auto
Подробнее о ethtool тут.
И о применении: полезно при тестировании сети, если ваша программа зависит от входного траффика.
И о применении: полезно при тестировании сети, если ваша программа зависит от входного траффика.
'хаос и ужас' понравился. И тут же появился вопрос. В какой кодировке текст выводится на консоль? Unicode она же вряд ли поддерживает?
ОтветитьУдалитьЭто не текст, это рандом. И не важно в какой кодировке) ну а вообще:
УдалитьVictoria:Projects vika$ echo 'Привет, Денис'
Привет, Денис
Так что поддерживается.
Очевидно, что выведет в той кодировке, которая задана в консоли.
УдалитьМожно увидеть в переменной $LANG:
$ echo $LANG
ru_RU.UTF-8
Если хочется вводить текстовые данные на клиенте и выводить на сервере в одной кодировке, то стоит либо задать им одинаковую кодировку, либо использовать что-то типа iconv. А по сети в любом случае передаётся просто набор бит.
ох уж эти виндусятники...
ОтветитьУдалить> И это можно будет остановить убив соединение с сервером. И то, простой Ctrl+C не поможет.
ОтветитьУдалитьCtrl+4 помогает?
Не пробовала. Но все равно: мусор в /dev/null лучше отправлять
Удалить