Java网络基础

Java 网络编程(一) 网络基础知识

网络基础知识

  网络编程的目的:直接或间接地通过网络协议与其他计算机进行通讯。

  网络编程中有两个主要的问题:

  1.如何准确地定位网络上一台或多台主机。

  2.找到主机后如何可靠高效地进行数据传输。

  目前较为流行的网络编程模型是客户端/服务器(C/S)结构

  即通信双方一方作为服务器等待客户提出请求并予以相应。客户则在需要服务时向服务器提出申请。

  服务器始终运行,监听网络端口,一旦有客户请求,就会启动一个服务线程来响应该客户,同时自己继续监听服务窗口,使后来的客户也能及时得到服务。

IP地址

  IP网络中每台主机都必须有一个唯一的IP地址,IP地址是一个逻辑地址。

  英特网上的IP地址具有全球唯一性。

  32位,四个字节,常用点分十进制的格式表示。

  例如:192.168.0.200

协议

  为进行网络中的数据交换(通信)而建立的规则、标准或约定。(=语义+语法+规则)。

  不同层具有各自不同的协议。

ISO/OSI七层参考模型

  网络体系结构解决异质性问题采用的是分层的方法——把复杂的网络互联问题划分为若干个较小的、单一的问题,在不同层上予以解决。

  OSI(Open System Interconnection)参考模型将网络的不同功能划分为7层:

  应用层:处理网络应用

  表示层:数据表示

  会话层:主机间通信

  传输层:端到端的连接

  网络层:寻址和最短路径

  数据链路层:介质访问(接入)

  物理层:二进制传输

  

  

  通信实体的对等层之间不允许直接通信,各层之间是严格的单向依赖,上层(Service user)使用下层提供的服务,下层(Service provider)向上层提供服务。

  对等层通信的实质对等层实体之间虚拟通信,下层向上层提供服务,实际通信在最底层完成。

OSI各层所使用的协议:

  应用层:Telnet、FTP、HTTP、DNS、SMTP、POP3

  传输层:TCP、UDP

  TCP:面向连接的可靠的传输协议。

  UDP:是无连接的,不可靠的传输协议。

  网络层:IP、ICMP、IGMP

端口

  在互联网上传输的数据都包含有用来识别目的地的IP地址和端口号。

  IP地址用来标识网络上的计算机,而端口号用来指明该计算机上的应用程序。

  端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。

  应用程序通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出。

  端口用一个整数型标识符来表示,即端口号。

  端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,端口通常称为协议端口(protocol port,简称端口。

  端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务。例如,http使用80端口。

数据封装

  一台计算机要发送数据到另一台计算机,数据首先必须打包,打包的过程称为封装

  封装就是在数据前面加上特定的协议头部。

  OSI参考模型中,对等层协议之间的交换的信息单元称为协议数据单元(PDU, Protocol Data Unit

  OSI参考模型中的每一层都要依靠下一层提供的服务。

  为了提供服务,下层把上层的PDU作为本层的数据封装,然后加入本层的头部(和尾部)。头部中含有完成数据传输所需的控制信息。

  这样,数据自上而下递交的过程实际上就是不断封装的过程。到达目的地后自下而上递交的过程就是不断拆封的过程。由此可知,在物理线路上传输的数据,其外面实际上被包封了多层“信封”。

转载于:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951826.html

时间: 2024-08-26 02:09:55

Java网络基础的相关文章

java网络基础------3------实现服务器

1.SeverSocket server = new SockeSever(8189);          //建立一个监听本机8189端口的服务器 2.Socket incoming = server.accept();                      //server.accept()是告诉服务器不停的等待,知道有socket接入,生成一个socket  s. 例子,服务器端代码: 1 package com.socket; 2 3 import java.io.IOExcepti

Java网络编程基础(六)— 基于TCP的NIO简单聊天系统

在Java网络编程基础(四)中提到了基于Socket的TCP/IP简单聊天系统实现了一个多客户端之间护法消息的简单聊天系统.其服务端采用了多线程来处理多个客户端的消息发送,并转发给目的用户.但是由于它是基于Socket的,因此是阻塞的. 本节我们将通过SocketChannel和ServerSocketChannel来实现同样的功能. 1.客户端输入消息的格式 username:msg    username表示要发送的的用户名,msg为发送内容,以冒号分割 2.实现思路 实现思路与Java网络

Java网络编程一:基础知识详解

网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层   ------------     IP(网络之间的互联协议) 传输层   ------------     TCP(传输控制协议).UDP(用户数据报协议) 应用层   ------------     Telnet(Internet远程登录服务的标准协议和主要方式).FTP(文本传输协议).HTTP(超文本传送协议) 3

Java网络编程基础【转】

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

java 网络编程(三)---TCP的基础级示例

下面是TCP java网络编程的基础示例: tcp传输:客户端建立过程的思路:1.创建TCP客户端的Socket服务,使用的是socket对象,建议在创建的过程中,就明确了目的地和要连接的主机2.如果连接建立成功,说明数据传输通道已经建立,该通道就是Socket的I/O流,是底层建立好的,既然是流,就说明有输入流,就有输出流,要换取就找socket获取相关的流即可,   getInputStream()和getOutputStream()的字节流.3.使用输出流,将数据输出:使用输入流,把数据输

Java Socket通讯---网络基础

java socket 通讯 参考慕课网:http://www.imooc.com/learn/161 一.网络基础知识 1.1 通讯示意图 1.2 TCP/IP协议 TCP/IP是世界上应用最为广泛的协议 是以TCP/IP为基础的不同层次上多个协议的集合 也称TCP/IP协议簇 或 TCP/IP协议栈 TCP:Transmission Control Protocol, 传输控制协议 IP:Internet Protocol,互联网协议 1.3 TCP/IP模型 1.4 IP地址 为实现网络中

Java网络编程学习A轮_01_目标与基础复习

A. A轮目标 复习网络编程基础知识,重点学习下TCP三次握手四次挥手,以及可能引发的异常情况. 回顾 Socket 编程,好多年没写(chao)过相关代码了. 重学 NIO,以前学的基本忘光了,毕竟从来没在项目中用过. 学习 Netty,了解基本用法,写一个简单项目练手. 扫读 Netty 核心源码,了解其线程模型,重点学习 Netty 如何使用 NIO. 搜罗面试题,查漏补缺. B. 基础知识 参考资料:<Java网络编程 第四版> 网际层(internet layer): 定义了数据位和

Java网络编程基础(二)-- 基于TCP/IP的Socket编程

本节讲点: 客户端套接字:Socket:Socket的创建和使用方法,以及Socket选项和异常. 服务端套接字:ServerSocket:SeverSocket的创建和使用方法,以及ServerSocket选项 简单的Client/Server对话程序 支持多客户端的Client/Server服务响应程序 在学习JDK的网络编程之前先要了解一下网络基础知识和网络协议. TCP(传输控制协议)一种基于连接的通信协议.可靠传输 UDP(用户数据包协议)不稳定连接的通信协议 TCP和UDP的端口如下

【转】JAVA网络编程基础

转来自己学习用 转自http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电