概述
端口号定义:
端口号主要运用于传输层上,用来标识同一台计算机中进行通信的不同应用程序(进程)。因此也被成为应用程序地址。
根据端口号识别应用
在一台计算机上可以同时运行着很多应用程序。比如接受万维网服务的web浏览器,远程登录的ssh客户端等程序都可以运行。传输层协议正是利用这些端口来区分本机中正在进行通信的应用程序,并准确将数据传输
(如下图,根据端口号识别应用图)
通过IP地址,端口号,协议号进行通信识别
仅凭目标端口号识别是远远不够的,试想如果两个主机上的两相同的应用程序同时请求同一个目的端口号,就会带来麻烦。
目的端口相同,IP地址相同,源端口号不同
如下图。1和2通信是在两台主机上进行的。他们的目的端口号是相同的,都是80,
例如打开两个web浏览器,同时访问服务器上两个不同的页面,就会在这个浏览器和服务器产生类似前面的通信(通过80端口找http应用程序),在这种情况下。就必须严格区分两个通信,此时就可以根据源端口号加以区分。目的端口,源端口号相同,IP地址不同
比如下图中1和3通信,此时就要根据IIP地址不同来区分他们之间的通信,应该把数据传给谁IP地址和端口号相同,协议号不同,此时需要通过协议号区别通信。
协议号:决定使用传输层上那个协议交付给上层
因此,在TCP/IP协议中 用源端口号,目的端口号,源IP,目的IP,协议这样一个五元组来标识一个通信。
端口号如何确定
在实际通信中,要事先确定端口号,确定端口号有两种方法:
标准既定的端口号(静态分配)
这种方法适用于应用程序有其指定的端口号,但不是说可以随意适用这些端口号,每个端口号有其对应的使用目的。这类端口号称为知名端口号。
例如,HTTP,FTP等广为人知的应用协议中所使用的端口号就是固定的。他们使用的端口号就是知名端口号
知名端口号一般由0到1023的数字分配而成。应应该用程序避免使用知名端口号进行违背既定目标之外的通信。
如之前编写tcp服务器时,绑定1023端口失败的情况。
除了知名 端口号之外,还有一些端口号被正式注册,他们分配在1024到449151之间,不过这些端口可以用于任何通信用途。
时序分配法
这种方法适用与服务器必须监听端口号,但是就是服务的客户端没有必要确定端口号。
在这种情况下,客户端应用程序完全不用自己设置端口号,而把这个任务交给操作系统进行分配,操作系统为每个应用程序分配互不冲突的端口号,每需要一个新端口号时,就会在之前分配的端口号上加1。这样操作系统就可以动态的 管理端口号了
端口号与协议
端口号由其使用的传输层协议决定。因此,不同的传输协议可以使用相同的端口号。
例如tcp和udp协议可以使用同一个端口号。但每个自使用的目的不同。这是因为端口号的处理是根据每个传输协议的不同而制定的。
数据到达IP层后,会根据IP首部的协议号,再出传给相应协议的模块。如果是TCP则传给TCP模块,如果是UDP则传给UDP模块去做端口号处理。即使是同一个端口号,由于传输协议是各自独立进行处理。因此不会相互影响。
此外,那些知名端口号与传输层并没有关系。只要端口号一致,都将分配给同一个程序处理。例如53号端口在TCP和UDP都用DNS服务。而80端口用于HTTP通信协议。从目前来看HTTP协议必须使用TCP,因此UDP的80端口并未使用。
TCP具有代表性的知名端口
最后
以上就是魔幻猎豹为你收集整理的网络编程-传输层(端口号)的全部内容,希望文章能够帮你解决网络编程-传输层(端口号)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复