Unix. Конспекты лекций.
28.03.2012
Теги:протоколы транспортного уровня, адрес сокета, привилегированные порты, глобально и локально маршрутизируемые IP-адреса, broadcast-адрес, мультикастовые адреса, Telnet, telnet-клиент, telnet-сервер, порт 25, протокол http, порт 80, GET, POST, сетевой порядок байтов, big-endian, little-endian, realpath.
IP-сокеты.
Два основных протокола, используемых в интернете, TCP и UDP — протоколы транспортного уровня (о чём идёт речь, ищи в предыдущей лекции). UDP протокол передает сообщения (пакеты) между двумя компьютерами независимо друг от друга. TCP протокол ориентирован на соединения, то есть сообщения передаются не отдельными сообщениями, а как единый поток данных. В отличие от UDP, TCP никогда не теряет пакеты, а если пакет потерялся, он будет передан заново. Пакеты всегда приходят в том порядке, в котором они были посланы и каждый пакет приходит ровно один раз. То есть соединение в протоколе TCP — непрерывный поток байтов. У соединения есть фаза установления соединения, фаза передачи данных и фаза завершения соединений. Посмотреть, в каком состоянии находится соединение можно с помощью команды netstat
netstat -a ← показывает также соединения в состоянии listen
Пример работы:
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.12204 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.5936 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.61434 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.50991 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.34580 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.38364 ESTABLISHED
tcp4 0 52 172.21.240.250.ssh 144.206.250.37.55637 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.26666 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.55044 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.60172 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.9216 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.32582 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.57154 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.62741 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.250.37.3594 ESTABLISHED
tcp4 0 0 172.21.240.250.ssh 144.206.178.45.29880 ESTABLISHED
tcp4 0 0 172.21.240.250.http *.* LISTEN
tcp4 0 0 localhost.smtp *.* LISTEN
netstat –n ← покажет имена.
При передачи данных по UDP сообщения могут теряться, приходить в другом порядке или дублироваться, потому что если какой-то узел обнаружил ошибку контрольной суммы, он передает его второй раз. Однако за счет того,что дополнительная информация в пакете отсутствует, UDP работает быстрее TCP и требует меньших ресурсов.
Для того, чтобы произошло соединение между компьютерами, и можно было послать сообщение, отправитель может иметь возможность найти получателя. Для этого используется адрес сокета. И в TCP, и в UDP в качестве адреса сокета используется два числа: первое — IP-адрес компьютера, второе — номер порта. IP-адрес позволяет найти компьютер, которому адресовано сообщение, порт позволяет найти среди всех программ, выполняемых на компьютере ту, которой сообщение адресовано.
Порты — 16-ти битное целое число. В некотором смысле порт привязывается к программе с помощью bind(). Пара IP-адрес + порт и есть адрес сокета.
Какие бывают порты:
Привилегированные порты (от 0 до 1023). Использовать их может только
суперпользователь (то есть только он может привязывать их к программе). Когда мы
отправляем сообщение на такой порт, мы можем быть уверены, что сообщение придет
именно этой программе, а не программе, запущенной левым пользователем. Каждому
протоколу соответствует свой номер порта: html – 80, ssh – 22, ftp – 21, telnet – 23,
sntp– 25, POP3 – 110.
Какие бывают ip-адреса:
Ip-адреса бывают двух видов: глобально маршрутизируемые и локально маршрутизируемые.
Глобально маршрутизируемые адрес (или «белый») — адрес, маршрут для
которого известен любому компьютеру, который подключен к сети интернет. Глобально
маршрутизируемые адреса уникальны.
Локально маршрутизируемые адреса (или «серые)— это такие адреса, которые
используются внутри какой-то организации. В разных организациях может так
случиться,что компьютеры имеют одинаковый локально маршрутизируемый адрес.
Для обоих типов адресов выделены специальные подсети, которые описаны в RFC 3330 (или более раннем RFC 1918). Для каждого адреса в этих RFC указано его предназначение, но нас интересует таблица в RFC1918, в которой описывается, что для локально маршрутизируемых адресов выделены три подсетки: сетки размером 2^24, 2^20 и 2^16. Они приведены ниже. Здесь и далее запись XXX.XXX.XXX.XXX/YYY означает IP-адрес, а число после слеша количество единиц в маске. Таким образом маску легко и коротко можно записать одним числом.
10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
Какие ещё есть подсетки? Каждый сетевой интерфейс имеет IP-адрес и маску. Если наложить маску на IP-адрес, то мы получим адрес сети, таким образом любой IP-адрес сетевого интерфейса состоит из двух частей: адреса сети и адреса компьютера внутри сети.
Где проходит граница, определяется сетевой маской. У всех компьютеров, у которых одинаковый адрес сети, есть broadcast-адрес, у которого на месте адреса компьютера стоят единички, что позволяет принимать сообщение по этому адресу всем компьютерам из подсети. IP-адрес, у которого везде нули, где у маски нули, это фактически адрес сети. Компьютерам этот адрес не присваивается. Таким образом первый и последний адрес не используется.
Ещё один выделенный адрес 255.255.255.255 используется для рассылки сообщений компьютерам широковещательных сообщений в одном физическом сегменте.
Важная подсеть 127.0.0.0/8 – это адрес loopback-интерфейса.
Подсеть 169.254.0.0/16 используется для назначения IP-адреса компьютеру, если он не смог получить его другим способом.
224.0.0.0/4 и 240.0.0.0/4 – мультикастовые адреса. Когда используется адрес из этой подсетки это значит,что когда передаются сообщения, то они адресуются сразу нескольким компьютерам. Обычно они используются для передачи мультимедия данных (IP-телевидения, радио и так далее).