《Java网络编程》第一章:基本网络概念
网络(network)
是几乎可以实时相互发送和接受数据的计算机和其他设备的集合
- 网络中的每台机器称为节点(node),具有完备功能的计算机节点也成为主机(host)
- 每个网络节点都有地址(address)作为唯一标识,为字节序列
- 为包交换网络,将流经网络的数据分割为小块,每个包都包含有谁发出和将发往何处的信息。优点:可以在多条线缆上传出。可以进行校验
- 协议(protocol),包括地址格式,数据如何分包等
网络的分层
网络通信的不同层面被分解为多层,每一层只与其上下的层对话。解耦合
两个客户端之间的对话
传送端:应用层-》传输层-》网际层-》网络层
- 传输层将请求分解为TCP片,像数据添加序列号和校验和
- 网际层根据本地网络所需的大小将TCP片分成IP数据包
接收端:网络层-》网际层-》传输层-》应用层
- 传输层检查所有的数据是否到达,没到达的要求重传(这个请求向下通过服务器的网际层,再通过服务器主机网络层,回到客户端系统,然后再在客户端系统向上返回。这些过程对于应用层是完全透明的)
主机网络层(host-to-work layer)
定义了一个特定的网络接口(如网线)如何通过物理连接向本地网络或世界其他地方发送IP数据报
成为网络的物理层
网际层(Internet layer)
网络层协议定义了数据位和字节如何组织为更大的分组,称为包。定义了寻址机制。
在IPv4和IPv6中,数据按包在网际层传输,被称为数据报(datagram)。每个IPv4数据报包含一个长度为20-60字节的首部,以及65515字节数据的有效载荷(payload)
第二个作用是支持不同类型的主机网络层相互对话
传输层(transport layer)
原始数据报缺点:不能保证可靠传送(顺序,完整性)
传输层负责确保各包以发送的顺序接收,并保证没有数据丢失或损坏
IP网络会给每一个数据报添加一个附加首部,以实现传输层的功能。主要有两个协议。
- 传输控制协议(Transmission Control Protocol,TCP): 开销高,支持重传和按顺序传送。为可靠的(reliable)协议
- 用户数据报协议(User Datagram Protocol,UDP):开销低,允许接收方检测被破坏的包,不保证以正确的顺序传送。为不可靠的(unreliable)协议
应用层(application layer)
向用户传送数据,它下面三层的操作共同确定了一个数据如何从一个计算机传送到另一个计算机上,确定了数据传输后的操作。
IP,TCP与UDP
IP设计为允许任意两点之间有多个路由
开放的,与平台无关
将TCP置于IP之上才能保证顺序与重传
IP之上可以运行其他很多协议。最常使用的是ICMP,即国际控制消息协议(Internet Control Message Protocol),使用原始IP数据报在主机之间传递错误信息。
Java支持的协议只有TCP与UDP和建立在此之上的应用层协议
IP地址和域名
IPv4网络中的每台计算机都有一个4字节的数字标识。一般写为点分四段(dotted quad)格式,如199.1.32.90。当数据传送时,包的首部都会包括目的地址和源地址。
IPv6使用16个字节地址
有些计算机(特别是服务器)有固定的地址,其他计算机(局域网和无线连接上的客户端)可能每次启动时会收到不同的地址,通常由DHCP服务器提供。因此写代码时不要假定系统有固定的IP地址,要在程序启动时进行一次查询。每次需要时检查IP地址而不是缓存
端口
每个端口可以分给一个特定的服务
Internet
Internet是世界上最大的基于IP的网络,其他的网络称为internet
为确保Internet上不同网络的主机可以相互通信,需要遵守一些对纯粹内部internet不适用的规则。处理不同组织个人公司地址的分配
Internet地址分块
当公司或组织要建立一个基于IP的网络连接到Internet时,它们的ISP(Internet服务供应商)会分配给他们一个地址块。每个地址块有固定的前缀
网络地址转换
由于IP地址越来越稀缺,面对原始IP地址的需求越来越大,如今大多数网络都使用了网络地址转换(Network Address Translation,NAT)
基于NAT的网络中,大多数节点只有不可路由的本地地址,将本地网络连接到ISP的路由器会把这些本地地址转换为更小的一组可路由的地址
防火墙
位于Internet和本地网络之间的一些硬件和软件会检查所有进出的数据,以确保其合法性,这就称为防火墙。
可以完成网络地址转换
工作与传输层和网际层
代理服务器
起一个网络上的主机与外界联系的中间人的作用。
可以用于FTP服务和其它连接
工作于应用层,对应用层协议非常了解。可以检查通过代理服务器的包,确保其中包含适当类型的数据。
可以用来实现本地缓存。当请求Web服务器的文件时,代理服务器首先查看自己有没有,如果有直接给不请求服务器。如果没有再从服务器中获取并缓存
优势:
不知道内部机器的主机名和IP地址,更安全
问题在于无法应对所有协议
客户/服务器模型
服务器主要发送数据,客户端主要接收数据。在一些情况下,同一个程序会同时作为客户端和服务器。
对等(peer-to-peer)连接就是如此