【网络篇】第三篇——源端口号和目的端口号

这篇具有很好参考价值的文章主要介绍了【网络篇】第三篇——源端口号和目的端口号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

端口号的定义

理解源端口号和目的端口号

PORT VS PID

端口号如何确定?

端口号于协议

认识TCP协议和UDP协议


端口号的定义

数据链路层的地址是MAC地址,用来识别同一链路中不同的计算机

网络层(IP)的地址是IP地址,用来识别TCP/IP网络中互连的主机和路由器

传输层中类似于地址的概念就是端口号

端口号用来识别同一台计算机中进行通信的不同应用程序

端口号也被称为程序地址

理解源端口号和目的端口号

首先我们需要明确的是,两台主机之间通信的目的不仅仅是为了将数据发送给对端主机,而是为了访问对端主机上的某个服务。比如我们在用百度搜索引擎进行搜索时,不仅仅是想将我们的请求发送给对端服务器,而是想访问对端服务器上部署的百度相关的搜索服务。

根据端口号识别应用

一台计算机上可以同时运行很多个程序

 比如接受WWW服务的Web浏览器,电子邮件客户端,远程登录用的ssh客户端等等这些程序都可以同时运行,传输层的协议刚好是利用这些端口号识别主机中正在进行通信的应用程序,才可以达到准确的数据传输。

socket通信的本质

 现在通过IP地址和MAC地址已经能够将数据发送到对端主机了,但实际我们是想将数据发送给对端主机上的某个服务进程,此外,数据的发送者也不是主机,而是主机上的某个进程,比如当我们用浏览器访问数据时,实际就是浏览器进程向对端服务进程发起的请求。

也就是说,socket通信本质上就是两个进程之间在进行通信,只不过这里是跨网络的进程间通信。比如逛淘宝和刷抖音的动作,实际就是手机上的淘宝进程和抖音进程在和对端服务器主机上的淘宝服务进程和抖音服务进程之间在进行通信。

因此进程间通信的方式除了管道、消息队列、信号量、共享内存等方式外,还有套接字,只不过前者是不跨网络的,而后者是跨网络的。

端口号

实际在两台主机上,可能会同时存在多个正在进行跨网络通信的进程,因此当数据到达对端主机后,必须要通过某种方法找到该主机上对应的服务进程,然后将数据交给该进程处理。而当该进程处理完数据后还要对发送端进行响应,因此对端主机也需要知道,是发送端上的哪一个进程向它发送的数据请求。

端口号(port)的作用实际就是标识一台主机上的一个进程。

  • 端口号是传输层协议的内容。
  • 端口号是一个2字节16位的整数。
  • 端口号用来标识一个进程,告诉操作系统,当前的这个数据要交给哪一个进程来处理。
  • 一个端口号只能被一个进程占用。

由于IP地址能够唯一标识公网内的一台主机,而端口号能够唯一标识一台主机上的一个进程,因此用IP地址+端口号就能够唯一标识网络上的某一台主机的某一个进程。

当数据在传输层进行封装时,就会添加上对应源端口号和目的端口号的信息。这时通过源IP地址+源端口号就能够在网络上唯一标识发送数据的进程,通过目的IP地址+目的端口号就能够在网络上唯一标识接收数据的进程,此时就实现了跨网络的进程间通信。

注意: 因为端口号是隶属于某台主机的,所以端口号可以在两台不同的主机当中重复,但是在同一台主机上进行网络通信的进程的端口号不能重复。此外,一个进程可以绑定多个端口号,但是一个端口号不能被多个进程同时绑定。 

PORT VS PID

端口号(port)的作用唯一标识一台主机上的某个进程,进程ID(PID)的作用也是唯一标识一台主机上的某个进程,那在进行网络通信时为什么不直接用PID来代替port呢?

 进程ID(PID)是用来标识系统内所有进程的唯一性的,它是属于系统级的概念;而端口号(port)是用来标识需要对外进行网络数据请求的进程的唯一性的,它是属于网络的概念。

一台机器上可能会有大量的进程,但并不是所有的进程都要进行网络通信,可能有很大一部分的进程是不需要进行网络通信的本地进程,此时PID虽然也可以标识这些网络进程的唯一性,但在该场景下就不太合适了。

比如每个人都有自己的身份证号,身份证号已经可以标识我们的唯一性了,但是当我们到了学校还是会有学号,到了公司还是会有工号。这是为什么呢?为什么不直接用身份证号来代替学号和工号呢?

因为身份证号是国家用于行政管理时用的编号,而学号是学校用于管理学生时用的编号,工号是公司用于管理员工时用的编号。但并不是全中国人都在某所学校或某家公司,因此在学校或公司当中,没必要用身份证号来标识每个人的唯一性。此时就出现了学号和工号,在学号和工号当中还可以包含一些便于管理的信息,比如入学(入职)年份、性别等信息。

也就是说,在不同的场景下可能需要不同的编号来标识某种事物的唯一性,因为这些编号更适合用于该场景。

底层如何通过port找到对应进程的?

 实际底层采用哈希的方式建立了端口号和进程PID或PCB之间的映射关系,当底层拿到端口号时就可以直接执行对应的哈希算法,然后就能够找到该端口号对应的进程

端口号如何确定?

实际当中进行通信之前要先确定端口号

  • 标准既定的端口号,也叫做静态方法。每个应用程序都有指定的端口号,不是随意的使用任何一个端口号,每个端口号都有对应的使用目的,当然一个端口的作用可以不止一个,HTTP,TELNET等应用协议中所使用的端口号都是固定的,这些端口号也可以叫做知名端口号,一般由0-1023的数字分配的。其他端口号也被正式注册了,1024-49151之间的,这些端口号可以被用于任何通信用途
  • 时序分配法,动态分配法。服务端有必要确定监听端口号,但是客户端没有必要确定端口号,客户端应用程序可以完全不设置自己的端口号,交给操作系统进行分配,在之前的端口号基础上加上1,操作系统就可以动态的管理端口号了,动态分配端口号即使同一个客户端发起多个TCP连接,识别通信的5部分数据也不全部相同,不会冲突。动态分配端口号在46152-65535之间

端口号于协议

一个服务的端口号由其使用的传输层的协议决定,不同的传输层协议可以使用相同的端口号,比如TCP和UDP,但是使用的目的不一样,端口号上面进行的处理也是根据每个传输协议的不同而进行的。数据到达网络等之后(IP层),会先检查IP首部中的协议号,再传给相应协议的模块去处理,再由TCP或者UDP去进行端口处理,HTTP通信必须使用TCP,因为UDP的80端口并没有开启。53端口在TCP和UDP中都用于DNS服务,80端口在TCP和UDP中都用于HTTP服务。

认识TCP协议和UDP协议

网络协议栈是贯穿整个体系结构的,在应用层、操作系统层和驱动层各有一部分。当我们使用系统调用接口实现网络数据通信时,不得不面对的协议层就是传输层,而传输层最典型的两种协议就是TCP协议和UDP协议。

TCP协议 

TCP协议叫做传输控制协议(Transmission Control Protocol),TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议

TCP协议是面向连接的,如果两台主机之间想要进行数据传输,那么必须要先建立连接,当连接建立成功后才能进行数据传输。其次,TCP协议是保证可靠的协议,数据在传输过程中如果出现了丢包、乱序等情况,TCP协议都有对应的解决方法。

UDP协议

UDP协议叫做用户数据报协议(User Datagram Protocol),UDP协议是一种无需建立连接的、不可靠的、面向数据报的传输层通信协议。

使用UDP协议进行通信时无需建立连接,如果两台主机之间想要进行数据传输,那么直接将数据发送给对端主机就行了,但这也就意味着UDP协议是不可靠的,数据在传输过程中如果出现了丢包、乱序等情况,UDP协议本身是不知道的。

既然UDP协议是不可靠的,那为什么还要有UDP协议的存在?

TCP协议是一种可靠的传输协议,使用TCP协议能够在一定程度上保证数据传输时的可靠性,而UDP协议是一种不可靠的传输协议,UDP协议的存在有什么意义?

首先,可靠是需要我们做更多的工作的,TCP协议虽然是一种可靠的传输协议,但这一定意味着TCP协议在底层需要做更多的工作,因此TCP协议底层的实现是比较复杂的,我们不能只看到TCP协议面向连接可靠这一个特点,我们也要能看到TCP协议对应的缺点。

同样的,UDP协议虽然是一种不可靠的传输协议,但这一定意味着UDP协议在底层不需要做过多的工作,因此UDP协议底层的实现一定比TCP协议要简单,UDP协议虽然不可靠,但是它能够快速的将数据发送给对方,虽然在数据在传输的过程中可能会出错。

编写网络通信代码时具体采用TCP协议还是UDP协议,完全取决于上层的应用场景。如果应用场景严格要求数据在传输过程中的可靠性,此时我们就必须采用TCP协议,如果应用场景允许数据在传输出现少量丢包,那么我们肯定优先选择UDP协议,因为UDP协议足够简单。

注意: 一些优秀的网站在设计网络通信算法时,会同时采用TCP协议和UDP协议,当网络流畅时就使用UDP协议进行数据传输,而当网速不好时就使用TCP协议进行数据传输,此时就可以动态的调整后台数据通信的算法。
 文章来源地址https://www.toymoban.com/news/detail-793454.html

到了这里,关于【网络篇】第三篇——源端口号和目的端口号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • powershell 接收一个端口tcp数据复制转发到多个目的

    在 PowerShell 中,你可以使用  New-Object  来创建  System.Net.Sockets.TcpListener  和  System.Net.Sockets.TcpClient  对象,从而接收一个 TCP 端口的数据并将其转发到多个目的地。下面是一个 PowerShell 脚本示例,该脚本展示了如何从一个 TCP 端口接收数据并将其复制到多个目标地址: 在这个

    2024年02月21日
    浏览(38)
  • Java中网络的基本介绍。网络通信,网络,ip地址,域名,端口,网络通信协议,TCP/IP传输过程,网络通信协议模型,TCP协议,UDP协议

    - 网络通信 概念:网络通信是指 通过计算机网络进行信息传输的过程 ,包括数据传输、语音通话、视频会议等。在网络通信中,数据被分成一系列的数据包,并通过网络传输到目的地。在数据传输过程中,需要确保数据的完整性、准确性和安全性。常见的网络通信协议有T

    2024年02月10日
    浏览(71)
  • 树莓派学习:建立socket进行网络通信+tcp+udp+端口+字节序+socketAPI+地址转换API+聊天对话框实战

    目录 socket套接字网络通信学习 数据协议 tcp udp ip地址 端口 字节序 步骤  API介绍 地址转换API 实战  聊天对话框 服务器  运行时后面要传IP地址和端口 客户端   运行时后面要传IP地址和端口 socket是网络通信,通信的数据协议有http、tcp、udp等等,简单来说就是传输数据的格式

    2024年02月05日
    浏览(54)
  • 详解TCP/IP协议第三篇:通信数据在OSI通信模型的上下传输

    😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824   📚📚  工作微信:BigTreeJava 拉你进微信群,免费领取! 🍎🍎4:本文章内容出自上述:Spring应用课程!💞💞

    2024年02月09日
    浏览(44)
  • 网络基础(第三篇)子网掩码

    文章目录 一、IP地址 二、 子网掩码 IP地址是什么? 在网络中用来标识设备的具体地址,数据需要通过此进行寻址传输。   IP地址的组成: 网络部分: 用来标识一个网络。代表IP地址所属网络,处于高位; 主机部分: 用来区分一个网络内的不同主机,能唯一标识网段上的某台

    2024年02月04日
    浏览(35)
  • 云服务器:开放TCP、UDP端口

            众所周知,电脑设备有些端口默认是不开放的,我们使用TCP或者UDP去连接没有开放端口时就会被防火墙拦截,所以就需要到电脑防火墙设置里面把需要用到的端口开放出来。操作如下:         1.打开防火墙(可以直接搜索)         2.新建规则       

    2024年02月03日
    浏览(54)
  • socket端口复用之TCP和UDP

    目录 1.什么是端口复用? 2.多个socket可以绑定同一个端口吗? 3.绑定同一端口的多个套接字如何接收数据? 4.SO_REUSEADDR和SO_REUSEPORT选项设置 5.SO_REUSEADDR和SO_REUSEPORT在实际中的运用? 5.1 解决TCP套接字处于TIME_WAIT状态占用端口号问题。 5.2 程序重启后后,端口未释放导致程序重启

    2024年02月07日
    浏览(41)
  • UDP和TCP可以使用同一个端口吗?

    之前有读者在面试的时候,被问到: TCP 和 UDP 可以同时监听相同的端口吗? 关于端口的知识点,还是挺多可以讲的,比如还可以牵扯到这几个问题: 多个 TCP 服务进程可以同时绑定同一个端口吗? 客户端的端口可以重复使用吗? 客户端 TCP 连接 TIME_WAIT 状态过多,会导致端

    2023年04月08日
    浏览(90)
  • CentOS7系统放行TCP/UDP端口教程

    在使用CentOS7操作系统时,您需要放行某些端口,以便应用程序能够正常运行。下面是如何放行TCP/UDP端口的步骤。 步骤1:SSH连接服务器 使用SSH方式连接服务器,如果您不知道如何SSH连接服务器,可以查看该教程:SSH远程连接 Linux 服务器教程 步骤2:确定要放行的端口 在放行

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包