网络类型:
计算机网络,按照不同的分类方式来划分,可以分为不同的类型。
按照网络的地理位置可分为:局域网(LAN),城域网(MAN),广域网(WAN)。目前局域网和广域网是网络的特点。局域网是组成其他两种类型网络的基础,城域网一般都加入了广域网。广域网典型的代表是 Internet。
按照服务方式可以分为:客户机 / 服务器网络(Client / Server),对等网(Peer-to-Peer)。
通信协议:
通信协议即网络中传递、管理信息的一些规范。如果人与人之间交流需要遵循特定的语言定义一样,计算机之间的通信也需要共同遵守一定的规则,这些规则就称为网络协议。网络协议的划分:
物理层:以太网 · 调制解调器 · 电力线通信(PLC) · SONET/SDH · G.709 · 光导纤维 · 同轴电缆 · 双绞线等。
数据链路层:Wi-Fi(IEEE 802.11) · WiMAX(IEEE 802.16) ·ATM · DTM · 令牌环 · 以太网 ·FDDI · 帧中继 · GPRS · EVDO ·HSPA · HDLC · PPP · L2TP ·PPTP · ISDN·STP 等。
网络层协议:IP (IPv4 · IPv6) · ICMP· ICMPv6·IGMP ·IS-IS · IPsec · ARP · RARP等。
传输层协议:TCP · UDP · TLS · DCCP · SCTP · RSVP · OSPF 等。
应用层协议:DHCP ·DNS · FTP · Gopher · HTTP· IMAP4 · IRC · NNTP · XMPP ·POP3 · SIP · SMTP ·SNMP · SSH ·TELNET · RPC · RTCP · RTP ·RTSP· SDP · SOAP · GTP · STUN · NTP· SSDP · BGP · RIP 等。
什么是 TCP/IP?
TCP/IP 是供已连接因特网的计算机进行通信的通信协议。
TCP/IP 指传输控制协议/网际协议 (Transmission Control Protocol / Internet Protocol)。
TCP/IP 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。
在 TCP/IP 内部
在 TCP/IP 中包含一系列用于处理数据通信的协议:
- TCP (传输控制协议) - 应用程序之间通信
- UDP (用户数据包协议) - 应用程序之间的简单通信
- IP (网际协议) - 计算机之间的通信
- ICMP (因特网消息控制协议) - 针对错误和状态
- DHCP (动态主机配置协议) - 针对动态寻址
TCP 使用固定的连接
TCP 用于应用程序之间的通信。
当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。
这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。
UDP 和 TCP 很相似,但是更简单,同时可靠性低于 TCP。
IP 是无连接的
IP 用于计算机之间的通信。
IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。这样,IP 就降低了对网络线路的需求。每条线可以同时满足许多不同的计算机之间的通信需要。
通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。
IP 负责将每个包路由至它的目的地。
IP 路由器
当一个 IP 包从一台计算机被发送,它会到达一个 IP 路由器。
IP 路由器负责将这个包路由至它的目的地,直接地或者通过其他的路由器。
在一个相同的通信中,一个包所经由的路径可能会和其他的包不同。而路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址。
TCP/IP
TCP/IP 意味着 TCP 和 IP 在一起协同工作。
TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。
IP 负责计算机之间的通信。
TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。
IP 负责将包发送至接受者。
TCP / IP 是 Internet 的基础协议,也是一种计算机数据打包和寻址的标准方法。如果访问 Internet,则必须在网络协议中添加 TCP / IP 协议。IP 协议只保证计算机能发送和接收数据,而 TCP 协议则提供一个可靠的、可流控的、全双工的信息流传输服务。虽然 TCP 和 IP 这两个协议的功能不尽相同,也可以分开单独使用。但只有两者的结合,才能保证 Internet 在 复杂的情况下正常运行。
Java 网络编程
Java 中有关网络方面的功能都定义在 java.net 包中:
InetAddress 类:地址是网络通信的基础,在 Java 中使用 InetAddress 类来封装 IP 地址和该地址的域名。InetAddress 类无构造方法,不能直接创建对象,但可以通过该类的静态方法创建一个 InetAddress 对象或者 InetAddress 数组。
URL 类:Java 将 URL 封装成 URL 类,可以通过 URL 对象记录下完整的 URL 信息。http://www.mhttp.com:8080/index.html 是一个合法的 URL 示例。一个完整的 URL 由协议名、主机名(IP)、端口号和文件路径组成。URL 类的构造方法都声明抛出异常 MalformedURLException,因此构造 URL 对象时,需要对此进行异常处理。
URLConnection 类:通过 URL 类的方法 openSteam(),只能从网络上读取数据,如果需要输出数据,此时就要用到 URLConnection 类。URLConnection 是一个抽象类,代表与 URL 指定的数据源的动态连接,提供比 URL 类更强的服务器交互控制,运行用 POST 或 PUT 或其他 HTTP 请求方法将数据送到服务器。
两种最常用的 HTTP 方法是:GET 和 POST。
HTTP(HyperText Transfer Protocol)是网络应用层的协议,建立在TCP/IP协议基础之上。HTTP使用可靠的TCP连接,默认端口为80,目前最新的版本为1.1。
HTTP 的工作方式是客户机与服务器之间的请求(Request)-应答(Response)协议,设计目的是保证客户机与服务器之间的通信。在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据
GET 方法
请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
/test/demo_form.asp?name1=value1&name2=value2
POST 方法
请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
比较 GET 与 POST
下面的表格比较了两种 HTTP 方法:GET 和 POST。
GET | POST | |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
对数据长度的限制 | 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 | 无限制。 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。 在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |