计算机网络之---端口与套接字

embedded/2025/1/11 14:41:18/

总括

  • 端口:是计算机上用于标识网络服务的数字标识符,用于区分不同的服务或应用程序。
  • 套接字:是操作系统提供的用于进程间网络通信的编程接口,允许程序通过它来进行数据的发送、接收和连接管理。
  • 关系:端口号用于标识服务,而套接字则是应用程序与网络之间的通信通道,端口号是套接字连接和监听的一部分。

端口与套接字的关系

  • 端口号是套接字的一部分。当程序创建一个套接字时,它通过绑定(bind)将其与一个特定的端口号关联。端口号在通信中用于标识特定的应用进程。
  • 在 服务器,套接字会绑定一个固定的端口号,并监听该端口号的传入连接请求。
  • 在 客户端,套接字通常会使用操作系统动态分配的临时端口进行通信。

端口

端口是一个数字标识符,用于在网络协议中标识特定的进程或服务。它用于区分同一台计算机上不同的应用程序或服务。端口号通常由操作系统分配给网络服务或进程,使得在同一台主机上运行多个服务时,能够通过端口号区分它们。

端口的作用:
  • 区分服务:同一台计算机上可以有多个服务,通过端口号来区分每个服务。
  • 网络通信:端口号配合 IP 地址使用,构成完整的网络通信地址(即:IP:Port),标识网络上的特定应用或服务。
端口的分类:
  • 0~1023:知名端口(Well-known Ports) 这些端口号被广泛用于常见的应用程序和服务。例如:

    • HTTP 服务:端口 80
    • HTTPS 服务:端口 443
    • FTP 服务:端口 21
    • DNS 服务:端口 53
    • Telnet 服务:端口 23
  • 1024~49151:注册端口(Registered Ports) 这些端口号被分配给某些特定的应用程序,但没有知名端口那么广泛。这些端口可以由应用程序或开发者使用。

  • 49152~65535:动态或私有端口(Dynamic or Private Ports) 这些端口号是操作系统为应用程序动态分配的,通常用于客户端发起的临时连接。

套接字

套接字是一个编程接口,用于实现进程间的网络通信。它是应用程序与传输层协议(如 TCP 或 UDP)之间的接口,通过套接字,应用程序可以发送和接收数据。套接字在操作系统中作为一个抽象层,封装了底层的网络通信机制。

套接字的功能:
  • 通信端点:套接字作为进程与网络之间的通信端点,提供了一种抽象,使得程序可以进行跨网络的通讯。
  • 绑定端口:在创建套接字之后,通常会通过 bind 函数将套接字与一个特定的端口号绑定。这样,操作系统就能够将接收到的该端口的数据传递到对应的应用程序。
  • 连接管理:套接字可用于创建服务器与客户端之间的连接,通过 connectlistenaccept 等函数来建立、监听和接受连接。
  • 数据发送和接收:使用套接字可以进行数据的发送(send)和接收(recv)操作。
套接字的组成:

一个套接字可以通过以下几个参数来定义:

  • 协议族(Protocol Family):常见的协议族包括:

    • IPv4(AF_INET):基于 IPv4 的通信。
    • IPv6(AF_INET6):基于 IPv6 的通信。
    • Unix 域套接字(AF_UNIX):用于同一台计算机上不同进程间的通信。
  • 套接字类型(Socket Type)

    • 流套接字(SOCK_STREAM):用于面向连接的通信,如 TCP 协议。
    • 数据报套接字(SOCK_DGRAM):用于无连接的通信,如 UDP 协议。
  • 协议(Protocol):指定使用的具体协议,一般情况下,操作系统会自动选择协议,具体协议如 TCP、UDP。

套接字的功能:
  • 通信端点:套接字作为进程与网络之间的通信端点,提供了一种抽象,使得程序可以进行跨网络的通讯。
  • 绑定端口:在创建套接字之后,通常会通过 bind 函数将套接字与一个特定的端口号绑定。这样,操作系统就能够将接收到的该端口的数据传递到对应的应用程序。
  • 连接管理:套接字可用于创建服务器与客户端之间的连接,通过 connectlistenaccept 等函数来建立、监听和接受连接。
  • 数据发送和接收:使用套接字可以进行数据的发送(send)和接收(recv)操作。
套接字的类型与端口的关系:

套接字与端口密切相关。每个套接字都可以绑定到一个端口,通常情况下,服务端使用一个固定的端口来监听客户端的请求,而客户端会动态分配一个临时端口与服务器进行通信。


http://www.ppmy.cn/embedded/153037.html

相关文章

基于 Nuxt3 + Obsidian 搭建个人博客

Nuxt是一个用Vue来编写的,可用来创建类型安全、高性能和生产级全栈 Web 应用程序和网站的全栈框架。后端是 Nitro,一个可以被单独使用的Web服务端框架。 作为一个全栈框架,不仅具备了比使用Vue开发SPA客户端更好的开发体验,还能享…

c++程序设计(第3版)系列教程

c程序设计(第3版)系列笔记 预备知识 在c当中,避免字符串被截断的输入为gets(S),但是由于c语言新标准的推行和部分删除,在使用gets(S)时只能通过宏定义#define gets(S) fgets(S,sizeof(S),stdin)处理之后使用。 在c当中,面对难以处…

java1-相对路径与绝对路径

注意注意~开始新部分啦! 开始正式分享java前,先为大家分享一下一个常用的概念---文件的相对路径与绝对路径. 开篇明义: 相对路径是指一个文件或目录相对于当前工作目录的路径。相对路径不包含根目录,而是从当前目录开始计算。 绝对路径是指一个文件或目录从根目录…

Webpack 入门指南

Webpack 入门指南 引言 Webpack 是一个模块打包工具,它分析项目结构,从一个或多个入口起点开始递归构建依赖图。然后将这些模块和它们的依赖打包成少量的bundle文件,甚至是一个单独的文件。这使得我们能够更有效地管理和优化我们的前端资源…

AWS简介

AWS 一,AWS是什么? AWS的全称是 Amazon Web Services 的缩写,是亚马逊公司提供的一套广泛且应用广泛的云端服务。 AWS提供了超过200项全功能的服务,来自数据中心数据中心遍布全球多个地理位置,这些服务包括计算能力&…

python编写分段Hermite插值多项式

x [0, 1, 2]; % x 坐标 y [1, 2, 0]; % y 坐标 dy [1, -1, 2]; % 导数值 X linspace(0, 2, 100); % 生成 100 个插值点n length(x); % 数据点的个数m length(X); % 插值点的个数H zeros(1, m); % 用于存储结果for k 1:mxi X(k); % 当前插值点% 计算每个分段的…

Jenkins git SSH获取code报错:git@github.com: Permission denied (publickey).

这个错误信息表明在尝试通过 SSH 连接到 GitHub 时,出现了权限被拒绝的问题,通常是由于 SSH 公钥未正确配置或未被 GitHub 识别。以下是解决此问题的步骤: 1. 确保 SSH 密钥已生成 首先,检查你是否已经生成了 SSH 密钥。如果没有…

移远BC28_opencpu方案_pin脚分配

先上图,BC28模块的pin脚如图所示: 下面看看GPIO的复用管脚 然后我自己整理了一份完整的pin功能列表