1.2 IP地址,域名,端口
作为Java程序员,IP的内部工作原理我们不必深究,但是我们必须要了解IP的寻址机制.
IPv4
在IPv4网络中,每台计算机都由一个4字节(32位)的数字标识.一般写为用点分为四段(dotted quad)的格式,每一段一个字节,数字范围从0~255,例如199.1.32.90
.IPv4网络中每台计算机都有唯一的4字节地址.
当数据通过网络传输时,包的首部会包括要发往的目的地址和发送这个包的源地址.包传输中经过的路由器通过检查目的地址来选择发送数据包的最佳路由,包的源地址告诉接收方要向谁回复.
IPv6
因为IPv4地址的数量无法满足使用需求,所以出现了使用16字节(128位)的IPv6地址.
IPv6地址通常写为冒号分为8段的格式,每一段是4个十六进制数字,例如FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
.前导的0不需要写,多个全是0的段可以省略不写,用两个连续的冒号表示,但是每个地址中最多允许出现一次这样的写法,例如,FEDC:0000:0000:0000:00DC:0000:7076:0010
可以缩写成FEDC::DC0:7060:10
.有时在IPv4和IPv6的混合网络中,IPv6地址的最后4个字节(32位),即最后两个区段,会写成IPv4格式,例如:FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
可以写成FEDC:BA98:7654:3210:FEDC:BA98:118.84.50.16
.
在Java 1.4之前只支持IPv4.
特殊地址
- 以
10.
,172.16.
,172.31.
和192.168.
开头的所有ipv4地址都未分配,这些地址只可以在内部网使用,使用这些地址的主机是不允许加入国际互联网的. - 以
127.
开头的IPv4地址总表示本地回送地址(local loopback address),也就是说,这些地址总是指向本地计算机,其主机名通常是localhost
.在IPv6中,回送地址为0:0:0:0:0:0:0:1
(也就是::1
). - 4字节都是用相同数字的IPv4地址,比如
255.255.255.255
,是一个广播地址(IPv6取消的广播地址),发送这个地址的包将由本地网络上的所有节点接收,但不能超越这个本地网络.
有些计算机有固定的地址(尤其是服务器),但是有些可能每次启动都会收到由DHCP(Dynamic Host Configuration Protocol)服务器分配的不同的地址(特别是局域网和无线连接上的设备).例如,一台笔记本电脑启动时,它会向255.255.255.255
发送一个特定的消息,查找本地DHCP服务器.这个网络上的所有节点都会接收到这个包,不过只有DHCP服务器作出响应,它会向这台笔记本电脑发送本地网络配置的有关信息,包括这台笔记本电脑在余下的会话中要使用的IP地址以及用来解析主机名的DNS服务器地址.
所以,写代码时,不要假定系统有相同的IP地址,例如,当保存应用程序状态时不要保存本地IP地址,而是再次启动时重新去查询地址.除此之外,动态分配和手工分配的地址之间的区别对Java程序没有影响.
域名
域名系统(Domain Name System,DNS)用来将人们更容易记住的主机名(比如:</b>http://www.jianshu.com</b>)转换为难以记住的数字地址.当Java程序访问网络时,需要同时处理数字地址和相应的主机名.
端口
端口(port)与设备的IP地址以及通讯采用的协议类型有关,是每台接入网络中的设备进行网络通讯时发起以及接收会话的最终点.
通过前面的内容我们已经知道,每次网络通讯,消息通过网际层的IP协议明确与哪一台设备进行通讯,在传输层明确是采用TCP还是UDP协议传输消息,到了具体的设备上,比如我们的计算机,还须要明确网络传输过来的信息要交给哪一个程序来处理,这就是端口的作用.在传输层,不论是TCP还是UDP,都会在头部给消息加上一个端口号,当接收设备接收到消息后,就根据端口号把消息交给监听这个端口号的程序来处理,从而能实现通信业物流的区分.
端口号用一个16位数字(0-65535)表示,0到1023的端口号是系统保留的端口号.在Linux系统只有root用户运行的程序才可以接收这些端口的数据,但是所有程序都可以向这些端口发送数据,由于Android系统是基于Linux的,所以也遵循这条准则.一些常用系统端口分配如下:
端口 | 协议 |
---|---|
21 | File Transfer Protocol (FTP) |
22 | Secure Shell (SSH) |
23 | Telnet remote login service |
25 | Simple Mail Transfer Protocol (SMTP) |
53 | Domain Name System (DNS) service |
80 | Hypertext Transfer Protocol (HTTP) used in the World Wide Web |
110 | Post Office Protocol (POP3) |
119 | Network News Transfer Protocol (NNTP) |
123 | Network Time Protocol (NTP) |
143 | Internet Message Access Protocol (IMAP) |
161 | Simple Network Management Protocol (SNMP) |
194 | Internet Relay Chat (IRC) |
443 | HTTP Secure (HTTPS) |