Java网络编程-基本网络概念

《Java网络编程》读书笔记,第一章——基本网络概念。

网络

  1. 目前流行的网络传输数据的物理媒介有无线电波、光钎电缆等,但是,从理论上讲:数据甚至可以通过碳驱动的计算机发送烟信号来相互传输(这种网络的响应时间(和对环境的影响)可能很差)
  2. 字节序有:big endian、little endian
  3. 现代计算机网络都是包交换(即分组交换)网络:流经网络的数据分割成小块,成为包(packet,也称分组),每个包都单独加以处理。其优点:①线路复用②分包校验,检测包中数据的完整性

网际层

  1. IPv4 使用 32 位地址,IPv6 使用 128 位地址

IP, TCP, UDP

  1. Java 不支持 ICMP,也不允许发送原始 IP 数据报(而只允许发送 TCP 片或 UDP 数据报)。Java 支持的协议只有 TCP 和 UDP,以及建立在 TCP 和 UDP 之上的应用层协议。所有其他传输层、网际层和更底层的协议,如 ICMP、IGMP、ARP、RARP、RSVP 和其他协议在 Java 程序中只能通过链接到原生代码来实现。
  2. 以 10., 172.16., 172.31. 和 192.168. 开头的所有 IPv4 地址都未分配,这些地址可以在内部网络中使用。
  3. 4 字节都使用相同数字的 IPv4 地址(如 255.255.255.255)是一个广播地址

两个好玩一点的协议

echo、discard 这些无聊的协议就不说了。。。

  1. whois,端口号:43,基于 TCP 协议,用于 Internet 网络管理的简单目录服务
  2. finger,端口号:79,基于 TCP 协议,返回本地系统中用户(或多个用户)有关信息的服务

子网的一些简单概念

  1. 一种表示方法:一个子网的前缀是 216.254.85,那么本地网络可以使用从 216.254.85.0 到 216.254.85.255 的地址,固定了前 24 位,所以写作 216.254.85.0/24。不过,这个子网中最低地址用于标识网络本身,最高地址是这个网络的一个广播地址,所以比你预想的要少两个地址。

网络地址转换

网络地址转换,即 Network Address Translation,缩写为 NAT,协议文档为 RFC 1632,可以让一个子网中的多个主机公用一个公网 IP 地址也可以自由上网的牛逼协议,有空了可以看看。。。

防火墙和代理服务器

防火墙一般工作于传输层或网际层,而代理服务器通常工作于应用层。
一个值得注意的例外是 SOCKS 代理服务器,它工作于传输层,可以代理所有 TCP 和 UDP 连接,而不用考虑应用层协议。
SOCKS:防火墙安全会话转换协议,protocol for sessions traversal across firewall securely,工作在会话层,RFC 1928
gopher:RFC 1436,是 Internet 上一个非常有名的信息查找系统,在 www 出现后它就 GG 了

Internet 标准

Internet 标准由两个组织制定:

  1. IETF(Internet Engineering Task Force,Internet 工程任务组),一个不太正式的民间团体,向所有感兴趣参与的团队开放。制定的标准有:TCP/IP、MIME 和 SMTP 等
  2. W3C(World Wide Web Consortium,国际互联网协会),由厂商组成,由缴纳会费的成员公司控制,明确拒绝个人参与。制定的标准有:HTTP、HTML 和 XML 等。W3C 的成员每年的会费为 50 000 美元,每项标准最终由一个人批准或否决,那就是 W3C 的霸道总裁同时也是有万维网之父之称的 Tim Berners-Lee。

记录几个自己将要学习的协议

  1. RFC 792:ICMP,Internet 控制消息协议,最常见的用法是 ping 和 traceroute
  2. RFC 822:电子邮件消息格式,ASCII 文本邮件的基本语法(后面还有 MIME 来扩展这个格式,以支持二进制语法)
  3. RFC 1288:Finger 协议,应用层协议,请求远程网站上一个用户的信息,可能有安全风险
  4. RFC 1945:HTTP 1.0
  5. RFC 2616:HTTP 1.1
  6. RFC 2045,2046,2047:MIME,多用途 Internet 邮件扩展