端口

  学习网络的一定都知道端口这个东西,但是端口到底是什么?他的作用是什么在什么时候使用到它,今天就简单的介绍一下。

  首先,要清楚哪里用到了端口在TCP/IP协议中我们经常能够看到端口的身影,在网络中分层传输的时候,每经过一层都会给他加上一个首部,TCP、IP都是如此,虽然我们常常是把TCP和IP在一起说,但是TCP、IP两个协议是属于不同网络层的,TCP位于传输层,传输层的任务是确保数据能够从源主机发送到目标主句,而IP则位于传输层之下的网络层,网络层,网络层的作用则是用来负责地址管理和路由选择,例如在IP协议中,常常通过IP地址来标识网络中的某一台主机,并且通过路由表的形式来规划出两台主机之间的数据传输线路,所以我们常说的路由器就工作在网络层。

第一次看到这张图的时候还很纳闷为什么传输的时候不一致在物理层或者数据链路层进行传输,为什么在传输过程中还要耗时到网络层,这是因为在传输过程中, 需要不断的分析我们数据包中的ip地址来判断它要去的主机是什么位置,来给他确定路线。

  端口是在TCP协议中包含的,在传输过程中,IP地址保证了送到哪,而送给谁就就是TCP中的端口来决定的,这就好像发快递,地址都发到了你家,具体是谁的快递就要通过名字来判断。

  我们在学习进程的时候都知道,进程是拥有自己的进程ID的也就是我们通过进程的pid进程号来区分哪个进程是哪个,但是如果说通过网络来发送消息的话是不可以这样的, 我的操作系统的进程id为666的可能是QQ而你的可能就是微信,所以这时候端口就排上了用场。这样我们就可以通过IP地址+协议+端口号来标识网络中的一个进程,在某些场合我们也把这种唯一标识的标识符叫做套接字。我们只需要把数据发送到对应的端口剩下的就由TCP来完成了。

  TCP中用16个比特位来标识端口号,也就是说一台机器上可以有个2的16次方个端口也就是65535个端口。

  我们在之前网络编程的时候经常有一个现象就是当我们在写服务端的时候常常会给服务端的套接字绑定一个端口号,但是在客户端的时候经常会写,客户端是不需要绑定端口号的,因为操作系统会自动给我们分配一个端口号,为什么服务端要绑定一个固定的端口号呢?因为身为服务端是有很多人来访问的,如果说今天你程序的端口是22,然后你关了个机再打开变成了33,客户端咋找你,客户端程序里边写死就是要访问你的某个端口,这样才能保证每次都访问到,不然难道还要每次修改客户端里边访问的端口号?

  所以在设计端口的时候就留了0-1023这些端口号使我们的熟知端口号,一般来说我们自己写程序的时候是不用这些端口号的

  下边是一些知名的端口号:

   FTP------------21

   TELNET-------23

   SMTP---------25

   DNS-----------53

   HTTP----------80

   HTTPS---------443  

我们可以在Linux下通过 cat /etc/services命令来查看我们的知名端口号。

除去熟知的这些端口号,还有登记端口1024--49151这些虽然不是熟知的也不是固定的,但是需要登记使用以防重复,客户端动态分配的端口号则是49152---65535又叫做短暂端口号表示这个端口的使用时间是短暂的,客户端并不在意操作系统分配给的具体是多少。

 

那我们的一个进程能不能绑定多个端口呢?一个端口能不能对应多个进程呢?

一个进程可以对应多个端口,因为一个进程可以打开操作系统中多个文件描述符,一个文件描述符就对应了一个端口号,但是一个端口不能对应多个进程,如果通过fork的话是可以实现我们的父进程和子进程同时来访问一个端口的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值