Java网络编程的基础:计算机网络

在学习Java网络编程之前,我们先来了解什么是计算机网络。

计算机网络是指两台或者更多的计算机组成的网络,在同一网络中,任意两台计算机都可以直接通信,所有计算机需要遵循同一种网络协议。

下面是一张简化的网络拓扑图(来源:二哥的Java进阶之路)。

用户设备:Laptop,用于访问网络资源。

网络交换机:Switch,用于连接局域网内的设备,例如Laptop和Router。

路由器:Router,用于连接不同网络,将局域网与互联网互联。

防火墙:Firewall,用于保护网络内部资源,防止未经授权的访问。

互联网:Internet,提供连接到其他网络的全球信息资源。

服务器:Server,用于托管网络应用程序和数据。

那什么是互联网呢?互联网是网络的网络(Internet),即把很多计算机网络连接起来,形成一个全球统一的互联网。

对于某个特定的计算机网络来说,他可能使用网络协议ABC,而另一个计算机网络可能使用网络协议XYZ。如果计算机网络各自的通信协议不同意,就没办法把不同的网络连接起来形成互联网。因此,为了把计算机网络接入互联网,及必须使用TCP/IP协议。

TCP/IP协议泛指互联网协议,其中最重要的两个协议是TCP协议和IP协议。只有使用TCP/IP协议的计算机才能够连入互联网,使用其他网络协议(例如NetBIOS,AppleTalk协议等)是无法炼乳互联网的。

IP地址

在互联网中,一个IP地址用于唯一标识一个网络接口(Network Interface)。一台接入互联网的计算机肯定有一个IP地址,但也可能有多个IP地址。

IP地址分为IPv4和IPv6两种。IPv4采用32位地址,类似于127.0.0.1,而IPv6采用128位地址,类似于2001:250:1800:19c4::5634。IPv4地址总共有2^32个(大约42亿),而IPv6地址则总共有2^128个(大约340万亿亿亿亿),IPv4的地址目前已经耗尽,而 IPv6 的地址是根本用不完的(可以给每粒沙子都分一个)。

IP地址又分为公网IP地址和内网IP地址。公网IP地址可以直接被访问,内网IP地址只能在内网访问。内网IP地址类似于:

  • 192.168.x.x
  • 10.x.x.x

有一个特殊的IP地址,称为本机地址,总是127.0.0.1(localhost)。

IPv4地址实际上是一个32位整数。例如

1707762444 = 0x65ca630c
           = 65  ca  63 0c
           = 101.202.99.12

如果一台计算机只有一个网卡,并且介入了网络,那么它有一个本机地址127.0.0.1,还有一个IP地址,例如101.202.99.12,可以通过这个IP地址接入网络。

如果一台计算机有两块网卡,那么除了本机地址,它可以有两个IP地址,可以分别接入两个网络。通常连接两个网络的设备是路由器或者交换机,它至少有两个 IP 地址,分别接入不同的网络,让网络之间连接起来。

如果两台计算机位于同一个网络,那么他们之间可以直接通信,因为它们的IP地址前段是相同的,也就是网络号是相同的。网络号是IP地址通过子网掩码过滤后得到的。例如:

某台计算机的 IP 是101.202.99.2,子网掩码是255.255.255.0,那么计算该计算机的网络号是:

IP = 101.202.99.2
Mask = 255.255.255.0
Network = IP & Mask = 101.202.99.0

每台计算机都需要正确配置IP地址和子网掩码,根据这两个就可以计算网络号,如果两台计算机计算出的网络号相同,说明两台计算机在同一个网络,可以直接通信。如果两台计算机计算出的网络号不同,那么两台计算机不再同一个网络,不能直接通信,它们之间必须通过路由器或者交换机这样的网络设备间接通信,我们把这种设备称为网关。

网关的作用就是连接多个网络,负责把来自一个网络的数据包发送到另一个网络,这个过程叫路由。

所以,一台计算机的一个网卡会有3个关键配置:

IP地址,例如:10.0.2.15

子网掩码,例如:255.255.255.0

网关的IP地址:例如:10.0.2.2

域名:

因为直接记忆IP地址非常困难,所以我们通常使用域名访问某个特定的服务。域名解析服务器DNS负责把域名翻译成对应的IP,客户端再根据IP地址访问服务器。

用nslookup可以查看域名对应的IP地址:

$ nslookup www.tobebetterjavaer.com
Server:  xxx.xxx.xxx.xxx
Address: xxx.xxx.xxx.xxx#53

Non-authoritative answer:
Name:    www.tobebetterjavaer.com
Address: 47.98.33.223

有一个特殊的本机域名localhost,它对应的IP地址总是本机地址127.0.0.1.

网络模型

由于计算机网络必须从底层的传输到高层的软件设计十分复杂,要合理地设计计算机网络模型,必须采用分层模型,每一层负责处理自己的操作。OSI(Open System Interconnect) 网络模型是ISO组织定义的一个计算机互联的标准模型,注意它只是一个定义,目的是简化网络各层的操作,提供标准接口便于实现和维护。这个模型从上到下依次是:

应用层:提供应用程序之间的通信;

表示层:处理数据格式,加解密等等;

会话层:负责建立和维护会话;

传输层:负责提供端到端的可靠传输;

网络层:负责根据目标地址选择路由来传输数据;

链路层和物理层负责把数据进行分片并且真正通过物理网络传输,例如,无线网、光纤等。

互联网实际使用的TCP/IP模型并不是对应到OSI的7层模型,而是大致对应OSI的5层模型:

常用协议

IP协议是一个分组交换,它不保证可靠传输。而TCP协议是传输控制协议,它是面向连接的协议,支持可靠传输和双向通信。TCP协议是建立在IP协议之上的,简单地说,IP协议指负责发数据包,不保证正确和顺序,而TCP协议负责控制数据包传输,它在传输数据之前需要先建立连接,建立连接后才能传输数据,传输完后还需要断开连接。TCP协议之所以能保证数据的可靠传输,是通过接收确认、超时重传这些机制实现的。并且TCP协议运行双向同i性能,即通信双方可以同时发送和接受数据。

TCP协议也是应用最广泛的协议,许多高级协议都是建立在TCP协议之上的,例如HTTP、SMTP等。

TCP(传输控制协议)和 IP(互联网协议)通常一起使用,被称为 TCP/IP 协议。

TCP/IP 协议栈分为四层:应用层、传输层、网络层和链路层。IP 协议位于网络层,负责将数据包从源主机路由到目标主机;TCP 协议位于传输层,负责在源主机和目标主机之间建立可靠的连接并确保数据的有序传输。

UDP 协议(User Datagram Protocol)是一种数据报文协议,它是无连接协议,不保证可靠传输。因为 UDP 协议在通信前不需要建立连接,因此它的传输效率比 TCP 高,而且 UDP 协议比 TCP 协议要简单得多。

选择 UDP 协议时,传输的数据通常是能容忍丢失的,例如,一些语音视频通信的应用会选择 UDP 协议。

小结

计算机网络的基本概念主要有:

  • 计算机网络:由两台或更多计算机组成的网络;
  • 互联网:连接网络的网络;
  • IP 地址:计算机的网络接口(通常是网卡)在网络中的唯一标识;
  • 网关:负责连接多个网络,并在多个网络之间转发数据的计算机,通常是路由器或交换机;
  • 网络协议:互联网使用 TCP/IP 协议,它泛指互联网协议簇;
  • IP 协议:一种分组交换传输协议;
  • TCP 协议:一种面向连接,可靠传输的协议;
  • UDP 协议:一种无连接,不可靠传输的协议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值