网络编程(一) ———— 网络基础知识(IP地址和端口号)

文章目录

  • 局域网和广域网
  • IP地址
  • 端口号


局域网和广域网

局域网LAN:局域网 Local Area Network,简称LAN
局域网内的主机之间能方便的进行网路通信,又称为内网;局域网和局域网之间在没有 连接的情况下,是无法通信的。局域网表示的范围比较小,可能就是一个机房,大到一栋楼或者整个校园。

网络编程(一) ———— 网络基础知识(IP地址和端口号)_第1张图片
广域网WAN (Wide Area Network ):通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。如果把一个城市或者一个国家甚至全世界的网路都相互连接起来,就构成了广域网。

网络编程(一) ———— 网络基础知识(IP地址和端口号)_第2张图片

IP地址

IP地址就是标识一个主机在网络上的位置信息

IP地址就和日常生活中我们谈到的地址差不多,在计算机中,使用一个32位整数来表示这个IP地址,由于这个32位整数往往比较大,肉眼看起来不太方便。为了更好的进行表示,更方便进行查看和记忆,于是就引入了便于查看和记忆的一种表示方式:点分十进制

使用三个点,把这个32位的整数分成四个部分,每个部分都是一个一个字节的整数。每个部分的取值范围,就是0~255.

一般我们希望网络上的每个主机,IP地址都不一样。但是实际上,还是会有很多情况多个主机共用一个IP地址,原因就是IP地址不太够用

特殊IP
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输)

端口号

端口号是用来区分一个主机上的应用程序的。

通过IP地址只是确定了一台主机,但是一个主机上还有很对的程序。

当一个主机收到一个具体的数据的时候,要把这个数据交给哪个程序来处理,就是通过端口号来区分,每个访问网络的程序,都需要有一个不同的端口号。
一台主机上,不能用两个进程尝试绑定(关联)同一个端口号,如果第一个进程绑定了端口号n,第二个进程也尝试绑定这个端口号n的时候,就会失败。

端口号的用途:标识一个进程,就可以区分出当前收到的数据要交给哪个进程来处理

端口号是一个整数,用来区分进程

PID也是一个整数,也是用来区分进程

为啥网络编程中,不直接使用这个PID,还需要再造一个端口号这样的概念呢?

端口号是固定不变的,端口号咱们可以手动指定

但是PID,每次进程启动之后,都在发生改变,这是系统自动分配的,我们是控制不了的。

通常情况下,两个进程是无法绑定到同一个端口号的。

一个进程能不能绑定多个端口呢?

这个事情是完全可以的,而且非常常见,绑定并不是把进程和端口绑定,而是把 socket和端口绑定。(socket就是文件,一个进程里可以有很多文件,也就可以有很多 socket,每个socket都可以绑定到不同的端口)

通常情况下,两个进程无法绑定到同一个端口号

有的特殊情况是可以的

在Linux中,先让进程绑定到一个端口,接下来,通过fork这个系统调用,把进程的PCB复制一份,得到一个新的,“子进程”

由于端口号是关联在 socket 上,而soket是一个文件,这个文件在文件描述符表中,而文件描述符表又是PCB的一部分

fork复制PCB,也就把文件描述符表给继承下来了,也就顺带把这样的端口号的关联关系也给继承过来了

不过这种场景Java基本不会涉及

端口号是一个整数,是一个两个字节的整数,0-65535(没有负数)

有些端口程序员是不能随便使用的,

0-1023这些端口,称为知名端口

  • 80,一般就是给HTTP来使用
  • 22,一般给SSH使用
  • 21,一般给FTP使用
  • 23,一般给telnet使用
  • 443,一般给HTTPS使用

这些知名端口号,在实际开发中也不一定非得要严格遵守

例如,TomCat也是一个HTTP服务器,但是它使用的默认端口号是8080,而不是80

自己写的服务器,最好不要使用知名端口号,在Linux上,如果进程要绑定知名端口号,往往需要管理员权限。所以自己写服务器,只要避开知名端口号,并且在65535范围之内就可以了。


网络系列文章图片出自《图解TCP/IP》,下一篇 《OSI七层网络模型》

你可能感兴趣的:(网络编程,网络,网络编程)