Java Network Programming 笔记(1)

笔记

 
Java Network Programming 笔记

n5

一 网络基本概念
Chapter2 Basic Network Concepts

2.1 Networks
keywords: network, node, host, address, name, packet-switched, protocol

网络是可以或多或少实时地相互发送和接收数据的计算机和其他设备的集合。

网络上的每台机器被称作结点(node),大多数结点是计算机,但是打印机,路由器,桥,网关,哑终端和可口可乐机都可以是结点,但你通常只和其他计算机会话。
功能齐全的计算机结点被称作主机(host)。

每个网络结点有一个地址(address):唯一标识它的一系列字节。在不同的网络中地址分配方法同。以太网地址是附加在物理的以太网硬件上的。设备厂商要保证这些硬件的地址不重复。一台计算机的Internet地址通常由专门负责分配地址的组织分配。而这些组织可以分配的地址又是由该组织的ISP(Internet Service Provider)提供的。ISP从三个Internet地区性注册机构之一获得IP地址(Internet Protocol地址)。比如美洲和非洲的注册机构为ARIN(the American Registry for Internet Numbers)。地区性注册机构的地址又是由IANA(Internet Assigned Numbers Authority)分配的。

某些种类的网络中,结点可使用人类易辨认的名字。名字和地址的对应不是不变的。名字变了,地址可不变;地址变了,名字可不变。一个地址通常可有多个名字,一个名字也可以对应多个地址(虽然这样的情况很少)

所有现代计算机网络是包交换(packet-switched)网络。在网络上传输的数据被分成包,每个包都被独立处理。每个包都含有"谁发送了我"和"我要去哪儿"的信息。包交换的最大优点是可以同时进行很多交换,若干计算机可以共享一条电缆。

协议(protocol)是一组精确的规则集合,它定义了计算机之间如何通讯,包括:地址格式,数据如何分包等。公开发布的协议允许不同厂商的软件和设备相互通讯。比如web浏览器不用关心服务器是Unix工作站还是Windows box或者Mac机,因为服务器和浏览器都使用同样的平台无关的http协议交谈。

2.2 The Layers of a Network

标准TCP/IP四层模型:
Application Layer
Transport Layer (TCP,UDP)
InternetLayer (IP)
The Host-To-Network Layer (Ethernet,LocalTalk,FDDI...)

90%的Java网络编程处于应用层,只须同传输层对话。剩下的10%处于传输层,同应用层和网间网层对话。

应用层看起来是直接同其他host的应用层对话的,网络在两个应用层之间创建了一条逻辑链路。

2.2.1 The Host-to-Network Layer
(也称作link layer,data link layer, network-interface layer)
这一层定义了某个特定的网络接口,例如以太网卡,如何通过它的物理连接向本地网络或世界发送IP数据包。
物理层对Java是透明的。数据链路层对Java程序员没有直接影响。然而,你在应用层发送的数据可以优化以适应特定的数据链路层的本地包大小(the native packet size of a particular data link layer),这样性能上会有所提升。不过,不优化程序也正常运行。

2.2.2 The Internet Layer
在OSI模型中,Internet Layer对应于更一般化的名字network layer。一个network layer协议定义bits和bytes如何组织为packets,也定义了不同机器如何找到彼此的地址方案。Internet Protocol(IP)是应用最广泛的network layer协议,也是Java唯一理解的network layer协议。其他的network layer协议有NetWare网络上的IPX协议,Mac机上的AppleTalk协议,Windows上的NetBEUI协议。各种network layer协议对于底层是独立的,AppleTalk,IP,IPX和NetBEUI都可以被用于以太网,令牌环网或使用其他数据链路层协议的网络,而这些数据链路层协议本身也是可以运行在不同种类的物理层之上的。

internet layer传输的包称作datagrams,每个IP datagram包括一个20~60字节的头和最大65515字节的数据。(实际上多数IP datagram非常小)
IP数据包头的内容为:
4-bit版本号
4-bit头长度
1-byte type of service
2-byte datagram长度:包括头的长度
2-byte 标识号
3-bit flags
13-bit fragment offset
1-byte time-to-live(TTL)
1-byte protocol:TCP为6,UDP为17 (都是上一层传输层的协议)
2-byte 头校验和
4-byte 源地址
4-byte 目的地址

2.2.3 The Transport Layer
传输层负责保证所有的包正确的被收到,顺序正确,数据也正确。如果包丢失了,传输层要求发送者重发丢失的包。
传输层有两种协议,TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。TCP保证包不丢失,内容和顺序都正确;UDP只保证接受到的包正确,不管是否有包丢失了或到达的包顺序是否正确。

2.2.4 The Application Layer
应用层向用户传送数据。下面三层一起解决了数据如何从一个计算机到达另一个;而应用层决定数据到达后如何处理。Java网络编程主要是在应用层。常见的应用层协议有:HTTP,SMTP,POP,FTP等。你的程序可以定义自己的应用层协议。

Domain Names: 域名系统(DNS:Domain Name System)将主机名解析为数字的Internet地址。Java程序使用java.net.InetAddress类

时间: 2024-12-31 09:56:51

Java Network Programming 笔记(1)的相关文章

Java Network Programming 笔记(2)

笔记   Java Network Programming 笔记 n5 二 查找Internet地址Chapter 6 Looking up Internet Addresses java.net.InetAddress类是java对IP地址的封装,这个类被其他大多数网络类使用,包括Socket,ServerSocket,URL,DatagramSocket,DatagramPacket.该类中包含hostName和address,但不是public的. 1 获得InetAddress对象Ine

Java Network Programming 笔记(3)

笔记   Java Network Programming 笔记 n5 三 利用URL类获取数据chapter 7 Retrieving Data with URLs 1 建立URL对象当JVM不支持url的协议时抛出MalformedURLException (1)public URL(String url) throws MalformedURLException (2)public URL(String protocol, String hostname, String file) thr

Java Thread Programming 1.8.4 - Inter-thread Communication

Streaming Data Between Threads Using Pipes The java.io package provides many classes for writing and reading data to and from streams. Most of the time, the data is written to or read from a file or network connection. Instead of streaming data to a

Java Thread Programming 1.8.2 - Inter-thread Communication

  Missed Notification A missed notification occurs when threadB tries to notify threadA, but threadA is not yet waiting for the notification. In a multithreaded environment like Java, you don't have much control over which thread runs and for how lon

Java Thread Programming 1.8.3 - Inter-thread Communication

CubbyHole Example The class CubbyHole (see Listing 8.9) simulates a cubbyhole. A cubbyhole is a slot that can have only one item in it at a time. One thread puts an item into the slot and another thread takes it out. If a thread tries to put an item

Java Thread Programming 1.8.2 - Inter-thread Commu

Missed NotificationA missed notification occurs when threadB tries to notify threadA, but threadA is not yet waiting for the notification. In a multithreaded environment like Java, you don't have much control over which thread runs and for how long.

Java Thread Programming 1.8.3 - Inter-thread Commu

CubbyHole ExampleThe class CubbyHole (see Listing 8.9) simulates a cubbyhole. A cubbyhole is a slot that can have only one item in it at a time. One thread puts an item into the slot and another thread takes it out. If a thread tries to put an item i

深入Java虚拟机读书笔记[1:4]

第一章 Java体系结构 1. Java体系结构 the Java programming language the Java class file format the Java Application Programming Interface the Java Virtual Machine 2. Java语言优点或使用的技术: object-orientation multi-threading structured error-handling garbage collection d

Network Programming Using Libevent - (III)

這次要談的跟 Network Programming 沒有直接的關係. 在寫 Nonblocking Network Program 通常要處理 Buffering 的問題,但並不好寫,主要是因為 read() 或 recv() 不保證可以一次讀到一行的份量進來. 在 libevent 裡面提供相當不錯的 Buffer Library 可以用,完整的說明在 man event 的時候可以看到,最常用的應該就是以 evbuffer_add().evbuffer_readline() 這兩個 Fun