计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础。那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因。Java语言从一开始就是为了互联网而设计的,它为实现程序的相互通信提供了许多有用API,这类应用编程接口被称为套接字(Socket)。在开始学习Java Socket之前我们需要先来了解一下基本的术语和概念。

1.计算机网络

  计算机网络由一组通过通信信道(Communication channel)相互连接的机器组成。这些机器被称为:主机(hosts)路由器(routers):

  • 通信信道  ——  是将字节序列从一个主机传输到另一个主机的一种手段(有线、无线(WiFi)等方式)。
  • 主机  ——  作用是运行程序的计算机。
  • 路由器  ——  作用是将信息从一个通信信道传递或转发到另一个通信信道。 

TCP/IP网络通信流程图:

2.分组报文

  • 分组报文  ——  在网络环境中由程序创建和解释的字节序列。

3.协议

  协议相当于相互通信的一种约定,协议规定了分组报文的交换方式和它们包含意义。

  互联网所使用的协议是 TCP/IP 协议,TCP/IP 协议族主要包括:

  • IP 协议(Internet Protocol,互联网协议)
  • TCP 协议(Transmission Control Protocol,传输控制协议)
  • UDP 协议(User Datagram Protocol,用户数据报协议)

  IP协议

  • IP 协议  ——  是TCP/IP协议中唯一属于网络层的协议。将数据从一台主机传输到另一台主机。
  • IP 协议  ——  提供了一种数据服务:每组分组报文都有网络独立处理和分发,类似于信件或包裹通过邮政系统发送一样。
  • IP 协议  ——  是一个"尽力而为"(best-effort)的协议:它试图分发每一个分组报文,在网络传输过程中,偶尔也会发生丢失报文是报文顺序打乱,或者重复发送报文的情况。  

  在IP协议层之上是传输层(transport layer),它提供了两种可选的协议:TCP协议和UDP协议,两种协议都建立在IP层所提供的服务基础上,二者也被称为"端到端传输协议(end-to-end transport protocol)"根据应用程序协议(Application protocol)的不同需求,使用了不同的方式传输数据。二者都有一个共同的功能:寻址。TCP协议和UDP协议使用的地址叫做端口号(port number),是用来区分同一主机不同应用程序的。

   TCP 协议

  TCP协议能够检测和恢复IP层提供的主机到主机的信道中可能发生的报文丢失、重复以及其他错误。TCP协议是一种面向连接(connection oriented)协议:在使用它进行通信之前,两个应用程序之间首先要建立一个TCP连接,这涉及两台相互通信的主机的TCP部件间完成的握手消息(handshake message)的交换。

  UDP 协议

  UDP协议并不尝试对IP层产生的错误进行修复,它仅仅简单拓展了IP协议,"尽力而为"的数据服务,使它能够在应用程序之间工作,而不是在主机之间工作。使用UDP协议的应用程序需要对处理报文丢失、顺序混乱等问题做好准备。

4.关于地址

  在TCP/IP协议中,有两部分信息用来定位一个指定的程序:互联网地址(Internet address)和端口号(port number,范围1-65535)。前者由IP协议使用,后者由传输协议(TCP/UDP)对其进行解析。

  互联网地址有二进制数字组成,有两种形式:IPv4(32位)和IPv6(128位)。为了方便使用,两个版本的IP协议有不同的表示方法:

  •   IPv4地址被表示为一组为4个十进制数,每两个数之间用圆点隔开,这种表示方法叫做:点分形式(dotted-quad)。
  •   IPv6地址的16个字节由几组16进制的数字表示,这些十六进制数之间有分号隔开,每组数字分别代表了地址中的两个字节。

  回环地址

  回环地址(loopback address)是被分配的一个特殊的回环接口(loopback interface),回环接口是一种虚拟设备,它的功能只是简单的把发送给它的报文立即返回给发送者。如IPv4中的:127.0.0.1

5.域名系统(Domain Name System,DNS)和本地配置数据库

  DNS是一种分布式数据库,它将向www.baidu.com这样的域名映射到真实的互联网地址和其他信息上。DNS协议允许连接到互联网的主机通过TCP或者UDP协议从DNS数据库获取信息。

  本地配置数据库通常是一种与具体操作系统相关的机制,用来实现本地与互联网地址的映射。  

6.客户端和服务器

  客户端(client)和服务器(server)这两个术语分别代表了两种角色: 

  • 客户端是通信的发起者,而服务器程序则被动等待客户端发起通信,并对其作出响应。
  • 客户端服务器组成了应用程序

7.什么是Socket(套接字)

  Socket(套接字)是一种抽象层,应用程序通过它来发送和接受数据,就像应用程序打开一个文件句柄,将数据读写到稳定的存储器上一样。

  在TCP/IP协议族中的主要Socket类型为:

  • 流套接字(stream socket):传输层使用TCP协议,提供了一个可信赖的字节流服务
  • 数据报套接字(datagram socket):传输层使用UDP协议,提供了一个"尽力而为"的数据报服务,最长一次可以发送65500个字节的数据。

参考资料:《TCP/IP Socket in Java》

作者:晴天猪

出处:http://www.cnblogs.com/IPrograming

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

http://www.cnblogs.com/IPrograming/archive/2012/03/15/Java_Socket_1.html

转载于:https://www.cnblogs.com/daishuguang/p/3923601.html

【Java】Java Socket编程(1)基本的术语和概念相关推荐

  1. api有哪些 javasocket_基于java的socket编程及API解析

    一.socket通讯过程 1.socket与socket编程简介: socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台 ...

  2. Java 网络 socket 编程

    使用套接字实现基于 TCP 协议的服务器和客户机程序 依据 TCP 协议,在 C/S 架构的通讯过程中,客户端和服务器的 Socket 动作如下: 客户端: 1.用服务器的 IP 地址和端口号实例化 ...

  3. Java的Socket编程

    socket编程一般指的就是网络编程,常见的服务端和客户机都是必不可少的,今天小千就来给大家介绍一下socket编程中常见的概念问题. 一.常见传输协议 1.tcp协议TCP (Transmissio ...

  4. java中socket编程实例_Java中socket编程的实现过程(代码实例)

    本篇文章给大家带来的内容是关于socket编程的实现过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.socket 服务器搭建 实例化socket服务器,循环获取请求packa ...

  5. JAVA之Socket编程(技术总结)

    1.socket编程实例1--Socket客户端(字符串)->请求到Socket服务端->响应客户端: 代码如下: import java.io.BufferedReader; impor ...

  6. Java基于socket编程实现局域网内简单通信

    运行客户端程序将创建一个客户端套接字,并与指定的服务器建立连接,接收了服务端发来的消息后关闭连接.服务端启动后会循环接收客户端连接,在接收到连接后,向该客户端发送 "Hello World! ...

  7. Java NIO Socket编程实例

    各I/O模型优缺点 BIO通信模型 BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接 线程池I/O编程 假如所有可用 ...

  8. Java的Socket编程C/S小例子

    一. 前言: 计算机网络作业要求:根据运输层的TCP和UDP协议设计自己的协议实现一个小功能. 二. 功能: 客户端发送平台,账号,密码,服务端接收并暂存.可以实现查询和更新.主要三个类,gram(报 ...

  9. JAVA之socket编程服务器与客户端通信--实现简易聊天室

    本文将介绍TCP和UDP两种服务器与客户端之间的通信协议 1.首先介绍TCP和UDP分别是什么:TCP(Transfer Control Protocol) 是传输控制协议的缩写,被称 TCP / I ...

最新文章

  1. Java序列化的机制和原理
  2. LastIndexOf属性
  3. linux裁剪—定制自己所需要的linux
  4. (69)番外 —— 编写一个简易的反调试引擎
  5. 计算机控制刘世荣习题,谢谢你,曾经允许我不爱刘世荣①星期一的早晨,我紧张而又兴奋,因...
  6. sql优化常用的几种方法_MySQL常用30种SQL查询语句优化方法
  7. 【NOI2012】骑行川藏【拉格朗日乘数法】【二分套二分】
  8. python3 asyncio 爬虫_python3 asyncio异步新浪微博爬虫WeiboSpider
  9. PNP问题-位姿估计方法梳理(pose estimation)
  10. C++基础总结(4)-----指针
  11. CMU 11611 -NLP
  12. vue路由守卫及运用场景
  13. 华为服务器bios系统,华为服务器bios设置
  14. 970万,看美女是如何炼成巨贪的!
  15. Python将图片写到音频频谱
  16. Java1.5泛型指南中文版
  17. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)
  18. NCX SQL编程规范
  19. 沈师 数据库原理 PTA 选择题答案
  20. USB Type-C的基本原理

热门文章

  1. C语言3中方法判断32还是64位机
  2. 玩转Linux必备知识(二)
  3. scala中的隐式转换、隐式参数和隐式类
  4. 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
  5. return 与 exit()的区别--return退出本函数,exit()退出整个程序
  6. 深入理解ElasticSearch(八):索引管理
  7. delphi之模糊找图
  8. COBBLER无人值守安装-----已用真实服务器测试
  9. 《循序渐进学Spark》一1.6 使用Spark Shell开发运行Spark程序
  10. Fis3的前端工程化之路[三大特性篇之资源定位]