基本的网络概念
网络四层模型
主机网络层
也称链路层,数据链路层,或网络接口层.主机网络层定义了一个特定的网络接口如以太网卡或者Wifi天线,通过物理连接向本地网络或者世界其他地方发送IP数据报.Java程序员无需关心物理层,除非你关心主机的性能.
网际层
网际层协议定义了数据位和字节如何组织为更大的分组,成为包,还定义了寻址机制,不同计算机按照这个寻址机制查找对方.网际协议(IP)是世界上使用最广泛的网络层协议,也是Java唯一理解的网际层协议.网际层协议分为两种IPv4和IPv6,IPv4使用32为地址.IPv6使用128位地址.在IPv4和IPv6中,数据包在网际层上传输,这些包称为数据报.每个IPv4数据报包含一个长度为20-60的首部,以及一个包含多达65515字节数据的有效载荷.实际上大多数IPv4数据报都小得多,从几十个字节到8k字节不等.IPv6数据报包含一个更大的首部,数据可多大4G字节.除了路由和寻址,网际层的第二个作用是支持不同类型的主机网络层互相对话.Internet路由器会完成WiFi和Ethernet,Ethernet和DSL等协议之间的转换.如果没有网际层,则每个计算机只能与同一类网络上的其他计算机对话.网际层负责使用同构协议将异构网络互相连接.
传输层
传输层主要有两个协议,TCP和UDP.TCP协议是一个开销很高的协议,支持对丢失或破坏的数据进行重传,并按照发送时的顺序进行传送.UDP协议允许接收方检测被破坏的包,但不保证这些包以正常的顺序传送后者有些包根本未传送.UDP通常比TCP块,TCP是可靠的协议,UDP是不可靠的协议.
应用层
向用户传送数据的层称为应用层.应用层的下面三层共同定义了数据如何从一台计算机传输到另一台计算机.应用层确定了数据传输后的操作.例如应用层协议HTTP,可以确保Web浏览器将图像显示为图片,而不是一串数字.除了Web应用的HTTP协议还有用于电子邮件的SMTP,POP,IMAP;用于传输文件的FTP,FSP,TFTP.用于文件访问的NFS,用于文件共享的Gnutella和BitTorrent.此外你的程序还可以定义自己的应用层协议.
IP
IP(网际层协议)是冷战时期由军方自主开发的,所以最后包含了大量军方关心的特征.IP设计为允许任意两点之间由很多个路由,可以绕过那些被破坏的路由器从为破坏的路由实现数据的传输.由于两点之间存在多个路由,并且两点间最短路径可能由于网络业务流量或者其他因素而随着时间改变,素以构成某个特定数据流的包可能不会采用相同的路由.另外,即使数据报全部到达,也可能不会以发送的顺序到达.
TCP
由于两台主机间存在多个路由,数据包在传输中可能不会按照发送顺序到达,或者单个包丢失.所以将TCP位于IP之上(传输层位于网际层之上),使连接的两端能够确认接收到的IP包,以及请求重传丢失或被破坏的包,TCP允许接收端的包按照发送时的顺序重新组合在一起.
UDP
UDP同样位于IP之上,如果数据的顺序不是特别重要,而且单个包的丢失不会完全破坏数据流,那么有时使用UDP发送数据报也可以.UDP不要求数据报的顺序甚至不要求是否完整.一般会在应用层对UDP的数据流进行纠错解决数据丢失问题.
IP地址
IPv4
IPv4网络中的每台计算机由4个字节的数字标识,一般写为点分四段格式.如199.1.32.90这四个数中,每个数都是无符号字节,范围从0-255.IPv4网络中的每台计算机都有唯一的4字节地址.当数据通过网络传输时,包的首部会包括要发往机器的地址(目标地址)和发送这个包的机器地址(源地址).沿路的路由器通过检查目的地址来选择发送数据包的最佳路由.包括源地址是为了让接收方知道要想谁回复.可能IP地址有40亿多一点,无法做到地球上每人一个地址,更无法做到每台计算机一个地址.
IPv6
IPv4地址即将用完,现在正在向IPv6缓慢的过度,IPv6地址使用16字节地址,这样就能有足够的IP地址来标识每个人,每台计算机.IPv6地址通常写为冒号分隔的8个分区,每个分区是4个十六进制数字.如FEDC:BA98:7643:3210:FEDC:BA98:7654:3210.前导的0可以省略,两个冒号表示多个0区块,但每个地址中最多出现一次两个冒号.例如FEDC:0000:0000:0000:00DC:0000:7076:0010可以写成FEDC::DC:0:7076:10
域名(DNS)
虽然计算机可以轻松的处理数字,但人类对于记忆数字却不在行.因此,开发了域名系统(Domain Name System,DNS)用来将人类易于记忆的主机名如www.baidu.com转换为数字地址如208.201.234.110.当Java程序访问网络时,需要同时处理数字地址和相应的主机名.这些方法由java.net.InetAddress类提供.
有些计算机尤其是服务器有固定地址,其他计算机特别是局域网和无线连接上的客户端可能每次启动时都是不同的地址,这通常由DHCP服务器提供.IP地址可能随着时间而改变,所以写代码时不要假定系统有相同的IP地址.
有些地址区块和模式很特殊.以10./172.17./172.168./开头的所有IPv4地址都未分配.这些地址可以在内部使用,但是使用这些地址的主机不允许加入全球Internet,以127开头的IPv4地址最常见的是127.0.0.1总表示本地回送地址.也就是说,这些地址总指向本地计算机,而不论你在哪台计算机上允许.这个地址的主机名通常是localhost.在IPv6中,回送地址为0:0:0:0:0:0:0:1.地址0.0.0.0总指示起始主机,但只作为源地址,而不能作为目标地址.
4个字节都是用相同数字的IPv4地址如255.255.255.255是广播地址.发送到这个地址的包将由本地网络上的所有节点接受,但是不能超越这个本地网络.如一个客户端启动时它会向255.255.255.255发送一个特定的消息,查找本地DHCP服务器,这个网络上的所有节点都会收到这个包,不过只有DHCP服务器会做出相应.具体的DHCP服务器会向这台笔记本发送本地网络配置的有关信息,包括这台笔记本在余下的会话中要使用的IP地址以及用来解析主机名的DNS服务器地址.
端口
现代计算机同时需要运行很多程序,电子邮件需要与FTP请求分开,FTP请求又要与Web业务流分开.这是通过端口实现的,每台有IP地址的计算机都有几千个逻辑端口确切来说有65535个端口.每个端口可以分配一个特定的服务,例如Web的底层协议HTTP一般使用端口80,我们说Web服务器在端口80监听入站链接.当有数据发送到IP机器上时,接收方检查各个包,将数据发送给监听这个端口的程序.各种通讯业务流就是这样区分的.
Internet
Internet是世界上最大的基于IP的网络,它是多个不同国家的计算机使用IP互相对话的无组织的集合.Internet上每台计算机至少有一个标识此计算机的IP.大多数还有至少一个主机名映射到这个IP地址上.
Internet不是唯一的基于IP的网络,但却是最大的一个,其他的IP网络称为internet(首字母i小写)例如没有连接Internet的高安全性内部网,除非在网络物理隔离的高安全性环境中工作,否则你使用的internet很可能是Internet.
Internet地址分块
如果每个人都随心所欲的挑选Internet地址,造成有相同地址的不同的计算机出现Internet上.为了避免这个问题,区域Internet注册机构会为Internet服务提供商(ISP)分配IPv4地址块.党有公司或组织要建立一个基于IP的网络连接到Internet时,它们的ISP会给他们分配一个地址块,每个地址快有固定的前缀.例如,如果前缀是216.254.84那么本地网络可以使用216.254.84.0到216.254.84.255的地址.
网络地址转换
IP地址越来越稀缺,而对于原始IP的需求越来越大,如今大多数网络都是用了网络地址转换NAT.基于NAT的网络中,大多数节点有不可路由的本地地址,这些地址可能是10.x.x.x,172.16.x.x,192.168.x.x.将本地网络连接到ISP的路由器会把这些本地地址转换为更小的一组可路由的地址.
防火墙
位于Internet和本地网络之间的一些硬件和软件会检查所有进出的数据,以保证其合法性,这就称为防火墙,防火墙负责检查传入或传出其网络接口的各个包,根据一组规则接受或拒绝这些包.过滤通常基于网络地址和端口.
代理服务器
代理服务器与防护墙有关,如果说防火墙会阻止一个网络上的主机与外界建立连接,那代理服务器就起到中间人的作用.防火墙一般工作与传输层或网际层,而代理服务器通常工作于应用层.
客户/服务器模型