Компьютер может иметь один или несколько IP-адресов.
Некоторым IP-протоколам, например ICMP, для связи нужны только IP-адреса. Другие, такие как UDP и TCP, требуют, чтобы пакеты адресовались как порту, так и IP-адресу. Обычно у вас есть программа, реализующая прослушивание службы на хорошо известном порте , чтобы другие системы знали, как с ней связаться. Сервер ssh
, например, будет прослушивать порт 22 / tcp:
$ netstat -a -t
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:ssh *:* LISTEN
$ netstat -a -t -n
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
Программа netstat
будет давать символьные имена номерам портов, просматривая / etc / services
, а такая программа, как sshd
, будет вызывать getservbyname ("ssh", "tcp") для преобразования имени в номер порта.
Если вы слушаете IP-адрес 0.0.0.0
, это означает, что вы слушаете все IP-адреса системы, и поэтому netstat выводит *
.
Сервер ssh
не имеет для прослушивания порта 22. Вы можете изменить его файл конфигурации, например, чтобы прослушивать порт 8022. Пока удаленный пользователь знает номер порта и любые промежуточные межсетевые экраны разрешают трафик на порт 8022, он будет работать.
Для сотен служб по всему миру хорошо известные номера портов хранятся в Реестре имен портов и транспортных протоколов . Это надмножество / etc / services
вашей локальной системы.
Сокет - это конечная точка связи. Прежде чем его можно будет использовать, он должен быть привязан к IP-адресу, номеру порта и протоколу.Если он использует TCP, он должен быть подключен к другому сокету, прежде чем можно будет обменяться пакетами. Сервер вызывает сокет
, чтобы создать сокет, связывает
, чтобы связать его, и слушает
, чтобы прослушивать соединения. Клиент использует сокет
и привязку
, затем соединение
для подключения к серверу. (Вызов bind
не является обязательным для клиента; когда вызывается connect
, система выделяет неиспользуемый порт и выбирает соответствующий IP-адрес для привязки к сокету.)
сокеты с TCP-портом 53 и UDP-портом 53 являются разными сокетами
Если услуга может быть предложена как для TCP, так и для UDP, обычно номера порта в обоих протоколах совпадают. В приведенном выше случае у вас, вероятно, будет один DNS-сервер, который создает два сокета, один прослушивает 0.0.0.0:53/tcp
, а другой - 0.0.0.0:53/udp
.
Некоторые старые службы были разработаны для работы только на одном протоколе, и в этих случаях вы можете увидеть две службы, использующие один и тот же номер порта (но, конечно, на разных протоколах). Например, 512 / tcp - для rexec, а 512 / udp - для biff. В таких системах совершенно разные программы прослушивают порты. rexecd
слушает 512 / tcp, а comsat
слушает 512 / udp.
Хотя вы заметили, что файлы разделены символами табуляции, на самом деле вы этим не воспользовались. Также общий ключ A
, B
и т. д. находится в третьем поле в file2.txt
. Так:
$ awk 'BEGIN{OFS=FS="\t"} NR==FNR{a[$1]=$2;next}{$4=a[$3];}1' file1.txt file2.txt
D01 Ti600 A Golden fog
D02 Ti500 B Vibrant rainbow and sunny
D16 Ti700 C Jumping, bold, and bright
D20 Ti800 B Vibrant rainbow and sunny
или (чуть короче)
$ awk -F'\t' 'NR==FNR{a[$1]=$2;next}{print $0"\t"a[$3]}' file1.txt file2.txt
D01 Ti600 A Golden fog
D02 Ti500 B Vibrant rainbow and sunny
D16 Ti700 C Jumping, bold, and bright
D20 Ti800 B Vibrant rainbow and sunny