初学时是建立网络编程的整体认识而不是深钻细节。


这一部分全是概念,没有具体操作。概念源自于----《实战Java程序设计》


计算机网络

计算机网络是指将地理位置不同的具有独立功能的多台计算机以及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
提取精华:
1)计算机网络的作用是资源共享和信息传递。
2)计算机网络的组成包括:

  • 计算机硬件:计算机、外部设备、通信线路
  • 计算机软件:网络操作系统、网络管理软件、网络通信协议
    3)计算机网络中的多台计算机是具有独立功能的,而不是脱机网络就无法存在。

网络通信协议

1 网络通信协议
通过计算机网络可以实现不同计算机之间的连接与通信,但是在计算机网络中实现网络通信必须遵守一些约定,即通信协议,对速率、 传输代码、代码结构、传输控制步骤、传输控制步骤、出错控制等制定了标准。
国际标准化组织(International Organization for Standardiztion, ISO)定义了网络通信协议的基本框架,称为开放系统互联(Open System Interconnect, OSI) 模型。要制定通信规则,涉及的内容会很多。所以OSI模型将这些通信标准按层次进行划分,每一个层次解决一个类别的问题,这样就使得标准的制定没那么复杂。OSI模型制定的七层标准模型,分别是应用层、表示层、会话层、传输层、网络层、数据链路层和物理层,如下:
Java学习之网络编程基本概念
虽然国际标准化组织制定了这样一个网络通信协议的模型, 但是实际上互联网通信使用最多的还是TCP/IP网络通信协议。
TCP/IP是一个协议族,按照层次划分为四层,分别是应用层、传输层、互连网络层和网络接口层(物理+数据链路层)。
关于OSI模型和TCP/IP协议的区别:OSI网络通信协议模型是一个参考模型,而TCP/IP协议是事实上的标准。CP/IP协议参考 了OSI模型,但是并没有严格按照OSI规定的七层协议标准去划分,而只划分了四层,这样会更简单,当划分太多层次时,人们很难区分某个协议是属于哪个层次的、TCP/IP协议和OSI模型也不冲突,TCP/IP协议中的应用层对应于OSI中的应用层、表示层、会话层。TCP/IP中有两个重要的协议,传输层的TCP协议和互联网络层IP协议,因此就拿这两个协议来命名整个协议族,TCP/IP协议就是指整个协议族。
2 网络协议的分层
由于网络节点之间的联系很复杂,因此协议把复杂的内容分解为简单的内容,再将它们复合起来。最常用的复合方式是层次方式,即同层间可以通信,上一 层可以调用下一层,而与再下一层不发生关系。
用户应用程序为最高层,物理通信线路为最低层,其间的协议处理分为若干层并规定每层处理的任务,也规定每层的接口标准。
Java学习之网络编程基本概念


数据封装与解封

由于用户传输的数据一般都比较大,甚至以兆字节计算,一次性发出去十分困难,因此就需要把数据分成很多片段,再按照一定的次序发送出去。这个过程就需要对数据进行封装。
数据封装(Data Encapsulation) 是指将协议数据单元(PDU)封装在一组协议头和协议尾中的过程。在OSI七层参考模型中,每层主要负责与其他机器上的对等层进行通信。该过程是在协议数据单元(PDU) 中实现的,其中每层的PDU一般由本层的协议头、协议尾和数据封装构成。
1 数据发送处理过程
1)应用层将数据转交给传输层,传输层添加上TCP的控制信息(称为TCP头部),这个数据单元称为段(Segment),加入控制信息的过程称为封装。然后,将段交给网络层。
2)网络层接收到段,再添加上IP头部,这个数据单元称为包(Packet) 。然后,将包交给数据链路层。
3)数据链路层接收到包,再添加上MAC头部和尾部,这个数据单元称为帧(Frame)。然后,将帧交给物理层。
4)物理层将接收到的数据转化为比特流,然后在网线中传送。
2 数据接收处理过程
1)物理层接收到比特流,经过处理后将数据交给数据链路层。
2)数据链路层将接收到的数据转化为数据帧,再去除MAC头部和尾部,这个去除控制信息的过程称为解封,然后将包交给网络层。
3)网络层接收到包,再去除IP头部,然后将段交给传输层。
4)传输层接收到段,再去除TCP头部,然后将数据交给应用层。
从以上传输过程中,可以总结出以下规则:
1)发送方的数据处理方式是从高层到底层,逐层进行数据封装。
2)接收方的数据处理方式是从底层到高层,逐层进行数据解封装。
接收方的每一层只把对该层有意义的数据拿走,或者说每一层只能处理发送方同等层的数据,然后把其余的部分传递给上一层,这就是对等层通信的概念。

Java学习之网络编程基本概念
沉迷于作图…
Java学习之网络编程基本概念


IP地址与端口

IP地址
IP地址用来标识网络中的一个通信实体的地址。通信实体可以是计算机、路由器等。
目前主流IP地址使用的是IPv4协议,但是随着网络规模的不断扩大,采用IPv4协议的可用地址数量面临着枯竭的危险,所以推出了IPv6协议。
IPv4协议采用32位地址,并以8位为一个单位,分成4部分,以点分十进制表示,如192.168.0.1。因为8位二进制的计数范围000000–111111对应十进制的0~255,所以-4.278.4.1是错误的IPv4地址。
IPv6协议为128位地址(16字节),写成8个16位的无符号整数,每个整数用4个十六进制位表示,每个数之间用冒号(:)分开,如3ffe:3201:1401:1280:c8ff.fe4d:db39:1984。
端口
端口用来区分一台计算机上可能提供多种网络应用程序。
端口是虚拟的概念,并不是在主机上真的有若干个端口。通过端口,可以在一一台主机上运行多个网络应用程序。端口用一个16位的二进制整数表示,对应十进制的范围是0~65535。


URL

在因特网上,每一信息资源都有统一且唯一的地址,该地址就叫作URL (UniformResource Locator),它是因特网的统一资源定位符。 URL由4部分组成:协议、存放资源的主机域名、资源文件名和端口号。如果未指定端口号,则使用协议默认的端口。例如HTTP协议的默认端口为80。在浏览器中访问网页时,地址栏显示的地址就是URL。
在java.net包中提供了URI类,该类封装了大量涉及从远程站点获取信息的复杂细节。


Socket

人们开发的网络应用程序位于应用层,TCP和UDP属于传输层协议,在应用层如何使用传输层的服务呢?在应用层和传输层之间,使用套接字Socket来进行分离。
套接字就像是传输层为应用层打开的一个小窗口,应用程序通过这个小窗口向远程发送数据,或者接收远程发来的数据;当数据进入这个口之后,或者数据从这个口出来之前,外界不知道也不需要知道,更不会关心它如何传输,这属于网络其他层的工作。Socket实际是传输层供给应用层的编程接口。Socket就是应用层与传输层之间的桥梁。使用Socket编程可以开发客户机和服务器应用程序,可以在本地网络上进行通信,也可通过Internet在全球范围内通信。
Java学习之网络编程基本概念


TCP协议和UDP协议

联系和区别
TCP协议和UDP协议是传输层的两种协议。Socket是传输层提供给应用层的编程接口,所以Socket编程就分为TCP编程和UDP编程两类。
在网络通信中,TCP方式就类似于拨打电话,使用该方式进行网络通信时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据。而UDP方式就类似于发送短信,使用这种方式进行网络通信时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得数据。
这两种传输方式都在实际的网络编程中使用,重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则可以通过UDP方式进行传输,在一些程序中甚至结合使用这两种方式进行数据传输。
由于TCP需要建立专用的虚拟连接并确认传输是否正确,所以使用TCP方式的传输速度稍微慢一些,而且传输时产生的数据量也要比UDP大。

  • TCP是面向连接的,传输数据安全、稳定,效率相对较低
  • UDP是面向无连接的,传输数据不安全,但效率较高
    TCP协议
    TCP (Transfer Control Protocol) 协议是面向连接的,所谓面向连接,就是当计算机双方通信时必须经过先建立连接,然后传送数据,最后拆除连接三个过程。
    TCP在建立连接时又分为三步:
    1)请求端(客户端)发送一个包含SYN即同步(Synchronize) 标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号。
    2)服务器在收到客户端的SYN报文后,将返回一个SYN+ACK报文,表示客户端的请求被接受。同时TCP序号被加1,ACK即确认(Acknowledgement) 。
    3)客户端返回一个确认报文ACK给服务器端,同样TCP***被加1,至此一个TCP连接完成。然后才开始通信的第二步,数据处理。
    以上就是常说的TCP的三次握手(Three-way Handshake)。
    UDP协议
    基于TCP协议可以建立稳定连接的点对点通信。这种通信方式实时、快速、安全性高,但是很占用系统的资源。
    在网络传输方式上,还有另一种基于UDP协议的通信方式,称为数据报通信方式。在这种方式中,每个数据发送单元被统一封装成数据报包的方式, 发送方将数据报包发送到网络,数据报包在网络中去寻找它的目的地。

相关文章: