Java网络编程的基本网络概念

自己网络这方面的知识很是薄弱,每次面试被问到这部分都会卡壳,所以很尴尬,然后最近也是有些时间了,就赶紧把自己的不足补充一下。虽然最近也在看设计模式,但是总看设计模式也容易烦,所以就并行学习,看看设计模式,然后再看看这网络编程

网络

首先熟悉一下, 什么是网络,网络是几乎可以实时相互发送和接收数据的计算机和其他设备的集合。网络通常用线缆连接,数据为转换为电磁波,通过线缆移动。不过,无线网络会通过无线电波传输数据,许多长距离的传输现在会用通过玻璃纤维发送可见光的光纤电缆来完成。

网络中的每台机器为一个节点(node)。大多数节点是计算机,但是打印机、路由器、网桥、网关、ATM机也都是节点。每个网络节点都有地址 (address),这是用于唯一标识节点的一个字节序列。每个地址中的字节越多,可用的地址就越多,就可以有更多的设备同时连入网络。

不同的网络会以不同的方式分配地址。以太网(Ethernet)地址与物理以太网硬件关联。以太网硬件的生产厂家使用预分配的厂商编码确保他们的硬件地址或与其他厂家的硬件地址不冲突。每家厂商都要负责保证不会生产出两块地址相同的以太网卡。

所有现代计算机网络都是包交换(分组交换)网络:流经网络的数据分割成小块,称为包(packet,也称分组),每个包都单独加以处理。每个包都包含了由谁发送和将发往何处的信息。

计算机来回传递数据时还有另一个重要的一个点,那就是协议,协议(protocol)是定义计算机如何通信的一组明确的规则:包括地址格式、数据如何分包等。针对网络通信的不同方面,定义有很多不同的协议。例如:Hypertext Transfer Protocol(HTTP)。

网络分层

通过网络发送数据是一项复杂的操作,必须仔细地协调网络的物理特性以及所发送数据的路基特征。为了对应用程序开发人员和最终用户隐藏这种复杂性,网络通信的不同方面被分解为多个层。每一层表示为物理硬件(即线缆和电流)与所传输信息之间的不同抽象层次。在理论上,每一层只与紧挨其上和其下的层对话。将网络分层,这样就可以修改甚至替换某一层的软件,只要层与层之间的接口保持不变,就不会影响到其他层。

Java网络编程的基本网络概念

上面的图显示了网络中可能存在的协议栈。

有几种不同的分层模型,分别适合特定类型网络的需要。我这边主要介绍适用于Internet的标准TCP/IP四层模型,如下图所示:

Java网络编程的基本网络概念

主机网络层

主机网络层定义了一个特定的网络接口(如以太网或WiFi天线)如何通过物理连接向本地网络或世界其他地方发送IP数据报。主机网络层中,由连接不同计算机的硬件(线缆、光纤电缆、无线电波或烟信号)组成的部分有时称为网络的物理层。Java程序员不需要担心这一层,除非出现了问题,比如插头从计算机后面掉了下来,或者有人挖断了你与外部世界之间的T-1线。换句话说,Java从来都看不到物理层。

网际层

网际层主机网络层的下一层,这也是作为Java程序员需要考虑的第一层,网际层协议定义了数据位和字节如何组织为更大的分组,称为包,还定义了寻址机制,不同计算机要按这个寻址机制查找对方。网际协议(IP)是世界上使用最广泛的网际层协议,也是Java唯一理解的网际层协议。

网际协议主要是两个协议:IPV4和IPV6,IPV4使用32位地址,IPV6使用128位地址,另外还增加了一些技术特性来帮助完成路由。这是两个完全不同的网络协议,如果没有特殊的网关/或隧道协议,即使在相同的网络上它们也无法做到互操作,不过Java几乎对你隐藏了所有这些区别。

除了路由和寻址,网际层的第二个作用是支持不同类型的主机网络层相互对话。Internet路由器会完成WiFi和Ethernet、Ethernet和DSL、DSL和光纤往返等协议之间的转换。如果没有网际层或类似的分层,则每个计算机只能与同一类网络上的其他计算机对话。网际层负责使用同够协议将异构网络相互连接。

传输层

原始数据报有一些缺点。最显著的缺点是不能保证可靠传送,即使能传送也可能在传输中遭到破坏。首部校验只能检测首部中的破坏情况,而不能检测数据报中的数据部分。最后即使数据报能到底目的地而未被破坏,也不一定会以发送时的顺序到达。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7153eb0b871d4aff4507708062dbc200.html