计算机网络的分类:

局域网(LAN)

指在一个较小地理范围内的各种计算机网络设备互联在一起的通信网络,可以包括一个或多个子网,通常局限在几千米的范围之内。

城域网(MAN)

主要由城域范围内的各个局域网之间互连构成。

广域网(WAN)

由距离较远的局域网与城域网互联构成的通信网络,通常是除了计算机设备以外,还要涉及一些电信通信方式。

OSI分层模型:

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层

TCP/IP分层模型:

应用层                                          [数据段]

传输层                                           [数据包]

网络互连层                                     [数据帧]

物理层+数据链路层(主机到网络层)    [比特]

TCP/IP参考模型的层次结构:

TCP/IP的报文格式:

IP地址和端口号:

IP地址用来标志网络中的一个通信实体,这些通信实体可以是一台主机,一台打印机或者路由器的某一个端口。简单来说,IP 地址好比家的地址,家里的卧室餐厅等相当于不同的端口。

IP地址被分成A、B、C、D、E五类:

A类:10.0.0.0~10.255.255.255

B类:172.16.0.0~172.31.255.255

C类:192.168.0.0~192.168.255.255

在Internet上IP地址和主机名是一一对应的,通过域名解析可以由主机名得到机器的IP,由于机器名更接近自然语言,容易记忆,所以使用比IP地址广泛,但是对机器而言只有IP地址才是有效的标识符。

端口是一个16位的整数,用来表示数据交给那个通信实体处理。因此,端口是通信程序与外界交流的出入口,它是一综抽象的软件结构,包括一些数据结构和I/O缓冲区。端口号可以是0~65535,通常被分为三类:

公认端口:0~1023

注册端口:1024~49151

动态/私有端口:49152~65535

通常一台主机上总是有很多个进程需要网络资源进行网络通讯。网络通讯的对象准确的讲不是主机,而应该是主机中运行的进程。这时候光有主机名或IP地址来标识这么多个进程显然是不够的。端口号就是为了在一台主机上提供更多的网络资源而采取得一种手段,也是TCP层提供的一种机制。只有通过主机名或IP地址和端口号的组合才能唯一的确定网络通讯中的对象:进程。

TCP/IP协议:

Internet网络采用的是TCP/IP协议,在全球范围内实现不同硬件结构、不同操作系统、不同网络系统的互联。Internet网上存在的每台主机用为其分配的Internet地址代表自己,这个地址就是IP地址。到目前为止,IP地址用4字节也就是32位二进制表示,成为IPv4。为了便于使用,通常取每个字节的十进制数,并且每个字间用圆点隔开表示IP地址

传输控制协议/网间协议。

定义主机如何连入英特网及数据如何在他们之间传输的标准。

TCP握手协议:

服务端与客户端建立连接协议(三次握手)

客户端发送一个带SYN(synchronize 即握手信号)标志的TCP报文到服务器,这是三次握手中的报文一;

服务端回应客户端的,这是三次握手中的第二个报文,这个报文同时带ACK(Acknowledgement 中文译为”确认字符“。它的作用是确认发来的数据已经接受无误)标志,表示对刚才客户端SYN报文的回应;同时有标志SYN给客户端,询问客户端是否准备好进行数据通讯。

客户端此时会再次回应服务端一个ACK保温,这是报文段三。

完成三次握手,客户端与服务端开始传送数据。

连接终止协议(四次挥手)

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭,这原则是当一方完成他的数据发送任务后就能发送一个FIN来终止这个方向上的连接,收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据,首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

TCP客户端发送一个FIN,用来关掉客户端到服务器的数据传送(报文段4);

服务器收到这个FIN,它发挥一个ACK,确认序号为收到的序号加一(报文段5),和SYN一样,一个FIN将占用一个序号。

服务器关闭客户端的连接,发送一个FIN给客户端(报文6);

客户端发回ACK报文表示确认,并将确认序号设置为收到的序号加一(报文段7)。

连接终止过程中的四个状态:

FIN_WAIT_1:server 端主动要求关闭TCP连接,并且主动发送FIN后,等待cliect端回复ACK的状态,对于client来说,即等待接受FIN报文的状态。

FIN_WAIT_2:当client端回复 ACK报文后进入的状态。一般情况下,客户端一旦收到FIN报文就会立刻回复ACK,所以FIN_WAIT_1状态比较少见。

TIME_WAIT:主动关闭的一方在完成自身发起的关闭请求后(即断开连接),接收到被动一方的FIN后进入的状态。

CLOSE_WAIT:被动关闭方此时正等待上层应用发出关闭连接指令。

端口和套接字socket:

端口:一般而言,一台计算机只有单一的连到网络的物理连接,所有数据都通过此连接对内、外送达特定的计算机,这就是端口。网络程序设计中的端口(port)并非真实的物理存在,而是一个假想的连接装置。

端口被规定为0-65535之间的整数,HTTP服务一般使用80端口,FTP服务使用21端口。假如一台计算机提供了HTTP、FTP多种服务,那么客户机会通过不同点端口来确定连接到服务器的哪项服务上。

常见的一些协议和它们对应的服务端口号:

套接字:socket 通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。用于将应用程序和 端口连接起来。也是一个假想的连接装置,就像插插头的设备“插座”用于连接电器和电线一样。

在每个TCP、UDP数据段中都包含源端口和目标端口字段。有时,我们把一个IP地址和一个端口号合称为一个套接字(Socket),而一个套接字对(Socket pair)可以唯一地确定互连网络中每个TCP连接的双方(客户IP地址、客户端口号、服务器IP地址、服务器端口号)。

java将套接字抽象为类,只需创建 Socket类对象,即可使用套接字。

Socket 和 ServerSocket 类库位于java.net包中。ServerSocket用于服务器端,Socket建立网络连接时使用。在连接成功时,应用程序两端都会产生一个Socket 实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务端还是客户端而产生不同的级别,不管是Socket 还是 ServerSocket它们的工作都是通过SocketImp1 类及其子类完成的。

使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。 Server端和Client端都可以通过Send,Write等方法与对方通信。

对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:

(1) 创建Socket;

(2) 打开连接到Socket的输入/出流;

(3) 按照一定的协议对Socket进行读/写操作;

(4) 关闭Socket.

总结:

网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。

目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。

java服务端用到的javase的基础知识_JavaSE——网络编程基础知识相关推荐

  1. java服务端用到的javase的基础知识_javase基础篇知识归纳

    {"data":{"id":"8000-000000437045-0","name":"SEO专题页栏目分发组 ...

  2. Java基础知识回顾--网络编程基础

    OSI参考模型 TCP/IP参考模型应用层 表示层 应用层会话层传输层 传输层网络层 网络层 数据链路层 物理+数据链路层物理层 IP协议 最大的贡献就是给大家提供了独一无二的IP地址. A类地址 8 ...

  3. Flex通信-Java服务端通信实例

    Flex与Java通信的方式有很多种,比较常用的有以下方式: WebService:一种跨语言的在线服务,只要用特定语言写好并部署到服务器,其它语言就可以调用 HttpService:通过http请求 ...

  4. 聊一聊 Java 服务端中的乱象

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:阿里巴巴中间件 查尔斯·狄更斯在<双城记>中写道 ...

  5. 那些年,我们见过的 Java 服务端乱象

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 Photo by The Book Tutor @Youtube 文 | 陈昌毅 导读 查尔斯 ...

  6. MobileIMSDK怎样修改服务端核心jar包的源码并替换掉Java服务端的jar包

    场景 MobileIMSDK怎样将Java服务端运行起来以及打成jar包运行: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11 ...

  7. 人人都能掌握的Java服务端性能优化方案

    转载自 人人都能掌握的Java服务端性能优化方案 作为一个Java后端开发,我们写出的大部分代码都决定着用户的使用体验.如果我们的代码性能不好,那么用户在访问我们的网站时就要浪费一些时间等待服务器的响 ...

  8. 那些年,我们见过的 Java 服务端“问题”

    导读 明代著名的心学集大成者王阳明先生在<传习录>中有云: 道无精粗,人之所见有精粗.如这一间房,人初进来,只见一个大规模如此.处久,便柱壁之类,一一看得明白.再久,如柱上有些文藻,细细都 ...

  9. 那些年,我们见过的Java服务端乱象

    导读 查尔斯·狄更斯在<双城记>中写道:"这是一个最好的时代,也是一个最坏的时代."移动互联网的快速发展,出现了许多新机遇,很多创业者伺机而动:随着行业竞争加剧,互联网 ...

  10. QtJava笔记-Qt与Java进行SSL双向认证(Qt客户端,Java服务端)

    这里使用Java作为服务端,使用Qt作为客户端. 程序运行截图如下: 这里的证书Qt使用的p12,Java使用的jks,看以前的博文生成. 源码打包下载地址: https://github.com/f ...

最新文章

  1. Cocos Creator里localStorage的使用
  2. 你管这破玩意儿叫负载均衡?
  3. python操作redis--------------数据库增删改查
  4. GridView自动排序(原创)
  5. Vue访问百度音乐API实现播放时no-referrer-when-downgrade
  6. Spring注解开发-@Scope作用域注解
  7. 用DDA Convolution和Perlin Noise来模拟水粉画笔触
  8. 【移植Linux 3.4.2内核第二步】之修改系统分区
  9. 《天天数学》连载47:二月十六日
  10. iOS 中 常用的第三方库
  11. 基于springboot的多人聊天系统
  12. Github Page搜索工具更新 - 收藏,手气不错
  13. 线性代数:03 向量空间 -- 向量空间的基与维数,坐标,过渡矩阵
  14. DAC904硬件电路
  15. [HNOI2004]宠物收养所(简单理解,用set写的)
  16. 电路设计之--滤波电容选取
  17. 达人评测 i51240p和r55625u哪个好
  18. Improving description-based person-identification by multi-granularity image-text alignments-2019TIP
  19. 关键词推广-关键词推广软件
  20. 机考的考试能用计算机吗,基金从业考试机考怎么出题?考试题目都能做的完吗...

热门文章

  1. MySQL自定义函数用法详解-复合结构自定义变量/流程控制
  2. spring aop和事务同时开启带来的一些问题
  3. datatable插件实现分页功能
  4. 渐进式加载 - 基础讲解
  5. [Windwos Phone 8]多个按钮的共用事件
  6. 关于String内存分配的深入探讨
  7. Shiro(一)——Shiro概述
  8. [数据结构] 非旋Treap
  9. 互评成绩 c语言,1077 互评成绩计算 (C语言)
  10. rust里面的柴油桶有什么用_用了橡木桶的红酒就一定好吗?什么样的酒才适合橡木桶?...