【嵌入式开发之网络编程】TCP端口和UDP端口

devtools/2024/10/18 2:57:49/

目录

网络端口的定义及作用

运输层的作用 

运输层的两个主要协议

用户数据报协议UDP (User Datagram Protocol)

传输控制协议TCP (Transmission Control Protocol) 

运输层的端口及分类 

按照端口号分类

按照协议类型分类

BSD端口 


网络端口的定义及作用

网络技术中,端口(port)包括逻辑端口(logic port)和物理端口(physical port)两种类型。
物理端口是用于连接物理设备之间的接口,如ADSL Modem、集线器、交换机、路由器上用于连接其他网络设备的接口。
逻辑端口是指逻辑意义上用于区分服务的端口,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。

本文所说的端口是指逻辑端口。

端口的主要作用是实现网络服务的多路复用。网络中的计算机是通过IP地址来代表其身份的,它只能表示某台特定的计算机,但是一台计算机上可以同时提供很多个服务,如数据库服务、FTP服务、Web服务等,我们就通过端口号来区别相同计算机所提供的这些不同的服务。当数据包从客户端发送到服务器时,包含目标端口号,服务器根据端口号将数据包路由到相应的服务程序进行处理,从而确保数据能够准确无误地送达目的地。

运输层的作用 

进行通信的实体是在主机中的进程,是这台主机的一个进程和另一台主机的进程在交换数据。因此,两台主机进行通信就是两台主机的应用进程相互通信。虽然IP协议进行分组分发给目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用进程。所以常说,端到端的通信就是应用进程之间的通信。 

运输层具有复用和分用的功能:

复用:是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据。主机A的AP1进程和AP2进程都可以使用运输层协议进行传递数据。

分用:是指接收放在剥去报文的首部后能后把这些数据正确交付目的应用进程。在主机B中,同一个运输层协议将数据分别交付给进程AP3和进程AP4。

网络技术中有一个关键问题,运输层怎么明确指明哪些数据是来自哪些进程,哪些数据又要传递给哪些进程?

运输层具有屏蔽功能,运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。 

运输层的两个主要协议

两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。 面向连接的协议TCP传送的数据单位协议是 TCP 报文段 (segment)。无连接的协议UDP传送的数据单位协议是UDP报文或用户数据报

用户数据报协议UDP (User Datagram Protocol)

用户数据报协议UDP传送数据之前不需要先建立连接。

收到UDP报后,不需要给出任何确认。

UDP协议不提供可靠交付,但是一种最有效的工作方式。 

传输控制协议TCP (Transmission Control Protocol) 

传输控制协议TCP提供可靠的、面向连接的运输服务。

不提供广播或多播服务。

但TCP协议开销较多。 

运输层的端口及分类 

为了解决上面哪些数据来自哪些进程,哪些收据又要传送给哪些进程的问题,我们首先要考虑以下几个问题:

  • 进程的创建和撤销都是动态的,因此发送方几乎无法识别其他机器上的进程。
  • 我们往往需要利用目的主机提供的功能来识别终点,而不需要知道具体实现这个功能的进程是哪一个。
  • 有时我们会改换接收报文的进程,但并不需要通知所有的发送方。

为了解决这些问题,在运输层使用协议端口号 (protocol port number),或通常简称为端口 (port)。把端口设为通信的抽象终点。 

这些端口用一个16位端口号进行标志,允许有 65,535 个不同的端口号。端口号只具有本地意义,只是为了标志本计算机应用层中的各进程。在互联网中,不同计算机的相同端口号没有联系。A主机的8888端口和B主机的8888端口没有什么关系。

由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的IP地址,而且还要知道对方的 端口号。

按照端口号分类

0~49151是服务端使用的端口号,49152~65535是客户端使用的端口号。 

  • 公认端口(熟知端口):0~1023。这些端口号是全球通用端口号,由IANA负责分配,它们紧密绑定于一些服务,通常这些端口的通讯明确表明了某种服务的协议,如:80端口对应与HTTP通信,21端口绑定与FTP服务,25端口绑定于SMTP服务,135端口绑定与RPC(远程过程调用)服务。
  • 注册端口(登记端口):1024~49151。这些端口号在IANA登记,它们松散的绑定于一些服务,也就是说有许多服务绑定于这些端口,这些端口同样用于其他许多目的,如:许多系统处理端口从1024开始
  • 动态或私有端口(短暂端口):49152~65535。这些端口号是客户端使用的端口号,在通信结束后,被系统收回。理论上,不应为服务分配这些端口,通常机器从1024开始分配动态端口。例外:SUN的RPC端口从32768开始。

按照协议类型分类

按协议类型划分可分为TCP端口、UDP端口、IP端口、ICMP。

  • TCP端口:即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。常见的包括FTP的21端口,Telnet的23端口,SMTP的25端口,HTTP的80端口。

  • UDP端口:即用户数据报协议端口,无需在客户端和服务器端建立连接,安全性得不到保障。常见的DNS的53端口,SNMP(简单网络管理协议)的161端口,QQ使用的8000和4000端口。

  • 保留端口:UNIX有保留端口号的概念,只有超级用户特权的进程才允许给它自己分配一个保留端口号。这些端口号介于1~1023之间,一些应用程序将它作为客户与服务器认证的一部分。

在这里,大家还要思考一个问题:TCP和UDP端口能不能同时使用同一端口?

其实,尽管它们的操作在同一个网络层级,但TCP和UDP是完全独立的协议,拥有不同的端口号空间。这意味着TCP和UDP可以使用相同的端口号,而不会发生冲突。

熟知的端口号

该部分参考【计算机网络】端口详解【概念、作用、分类、常见端口】 

BSD端口 

  • 0不使用,1-1023为系统端口,也叫BSD保留端口。
  • 0-1023: BSD保留端口,也叫系统端口,这些端口只有系统特许的进程才能使用
  • 1024~65535为用户端口,其中:      
    • 1024-5000: BSD临时端口,一般的应用程序使用1024到4999来进行通讯;      
    • 5001-65535:BSD服务器(非特权)端口,用来给用户自定义端口。
  • IANA建议49152至65535作为“动态或私有端口”。 
  • 许多Linux内核使用32768至61000范围。

配置文件/proc/sys/net/ipv4/ip_local_port_range有当前系统设定。

:~$ cat /proc/sys/net/ipv4/ip_local_port_range
32768	60999

http://www.ppmy.cn/devtools/99322.html

相关文章

(第三期)书生大模型实战营——OpenXLab部署InternLM2实践——上传模型

OpenXLab 部署 InternLM2 实践指南 上传模型 初始化git设置 # install git sudo apt-get update sudo apt-get install git# install git lfs sudo apt-get update sudo apt-get install git-lfs# use git install lfs git lfs installOpenXLab 使用你在平台的用户名作为 Git…

设计模式-结构型模式(第五章)

目录 5、结构型模式 5.1 代理模式 5.1.1 概述 5.1.2 结构 5.1.3 静态代理 5.1.4 JDK动态代理 5.1.4 JDK动态代理 5.1.5 CGLIB动态代理 5.1.6 三种代理的对比 5.1.7 优缺点 5.1.8 使用场景 5.2 适配器模式 5.2.1 概述 5.2.2 结构 5.2.3 类适配器模式 5.2.4 对象适…

R语言function快速掌握-自定义函数

R语言在生物学中运用的比较多的还是吊包然后使用内置函数进行一次性工作,但是生物信息与计算生物学领域确实低估和忽视了R语言在循环和自定义函数方面的优势。 在R语言中,function 是一个核心概念,它允许用户创建可重用的代码块来执行特定的…

怎么打包git提交版本

Git 将指定的提交版本到现在的文件导出为zip/tar包 在本文中,我们将介绍如何使用 Git 来将指定的提交版本到现在的文件导出为 zip 或 tar 包。Git 是一个分布式版本控制系统,它可以帮助我们记录和管理项目的历史变更,包括文件的新增、修改和删…

Windows-Server-2016/2019绕过WindowsDefender

当获得了一个webshell的时候,下一步要反弹个shell回来 在尝试了https://github.com/trustedsec/unicorn独角兽失败之后,找到了一篇使用golang将shellcode注入到内存的文章 Bypassing Antivirus with Golang - Gopher it! | JUMPSEC LABS GitHub - brimst…

读软件开发安全之道:概念、设计与实施07密码学(上)

1. 加密工具 1.1. 加密工具之所以没有得到充分使用,就是因为人们往往认为密码学是一个准入门槛极高的专业领域 1.2. 如今的加密学大部分都源自纯数学,所以只要能够正确使用,加密学确实行之有效 1.2.1. 不代表这些算法本身确实无法破解&…

lvs+keepalive大战haproxy+keepalive实现高可用集群

华子目录 lvskeepalive实验架构实验前的准备工作1.主机准备2.KA1和KA2上安装lvskeepalive3.webserver1和webserver2上安装httpd4.制作测试效果网页内容5.所有主机关闭firewalld和selinux6.开启httpd服务 实验步骤1.webserver1和webserver2上配置vip2.webserver1和webserver2上关…

基于Java爬取微博数据(二) 正文长文本+导出数据Excel

基于Java爬取微博数据二 正文长文本导出数据Excel 长文本补全导出微博数据到Excel注意点 上一篇文章简单讲述了基于Java爬取微博数据(一),那么这篇将Java爬取的微博数据导出到Excel中。下面开始具体的操作。 长文本补全 在爬取微博数据的时候,大家可能…