当前位置: 首页 > news >正文

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

总括

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

端口与套接字的关系

  • 端口号是套接字的一部分。当程序创建一个套接字时,它通过绑定(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.lryc.cn/news/520678.html

相关文章:

  • UE5中制作地形材质
  • 【Docker】docker compose 安装 Redis Stack
  • pytest 常用插件
  • 浅谈云计算05 | 云存储等级及其接口工作原理
  • linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包,文本处理sed,awk
  • CentOS 8 如何安装java与mysql
  • Go语言之路————go基本语法、数据类型、变量、常量、输出
  • 音视频入门基础:MPEG2-PS专题(7)——通过FFprobe显示PS流每个packet的信息
  • Docker安装和卸载(centos)
  • YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练
  • Winforms开发基础之非主线程操作UI控件的误区
  • Flutter中Get.snackbar和Get.dialog关闭冲突问题记录
  • springcloudalibaba集成fegin报错ClassNotFoundException解决方案
  • 【HTML+CSS+JS+VUE】web前端教程-31-css3新特性
  • 力扣264. 丑数 II
  • 计算机网络之---TCP连接管理
  • 《CPython Internals》阅读笔记:p118-p150
  • C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代码
  • 三只松鼠携手爱零食,社区零售新高峰拔地而起
  • Java聊天小程序
  • Kibana操作ES基础
  • MYSQL8创建新用户报错:You have an error in your SQL syntax;check...
  • 动漫周边商城系统|Java|SSM|VUE| 前后端分离
  • Vue 3 Diff 算法受 `v-for` 循环中的 `key` 属性影响
  • 江科大STM32入门——看门狗笔记整理
  • 【计算机网络】lab7 TCP协议
  • 计算机视觉:解锁未来智能世界的钥匙
  • Java的Stream流和Option类
  • 深入理解ASP.NET Core 管道的工作原理
  • 多模态论文笔记——CLIP