Java网络编程学习笔记(1)——基本网络概念

网络原理:

具体主要从以下几个方面介绍:
- 数据传输
- 网络分层

数据传输

packet: 所有现代计算机网络都是包交换(分组交换)网络,流经网络的数据被分成很多小块,称为包(packet也叫分组),每个包都单独加以处理。每个包都包含由谁发送和发送向谁的信息。其优点是多个即将交换的包可以在一条线缆上传输。多个计算机可以互不干扰的共用一条电缆。

protocol:计算机来回传递数据时还需要提供什么,协议。协议是定义计算机如何通信的一组明确规则,包括地址格式,数据如何分包,定义有很多不同协议,例如超文本传输协议(Hypertext Transfer Protocol)定义了web服务器如何与服务器通信。还有另外的协议,例如规定了数据位如何编码为某种特定类型线缆上的电信号。

网络分层

通过网络发送数据是一项复杂操作,必须仔细协调网络的物理特性以及所发送数据的逻辑特征。为了对应用开发人员和最终用户隐藏这种复杂性,网络通信的不同方面被分成很多层,每一层表示为物理硬件(即线缆和电流)与所传输信息之间的不同抽象层次。每一层只需与紧挨的上下层进行对话,替换某一层的软件,只要层与层之间的接口不变,就不会影响到其他层。

(上图:网络中可能存在的协议栈)

TCP/IP模型网络传输具体步骤:
1.Web浏览器向Web服务器发送获取网页的请求。
2.浏览器只与本地客户机的传输层对话,传输层将请求分解为TCP片,向数据添加序列号和校验和。
3.传输层将请求传递给本地网际层。
4.网际层根据本地网络所需的大小将各TCP片分成IP数据报,并传递至主机网络层以便通过线缆传输数据。
5.主机网络层将数字数据编码为适合特定物理介质的模拟信号,将请求发送给线缆。
6.目标地址的远程系统的主机网络层可以由此读取请求。
7.远程系统的主机网络层将模拟信号解码为数字数据,将生成的IP数据包传递给网际层。
8.网络层简单的检查IP数据包是否被破坏,如果已经分片则重组数据,然后传递给服务器的传输层。
9.服务器的传输层检查是否所有数据都到达,对于丢失后者破坏的部分则要求重传。
10.一旦服务器的传输层接收到足够多的连续顺序数据报,就将其重组写入一个流。
11.服务器应用层上的web服务器读取这个流,服务器响应这个请求,在通过服务器的各个分发层发回响应。
12.通过Internet传输,并分发给web客户端。

对于Java网络程序,OSI模型过于复杂了,只考虑TCP/IP模型(4层)

主机网络层:由连接不同计算机的硬件(线缆,光纤电缆,无线电波,烟信号)组成的部分(有时称为物理组)。作为Java程序员并不需要考虑这一层。

网际层:也称为网络层(network layer)定义了数据位与字节如何组织为更大的分组,称为包。Java理解的网际协议就是(IP)。实际上是两个协议(IPv4,IPv6),IPv4使用32位地址,IPv6使用128位地址。IPv4数据报包含长度为20-60字节的首部,以及一个包含多达65515字节数据的有效载荷。

(IPv4数据报结构)
除了路由与寻址,网际层另一个作用就是支持不同类型的主机网络层相互对话,Internet路由器会完成WIFI和Ethernet和DSL,DSL与光纤往返等协议之间的转换,如果没有网际层类似的分层,计算机只能与同一类网络上的其他计算机对话。

传输层:传输层(transport layer)负责确保各包以发送顺序接收,并保证没有数据丢失和破坏,如果丢包传输层会请求发送方重传这个包。这一层主要有两个协议,TCP(Transition Control Protocol)传输控制协议,支持对丢失或者破坏的数据进行重传,并按照发送时的顺序进行传送。UDP(User Datagram Protocol)允许接收方选择被破坏的包,但不保证以正确的顺序发送。但是UDP通常比TCP传送的快,TCP比UDP更可靠。

应用层:下面三层主要定义数据如何从一台计算机传入另一台计算机,应用层确定数据传输后的操作。应用层协议如:用于Web的HTTP协议,用于电子邮件的SMTP,用于POP的IMAP等…

域名系统

计算机尽管可以轻松的处理数字,但人类对于记忆数字并不擅长,因此开发了域名系统(DNS),用于将人类易于记忆的主机名(如www.oreilly.com)转换为数字Internet地址(如208.201.239.101)。当Java程序访问网络时,他们需要同时处理地址和相应的主机名,这些方法由java.net.InetAddress类提供。

端口

因为每台计算机要同时做很多不同的事,电子邮件需要与FTP服务分开,而FTP又要与Web业务流分开,这是通过port端口实现的,每台有IP地址的计算机都有几千个逻辑端口(确切的说,每个传输层协议有65535个断口,每个端口可以分配给一个特定服务。1至1023的端口号保留给已知服务,在Linux上只有以root用户运行的程序才可以接受这些端口的数据。
(已知端口分配)

防火墙

防火墙负责检查传入或传出其网络接口的各个包,根据一组规则接收或拒绝这些包,过滤通常是基于网络地址和端口的。(例如,所有来自C类网络193.28.25.x的通信会被拒绝,因为你过去遭遇过这个网络的黑客攻击)

代理服务器

代理(Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。

代理服务器(英文:Proxy Server)。一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或者获得目标服务器的指定资源(如:文件)。在后一种情况中,代理服务器可能对目标服务器的资源下载至本地缓存,如果客户端所要获取的资源在代理服务器的缓存之中,则代理服务器并不会向目标服务器发送请求,而是直接返回缓存了的资源。一些代理协议允许代理服务器改变客户端的原始请求、目标服务器的原始响应,以满足代理协议的需要。代理服务器的选项和设置在计算机程序中,通常包括一个“防火墙”,允许用户输入代理地址,它会遮盖他们的网络活动,可以允许绕过互联网过滤实现网络访问。

客户/服务器模型

最流行的客户服务器的例子是Web服务器,Web服务器(Apache)相应Web客户端(Firefox)的请求。数据存储在Web服务器上,会发送给请求数据的客户端。不是所有应用简单的符合客户/服务器模型,例如,在网络游戏中,两个玩家大致相同的来回发送数据,这种连接称为对等连接(peer to peer),类似于电话系统。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_37423198/article/details/79378365