一、写在开头

大家好,Build哥回来啦!停更了大概2个月之久,之前有段时间去写小说去了,后来又因为公司活太多,牛马干的太投入,就拉下了博客的更新,国庆节期间,难得的闲下来,准备回归老本行啦。

大致的翻看了一下之前更新的内容,已经写到了Java的IO部分,作为网络传输的一大重点知识,IO至关重要,而为了更好的理解和使用IO,我们今天要延展的来聊一聊Java中的网络编程。其实,这句话说的不太严谨,网络编程并非Java独有,所有依赖Web端的程序语言,或者应用们都离不开网络编程。

二、网络编程的基础

ok,闲话少叙,咱们直入主题,来一起学习一下网络编程,在开始学习之前,我们应该了解一下我们日常生活中都离不开的互联网及周边产品(路由器,网址,手机,电脑)等。

2.1 计算机网络

电脑对于我们来说十分熟悉啦,在多台联网电脑之前,我们可以聊天,视频,邮件交流,也可以通过不同的媒介平台进行互通,所有在线的用户设备之间,像一张大网串联起来,互通有无,这就是计算机的网络!

如上图,是一张概括的网络拓扑简图,非常形象易懂的囊括了我们当下的互联网世界。其中,用户设备如手机,电脑这些用于访问网络资源,如看剧,刷新闻,而网络交换机则是让手机能上网的桥梁,用来连接局域网内的设备和路由器,而路由器呢,主要工作是实现不同网络之间的路由,可以联通互联网,而为了防止一些为经过授权的访问侵入设备,设备的网络中均设有一道防火墙,用于拦截未授权请求;而互联网呢,则是全球互通互相的一个信息资源网,服务器无需多谈,用于托管网络应用和数据的处理和存储站。

那么,看到这里我们有了这样一个疑问,全球不同国家和地区存在着不同的局域网,遵循着不同的网络协议,是怎么做到全球互通互联网的呢?伟大的先辈们早就考虑到这点啦,因此,最早制定规范的那帮人,就互联达成了全球性的协议规范,那就是TCP/IP协议,下面我们聊到协议时会说。

2.2 IP

对于IP来说,大家也很熟悉,我们在日常上网的过程中,所说的网址,其实主要就是这个IP(Internet Protocol),中文译作国际互联协议。它像一个身份证号一样,唯一的标识着网络中的一个接口,任何联入到互联网中的计算机都只要拥有一个IP地址。

目前IP分为IPv4和IPv6,因为v4版本采用32位地址,算起来越42亿个地址,目前已经用尽,所以推出了v6版本,采用128位地址,340万亿亿亿亿个地址,对,你没看错,2的128次方个地址就是这么多,这个数字是人类灭绝了都用不完的。

一个特殊的 IP 地址,称之为本机地址,它总是127.0.0.1


IPv4(如:101.302.88.22)

IPv6 (如:2001:0DA8:100A:0000:0000:1020:F2F3:1428)

我们通过ipconfig可以看到我们计算机的网络信息,我们的计算机除了本地的127.0.0.1之外,还有一个IP地址,如果多个网卡,还会有多个IP地址,那么不同计算机之前是如何通信的呢?

这里涉及“网络号”这个概念,网络号由IP和子网掩码计算得来,如果两个计算机之间的网络号相同,则说明两台计算机在同一个网络中,可以直接通信,如果不同,则不在同一个网络,需要通过路由器或者交换机进行间接通信,这就是网关。

2.3 域名

上面说网络上的地址多数指的是ip,很多人会奇怪,比如我们像登录百度时,输入的并非xxx.xxx.xxx.xxx格式的,而是www.baidu.com,而这段组合就是域名!我们通过域名解析服务器 DNS 负责把域名翻译成对应的 IP,客户端再根据 IP 地址访问服务器。

很明显,相比较一堆数字组合的IP地址来说,域名更容易被记住!我们通过nslookup命令,可以查看域名对应的ip地址。

当然,我们在上面说的本机ip地址 127.0.0.1 也有对应的本机域名:localhost

2.4 网络模型

对于多种设备公用互联网这件事,并非我们图1中几条线就可以搞定哒,其内部,底层设计十分复杂,为了能够在全球范围内达成一种公用的标准接口,很多组织都发布了
类似的标准规范,其中最著名,也是现在普遍认可的是--开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写:OSI;简称为OSI模型)是一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。

OSI模型分为七层,自下而上为 物理层(Physical Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表达层(Presentation Layer)、应用层(Application Layer)。

但在我们在互联网实际使用的是 TCP/IP 模型,并不是对应到 OSI 的 7 层模型,而是大致对应 OSI 的 5 层模型,也有人说是四层模型,这个看自己,无所谓,主要是要理解这个流程。

2.5 常用协议

在上图OSI模型中,我们可以看到在应用层、传输层、网络层、数据链路层都对应着很多的网络协议,我们可以将之统称位TCP/IP协议簇,我们接下来就简要的介绍一下其中几个重要的协议:

  1. IP协议(互联网协议):一种分组交换的协议,不保证可靠传输,负责将数据包从源主机路由到目标主机,是网络层的一个协议;
  2. TCP协议(传输控制协议):TCP协议是建立在IP的基础上的,是传输层的协议。IP协议负责传输数据,而TCP协议可以在建立了安全连接的基础上,控制数据传输,保证可靠性,并且支持双向通信,像HTTP,HTTPS都是建立在TCP协议之上的。
  3. UDP协议(数据报文协议):与TCP协议一样,都是传输层的协议,不同的是它是无连接协议,不保证可靠传输。在通信前不需要建立连接,因此它的传输效率比 TCP 高,而且 UDP 协议比 TCP 协议要简单得多。选择 UDP 协议时,传输的数据通常是能容忍丢失的,例如,一些语音视频通信的应用会选择 UDP 协议。

三、总结

今天就说这么多啦,主要介绍一下网络编程相关的基础知识,在后续的博文中针对网络编程所需要的内容,在进一步的整理与细化。

NIO实现聊天室之:一切都要从网络编程的基础开始聊起!的更多相关文章

  1. Java网络编程和NIO详解3:IO模型与Java网络编程模型

    Java网络编程和NIO详解3:IO模型与Java网络编程模型 基本概念说明 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32 ...

  2. 在线聊天室的实现(2)--基于Netty 4.x的Echo服务器实现

    前言: 就如前文所讲述的, 聊天室往往是最基本的网络编程的学习案例. 本文以WebSocket为底层协议, 实现一个简单的基于web客户端的Echo服务. 服务器采用Netty 4.x来实现, 源于其 ...

  3. 基于tcp和多线程的多人聊天室-C语言

    之前在学习关于网络tcp和多线程的编程,学了知识以后不用一下总绝对心虚,于是就编写了一个基于tcp和多线程的多人聊天室. 具体的实现过程: 服务器端:绑定socket对象->设置监听数-> ...

  4. IO、NIO实现简单聊天室,附带问题解析

      本篇文章主要使用IO和NIO的形式来实现一个简单的聊天室,并且说明IO方法存在的问题,而NIO又是如何解决的.   大概的框架为,先提供思路和大概框架图--代码--问题及解决方式,这样会容易看一点 ...

  5. 百行go代码构建p2p聊天室

    百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...

  6. 以太坊系列之十八: 百行go代码构建p2p聊天室

    百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...

  7. IM即时通讯:如何跳出传统思维来设计聊天室架构?

    因为视频直播业务的大规模扩张,聊天室这种功能在最近几年又火了起来.本篇文章将会重点挑选聊天室这个典型场景,和大家分享一下网易云信在实现这个功能时是如何做架构设计的. 相关推荐阅读几十万人同时在线的直播 ...

  8. 三种TCP协议聊天室实现

    一 概述 使用Java的IO实现聊天室 使用Java的NIO实现聊天室 使用Netty实现聊天室 二 IO聊天室 1 服务器 public class IOServer { public static ...

  9. Vue开发多人聊天室 复盘总结

    前言 在上个月初,接到一个需求,要开发一个 聊天通讯 模块 并且 集成到 项目中的多个 入口,实现业务数据的记录追踪. 接到需求后,还挺开心,这是我第一次 搞 通讯 类的需求,之前一直是 B 端 的业 ...

  10. Python实现网络图形化界面多人聊天室 - Windows

    Python实现网络图形化界面多人聊天室 - Windows 项目名称:网络多人聊天室图形界面版本 项目思路: server.py 服务端文件,主进程中,创建图形化界面,询问地址(主机名,端口),点击 ...

随机推荐

  1. centos7 最小化安装yum不能安装软件解决方案

    慕课网神思者老师课常资料带的布署工具中,自带的liunx 系统centos7 yum发现不能安装软件,比如docker   解决方案 首先我们安装好虚拟机启动系统centos7 尝试安装任何软件都会报 ...

  2. stream的优化:java封装的拆箱与装箱的弊端

    authors.stream() .map(author->author.getAge) .map(age->age+10)//Stream<Integer> .filter( ...

  3. WPF MVVM模式简介

    WPF是Windows Presentation Foundation的缩写,它是一种用于创建桌面应用程序的用户界面框架.WPF支持多种开发模式,其中一种叫做MVVM(Model-View-ViewM ...

  4. 3、SpringBoot2之配置文件

    3.1.环境搭建 3.1.1.在project创建新module 3.1.2.选择maven 3.1.3.设置module名称和路径 3.1.4.module初始状态 3.1.5.引入springbo ...

  5. 【Uni-App】其他配置笔记

    manifest.json manifest.json 文件是应用的配置文件,用于指定应用的名称.图标.权限等.HBuilderX 创建的工程此文件在根目录,CLI 创建的工程此文件在 src 目录. ...

  6. 【SpringSecurity】02 权限控制、自定义登陆、记住我

    [资源过滤 权限控制] 就之前的权限问题,例如一个user1登录成功去访问level1的资源当然没有问题 但是页面还呈现了其他权限的资源,比如level2 & level3 既然呈现给了use ...

  7. nvidia公司官方迁移学习套件 —— NVIDIA TAO Toolkit

    资料: https://blogs.nvidia.com/blog/what-is-transfer-learning/ 相关: https://developer.nvidia.com/tao-to ...

  8. 强化学习游戏仿真环境:torcs的安装——自动驾驶、赛车游戏环境

    Ubuntu系统下可以有两种安装方式: 1. 通过系统软件库进行安装,命令: sudo apt install torcs torcs-data 该种安装方式比较简单,容易成功,缺点就是必须要有sud ...

  9. [COCI2015-2016#1] RELATIVNOST 题解

    前言 题目链接:洛谷. 这道题有很多做法,但是模拟赛寄了,故记之. Update on 2024.7.23 修复了一处时间复杂度的笔误. 题意简述 给你两个长为 \(n\) 的序列 \(A\) 和 \ ...

  10. Ambiguous Mapping 的处理方法

    出现原因:两个不同的Controller 中出现相同映射路径 eg: AController:/v1/wdnmd/userList/list BController:/v1/wdnmd/userLis ...