Linux 的端口和套接字

端口

Linux 的端口是一个逻辑概念,是传输层协议的内容,其由 TCP/IP 协议定义,是一个 0–65535 之间的一个2字节16位的整数。

端口号(port)用来标识一个进程, 告诉操作系统当前的数据要交给哪一个进程来处理,IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;一个进程可以绑定多个端口号,但是一个端口号不能被多个进程绑定,一个端口号只能被一个进程占用。

传输层协议(TCP和UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号,就是在描述 “数据是谁发的, 要发给谁”。

端口号范围划分

  • 0 - 1023:“固定”端口,指一些常用的软件或者 TCP/IP 协议中确定和公布的,通常来说不会被其他程序使用。
  • 1024 - 65535:操作系统动态分配的端口号, 客户端程序的端口号就是由操作系统从这个范围分配。

Linux 中的常见“固定”端口和对应的协议

协议 端口号
FTP 21
TELNET 23
TFTP 69
SNMP 161
SSH 22
HTTP 80
SMTP 25
DNS 53
HTTPS 443

可用如下命令查看“固定”端口

cat /etc/services

netstat
netstat 是一个用来查看网络状态的重要工具.
语法:netstat [选项]
功能:查看网络状态
常用选项

  • n 拒绝显示别名,能显示数字的全部转化成数字
  • l 仅列出有在 Listen (监听) 的服务状态
  • p 显示建立相关链接的程序名
  • t (tcp)仅显示tcp相关选项
  • u (udp)仅显示udp相关选项
  • a (all)显示所有选项,默认不显示LISTEN相关选项

pidof
查看服务器的进程 id 。
语法:pidof [进程名]
功能:通过进程名, 查看进程id

套接字

套接字(Sockets),即网络进程的进程 ID ,和普通的进程 ID 不同,网络进程的ID 是由运行这个进程的计算机的 IP 地址以及这个进程使用的端口(Port)组成的,在同一台计算机上,一个端口只能分配给一个进程,这样就可以确定网络中计算机上的一个进程。

套接字的组成

在这里插入图片描述
可以使用 netstat-all 命令来查看当前系统中网络应用进程的套接字和端口。

Linux 的套接字包括了BSD套接字和INET套接字两部分。

BSD套接字接口是Linux套接字的基础,套接字可以看成一种特殊的管道, BSD套接字通常包括以下几种类型:

  • Steam(数据流):该套接字提供了两个方向的序列数据流,这些数据流保证在传输过程中数据不丢失、不破坏或不重复,数据流套接字由 Internet(INET)地址族的 TCP 协议所支持。
  • Datagram(数据报):该套接字也提供两个方向上的数据传送,但不像数据流套接字,它们不提供消息到达的保证。即使到达也不保证这些数据报按照一定的顺序到达(或丢失、重复)。这种类型的套接字由 Internet 地址族的 UDP 协议所支持。
  • Raw(原始套接字):该套接字允许进程直接访问底层协议。例如,可以为以太网设备打开一个 Raw Socket,以使用原始 IP 数据进行传输。
  • Reliable Delivered Message(可靠传递消息):该套接字非常类似于数据报套接字,但是可保证数据的可靠传输。
  • Sequenced Packets(顺序数据报):这个套接字类似于数据流套接字,但数据包的大小固定。
  • Packet(包):这不是标准的 BSD 套接字类型,它是一个 Linux 特定的扩展,允许进程在设备层直接访问 Packet。

在 Linux 网络编程中最常使用的是支持 TCP 协议的数据流套接字、支持 UDP 协议的数据报套接字和可以直接对底层协议 IP 进行访问的原始格式套接字。

发布了70 篇原创文章 · 获赞 131 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43239560/article/details/102938976