TCP 如何获取端口信息

news2025/1/8 14:01:16

注:本文为 “TCP 如何获取端口信息” 相关讨论摘录。

机翻,未校。


How TCP Gets Port Information

TCP 如何获取端口信息

asked Nov 10, 2024 at 19:57

user15503745

API Call for Connection

API 调用以建立连接

Before the app can send data down to the OS’s TCP implementation, it first has to ask TCP to make a connection. The API call to do that has parameters for specifying the destination IP address and TCP port, so that’s where TCP gets that information.
在应用程序可以将数据发送到操作系统的 TCP 实现之前,它首先必须请求 TCP 建立一个连接。执行此操作的 API 调用具有指定目的地 IP 地址和 TCP 端口的参数,因此 TCP 就是从这里获取这些信息的.

When an application opens a TCP connection, it passes the destination IP address and TCP port to the host’s TCP/IP stack(along with the source IP and port to use).
当应用程序打开 TCP 连接时,它将目标 IP 地址和 TCP 端口(以及要使用的源 IP 和端口)传递给主机的 TCP/IP 堆栈.

In practice, this is usually implemented in the “BSD sockets” style, where the browser creates a socket, calls connect(<address, port>) on the socket(requesting TCP to perform the handshake), and then each send() references the already established socket handle.
在实践中,这通常以 “BSD 套接字” 风格实现,其中浏览器创建一个套接字,在套接字上调用 connect(< 地址,端口 >)(请求 TCP 执行握手),然后每个 send() 引用已经建立的套接字句柄.

Data Transmission

数据传输

After the API calls to set up the connection complete successfully, the TCP connection is open and the app can start sending data down to TCP to be transmitted across the TCP connection.
在成功完成设置连接的 API 调用后,TCP 连接将被打开,应用程序可以开始将数据发送到 TCP 以通过 TCP 连接传输.

BSD Sockets API

BSD 套接字 API

The APIs that various OSes use for TCP/IP networking are not actually part of the TCP/IP protocol specification itself. Every OS is allowed to come up with its own way to let apps interact with the TCP implementation. An early Unix API for this, known as “BSD Sockets” or “Berkeley Sockets” or just “Sockets”, has become pretty universal. Just about every OS out there has a way to let you use the familiar BSD Sockets APIs to do TCP/IP networking.
各种操作系统用于 TCP/IP 网络的 API 实际上并不是 TCP/IP 协议规范本身的一部分。每个操作系统都可以自行决定如何让应用程序与 TCP 实现交互。一个早期的 Unix API,被称为 “BSD 套接字” 或 “Berkeley 套接字” 或简称 “套接字”,已经变得相当普遍。几乎所有的操作系统都有办法让你使用熟悉的 BSD 套接字 API 进行 TCP/IP 网络操作.

Separate Fields for Address and Port

地址和端口的独立字段

In other words, the address and port are specified as separate fields, so there is nothing that the Transport Layer(or any lower layer, for that matter) needs to extract.
换句话说,地址和端口被指定为独立的字段,因此传输层(或任何更低层)无需提取任何内容.

These fields become a single data blob once they leave their corresponding layer – for example, the TCP port number is passed from application to TCP as a separate field, but becomes part of ‘data’ once it is passed from TCP to the lower(internetwork) layer. Likewise, the IP address is passed as a separate field all the way down to IP, only becoming part of the binary data(IP header) once the whole thing is given to the data-link /local-network layer.
这些字段一旦离开它们对应的层就会变成单个数据块 —— 例如,TCP 端口号作为单独的字段从应用程序传递到 TCP,但一旦它从 TCP 传递到更低的(互联网)层,就成为 “数据” 的一部分。同样,IP 地址作为单独的字段一直传递到 IP 层,只有在将整个内容交给数据链路 / 本地网络层时,才成为二进制数据(IP 头)的一部分.

TCP Segment Structure

TCP 段结构

During transport, TCP uses a header of its own that carries that information. TCP header + data form a segment(or more generally, a transport layer PDU).
在传输过程中,TCP 使用自己的标头来携带该信息.TCP 标头 + 数据形成一个段(或更一般地说,是传输层 PDU).

The application data following the header does not carry any such information. Source and destination IP addresses are carried in the encapsulating IP packet’s header. The TCP segment(header + data) forms the packet’s data section and follows that header(behind the Options, if present).
标头后面的应用程序数据不携带任何此类信息。源和目标 IP 地址在封装的 IP 数据包的标头中携带.TCP 段(标头 + 数据)形成数据包的数据部分,并跟随该标头(如果存在选项,则在其后面).

Layer-to-Layer Interface and Function Calls

层间接口与函数调用

The interface between layers is not limited to that – it is defined in terms of various functions(or ‘primitives’ as OSI calls them) that the lower layer provides to the upper layer, and those can be specified to take any number of parameters, not necessarily just ‘binary data’.
层之间的接口不仅限于此 - 它是根据下层提供给上层的各种函数(或 OSI 称之为 “原语”)来定义的,并且可以指定这些函数接受任意数量的参数,不一定只是 “二进制数据”.

For example, ITU-T X.214 aka ISO 8072(which is the OSI “Transport Service” definition) specifies that the Transport layer should provide the function T-CONNECT(src_address, dst_address, [etc], user_data) in addition to T-DATA(user_data).
例如,ITU-T X.214(又名 ISO 8072,这是 OSI “传输服务” 定义)规定传输层除了提供 T-DATA(user_data) 之外,还应提供函数 T-CONNECT(src_address, dst_address, [等], user_data).

(Though OSI service definitions were not written for TCP/IP – e.g. the “Transport” layer actually describes the competing OSI TP0-TP4 protocols, but they’re overall similar to Internet’s TCP in function.)
(尽管 OSI 服务定义不是为 TCP/IP 编写的 - 例如,“传输” 层实际上描述了竞争的 OSI TP0-TP4 协议,但它们在功能上总体上与 Internet 的 TCP 相似.)
Similarly, RFC 9293(the TCP/IP specification), specifically section 3.9.1 “User/TCP interface”, defines an OPEN(local port, remote socket, active/passive, [etc]) function in addition to SEND(...).
同样,RFC 9293(TCP/IP 规范),特别是 3.9.1 节 “用户 / TCP 接口”,除了定义了 SEND(...) 之外,还定义了一个 OPEN(本地端口,远程套接字,主动 / 被动,[等]) 函数.

Application Layer Handling

应用层处理

The combination of hostname and port is passed only into the HTTP header Host, which is in the application layer of the ISO/OSI model.
主机名和端口的组合仅传递到 HTTP 标头 Host 中,它位于 ISO/OSI 模型的应用层.

TCP and OSI Model Relationship

TCP 与 OSI 模型关系

As you know, the Internet Protocol suite(colloquially known as “TCP/IP”) does not conform to the OSI model. The OSI model has a transport layer but TCP is not an OSI transport layer. Really the OSI model is arguably obsolete. It applied to largely obsolete protocols such as X.25, I would argue it isn’t relevant for any Internet protocols in significant use, past or present.
如你所知,Internet 协议套件(俗称 “TCP/IP”)不符合 OSI 模型.OSI 模型有一个传输层,但 TCP 不是 OSI 传输层。实际上,OSI 模型可以说是过时的。它适用于诸如 X.25 等基本过时的协议,我认为它与过去或现在大量使用的任何 Internet 协议都不相关.

Receiving End Processing

接收端处理

On the receiving end, the process is reversed: each layer removes its header, so when the Transport Layer receives the packet, it reads the TCP header to determine the destination port(9300 in your example), and then sends the data to the appropriate application or service listening on said port.
在接收端,过程是相反的:每一层都去除其标头,因此当传输层接收到数据包时,它读取 TCP 标头以确定目标端口(在示例中为 9300),然后将数据发送到在该端口上监听的相应应用程序或服务.


via:

  • networking - How does TCP get the port information?
    https://superuser.com/questions/1861335/how-does-tcp-get-the-port-information

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统思考—变革之舞

彼得圣吉在《变革之舞》中提到&#xff1a;变革的关键是持续学习。在这个变化万千的世界里&#xff0c;组织不能停留在过去的经验上&#xff0c;我们如何系统性的抛弃过去成功的经验&#xff0c;不断学习新技能&#xff0c;适应复杂的环境。每个人不仅要学会解决眼前的问题&…

OpenCV的人脸检测模型FaceDetectorYN

OpenCV的人脸检测模型FaceDetectorYN 1. 官网地址2. 如何使用2.1.到opencv_zoo下载模型文件和代码2.2. 下载文件展示2.3. 修改了demo支持读取视频文件&#xff0c;默认是图片和摄像头## 2.4 效果展示 1. 官网地址 https://docs.opencv.org/4.x/df/d20/classcv_1_1FaceDetector…

25/1/6 算法笔记<强化学习> 初玩V-REP

我们安装V-REP之后&#xff0c;使用的是下面Git克隆的项目。 git clone https://github.com/deep-reinforcement-learning_book/Chapter16-Robot-Learning-in-Simulation.git 项目中直接组装好了一个机械臂。 我们先来分析下它的对象树 DefaultCamera:摄像机&#xff0c;用于…

Linux驱动开发:深入理解I2C时序(二)

在Linux驱动开发中,I2C时序的理解和正确处理是保证I2C设备正常工作和通信的关键。I2C协议的时序特性决定了数据的有效传输和设备间的协作。因此,掌握I2C的时序细节,以及如何在Linux内核中进行时序处理,能够让开发者更好地处理设备通信问题。 本文将继续深入探讨I2C通信协议…

Java100道面试题

1.JVM内存结构 1. 方法区&#xff08;Method Area&#xff09; 方法区是JVM内存结构的一部分&#xff0c;用于存放类的相关信息&#xff0c;包括&#xff1a; 类的结构&#xff08;字段、方法、常量池等&#xff09;。字段和方法的描述&#xff0c;如名称、类型、访问修饰符…

《Python游戏编程入门》注-第9章8

2 游戏信息的显示 在游戏窗口的上部会显示游戏分数、游戏关卡、剩余砖块数以及剩余小球数等信息,如图12所示。 图12 游戏信息显示 使用如图13所示的代码实现以上功能。 图13 显示游戏信息的代码 其中,print_text()函数MyLibrary.

idea插件之 translation翻译插件

文章目录 1. translation翻译插件2. 效果图3. 延伸&#xff08;默认自动配置微软翻译&#xff09; 1. translation翻译插件 Settings 》Plugins 》Translation PS&#xff1a;安装后需要重启idea。 2. 效果图 右键选择插件&#xff0c;或者ctrlshifty 直接翻译代码。 3. 延伸…

Infineon PSoC 4 CapSense ModusToolbox IDE - 系统生态篇

本文档说明了 ModusToolbox 软体环境的 4 个层面&#xff0c;该环境为 CapSense 设备和生态系统提供支援。本文是 Infineon PSoC 4 CapSense ModusToolbox IDE-系统介绍的延伸篇 (Infineon PSoC 4 CapSense ModusToolbox IDE -系统介绍篇 - 大大通(简体站))。 什么是ModusToolb…

PyCharm+RobotFramework框架实现UDS自动化测试——(一)python-can 库的安装与环境配置

从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者&#xff0c;时光不负有心人。 文章目录 1. 概述2.安装 python-can 库—基于pycharm在对应的工程下3. 在任意盘中安装环境4. 导入 can 模块语法5. 配置 CAN 接口6.CANoe设备连接语法 1. 概述 本专栏主…

springCloud实战

一、Feign的实战 1、使用 1.1步骤 ①引入feign依赖 ②在启动类上加上EnableFeignClients注解&#xff0c;开启Feign客户端 ③编写FeignClient接口 1.2开启feign调用日志 只需在yml配置文件中开启配置即可 feign:client:default:loggerLevel: FULL #feign接口被调用时的…

DINO-X环境搭建推理测试

引子 开放世界检测&#xff0c;前文也写OV-DINO&#xff08;感兴趣的童鞋&#xff0c;请移步OV-DINO开放词检测环境安装与推理-CSDN博客&#xff09;。这不&#xff0c;DINO系列又更新了。OK&#xff0c;那就让我们开始吧。 一、模型介绍 IDEA 开发了一个通用物体提示来支持无…

List ---- 模拟实现LIST功能的发现

目录 listlist概念 list 中的迭代器list迭代器知识const迭代器写法list访问自定义类型 附录代码 list list概念 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素…

STM32-笔记37-吸烟室管控系统项目

一、项目需求 1. 使用 mq-2 获取环境烟雾值&#xff0c;并显示在 LCD1602 上&#xff1b; 2. 按键修改阈值&#xff0c;并显示在 LCD1602 上&#xff1b; 3. 烟雾值超过阈值时&#xff0c;蜂鸣器长响&#xff0c;风扇打开&#xff1b;烟雾值小于阈值时&#xff0c;蜂鸣器不响…

VUE3配置后端地址,实现前后端分离及开发、正式环境分离

新建.env.development及.env.production .env.development 指定开发环境地址.env.production 指定生产环境地址 格式如下 VITE_APP_BASE_APIhttp://localhost:8070只需要在对应文件写入对应的后端地址即可 修改env.d.ts /// <reference types"vite/client" /…

win32汇编环境,在窗口程序中画五边形与六边形

;运行效果 ;win32汇编环境,在窗口程序中画五边形与六边形 ;展示五边形与六边形的画法 ;将代码复制进radasm软件里,直接编译可运行.重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>>>>…

Java Web开发进阶——Spring Boot基础

Spring Boot是基于Spring框架的新一代开发框架&#xff0c;旨在通过自动化配置和简化的开发方式提升生产效率。它将复杂的配置抽象化&#xff0c;让开发者专注于业务逻辑实现&#xff0c;而无需关注繁琐的基础配置。 1. Spring Boot简介与优势 Spring Boot 是 Spring 家族中的…

【Linux】文件系统命令

目录 文件系统命令 Linux文件系统 文件操作相关命令 文件系统命令 磁盘文件系统&#xff1a;指本地主机中实际可以访问到的文件系统&#xff0c;包括硬盘、CD-ROM、DVD、USB存储器、磁盘阵列等。常见文件系统格式有&#xff1a;autofs、coda、Ext&#xff08;Extended File…

关于变电站及线路接线情况展示的一些想法

以前总项目的时候总习惯于给变电站画个轮廓和接线点&#xff0c;要不就是给变电站3D建模。费时、费力效果还不一定好!其实&#xff0c;像上图一样线路搭配高清影像效果是不是会更好&#xff1f;尤其变电站区域可以使用航飞0.2米左右的数据&#xff0c;基本上站内设备都能看清了…

【OceanBase】使用 Superset 连接 OceanBase 数据库并进行数据可视化分析

文章目录 前言一、前提条件二、操作步骤2.1 准备云主机实例2.2 安装docker-compose2.3 使用docker-compose安装Superset2.3.1 克隆 Superset 的 GitHub 存储库2.3.2 通过 Docker Compose 启动 Superset 2.4 开通 OB Cloud 云数据库2.5 获取连接串2.6 使用 Superset 连接 OceanB…

开源平台Kubernetes的优势是什么?

Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统&#xff0c;其服务、支持和工具的使用范围广泛。 Kubernetes 这个名字源于希腊语&#xff0c;意…