网络编程java_网络编程基础
在学习Java网络编程之前,我们先来了解什么是计算机网络。
计算机网络是指两台或更多的计算机组成的网络,在同一个网络中,任意两台计算机都可以直接通信,因为所有计算机都需要遵循同一种网络协议。
那什么是互联网呢?互联网是网络的网络(internet),即把很多计算机网络连接起来,形成一个全球统一的互联网。
对某个特定的计算机网络来说,它可能使用网络协议ABC,而另一个计算机网络可能使用网络协议XYZ。如果计算机网络各自的通讯协议不统一,就没法把不同的网络连接起来形成互联网。因此,为了把计算机网络接入互联网,就必须使用TCP/IP协议。
TCP/IP协议泛指互联网协议,其中最重要的两个协议是TCP协议和IP协议。只有使用TCP/IP协议的计算机才能够联入互联网,使用其他网络协议(例如NetBIOS、AppleTalk协议等)是无法联入互联网的。
IP地址
在互联网中,一个IP地址用于唯一标识一个网络接口(Network Interface)。一台联入互联网的计算机肯定有一个IP地址,但也可能有多个IP地址。
IP地址分为IPv4和IPv6两种。IPv4采用32位地址,类似101.202.99.12,而IPv6采用128位地址,类似2001:0DA8:100A:0000:0000:1020:F2F3:1428。IPv4地址总共有232个(大约42亿),而IPv6地址则总共有2128个(大约340万亿亿亿亿),IPv4的地址目前已耗尽,而IPv6的地址是根本用不完的。
IP地址又分为公网IP地址和内网IP地址。公网IP地址可以直接被访问,内网IP地址只能在内网访问。内网IP地址类似于:
192.168.x.x
10.x.x.x
有一个特殊的IP地址,称之为本机地址,它总是127.0.0.1。
IPv4地址实际上是一个32位整数。例如:
106717964 = 0x65ca630c
= 65 ca 63 0c
= 101.202.99.12
如果一台计算机只有一个网卡,并且接入了网络,那么,它有一个本机地址127.0.0.1,还有一个IP地址,例如101.202.99.12,可以通过这个IP地址接入网络。
如果一台计算机有两块网卡,那么除了本机地址,它可以有两个IP地址,可以分别接入两个网络。通常连接两个网络的设备是路由器或者交换机,它至少有两个IP地址,分别接入不同的网络,让网络之间连接起来。
如果两台计算机位于同一个网络,那么他们之间可以直接通信,因为他们的IP地址前段是相同的,也就是网络号是相同的。网络号是IP地址通过子网掩码过滤后得到的。例如:
某台计算机的IP是101.202.99.2,子网掩码是255.255.255.0,那么计算该计算机的网络号是:
IP = 101.202.99.2
Mask = 255.255.255.0
Network = IP & Mask = 101.202.99.0
每台计算机都需要正确配置IP地址和子网掩码,根据这两个就可以计算网络号,如果两台计算机计算出的网络号相同,说明两台计算机在同一个网络,可以直接通信。如果两台计算机计算出的网络号不同,那么两台计算机不在同一个网络,不能直接通信,它们之间必须通过路由器或者交换机这样的网络设备间接通信,我们把这种设备称为网关。
网关的作用就是连接多个网络,负责把来自一个网络的数据包发到另一个网络,这个过程叫路由。
所以,一台计算机的一个网卡会有3个关键配置:
IP地址,例如:10.0.2.15
子网掩码,例如:255.255.255.0
网关的IP地址,例如:10.0.2.2
域名
因为直接记忆IP地址非常困难,所以我们通常使用域名访问某个特定的服务。域名解析服务器DNS负责把域名翻译成对应的IP,客户端再根据IP地址访问服务器。
用nslookup可以查看域名对应的IP地址:
$ nslookup www.liaoxuefeng.com
Server: xxx.xxx.xxx.xxx
Address: xxx.xxx.xxx.xxx#53
Non-authoritative answer:
Name: www.liaoxuefeng.com
Address: 47.98.33.223
有一个特殊的本机域名localhost,它对应的IP地址总是本机地址127.0.0.1。
网络模型
由于计算机网络从底层的传输到高层的软件设计十分复杂,要合理地设计计算机网络模型,必须采用分层模型,每一层负责处理自己的操作。OSI(Open System Interconnect)网络模型是ISO组织定义的一个计算机互联的标准模型,注意它只是一个定义,目的是为了简化网络各层的操作,提供标准接口便于实现和维护。这个模型从上到下依次是:
应用层,提供应用程序之间的通信;
表示层:处理数据格式,加解密等等;
会话层:负责建立和维护会话;
传输层:负责提供端到端的可靠传输;
网络层:负责根据目标地址选择路由来传输数据;
链路层和物理层负责把数据进行分片并且真正通过物理网络传输,例如,无线网、光纤等。
互联网实际使用的TCP/IP模型并不是对应到OSI的7层模型,而是大致对应OSI的5层模型:
OSI
TCP/IP
应用层
应用层
表示层
会话层
传输层
传输层
网络层
IP层
链路层
网络接口层
物理层
常用协议
IP协议是一个分组交换,它不保证可靠传输。而TCP协议是传输控制协议,它是面向连接的协议,支持可靠传输和双向通信。TCP协议是建立在IP协议之上的,简单地说,IP协议只负责发数据包,不保证顺序和正确性,而TCP协议负责控制数据包传输,它在传输数据之前需要先建立连接,建立连接后才能传输数据,传输完后还需要断开连接。TCP协议之所以能保证数据的可靠传输,是通过接收确认、超时重传这些机制实现的。并且,TCP协议允许双向通信,即通信双方可以同时发送和接收数据。
TCP协议也是应用最广泛的协议,许多高级协议都是建立在TCP协议之上的,例如HTTP、SMTP等。
UDP协议(User Datagram Protocol)是一种数据报文协议,它是无连接协议,不保证可靠传输。因为UDP协议在通信前不需要建立连接,因此它的传输效率比TCP高,而且UDP协议比TCP协议要简单得多。
选择UDP协议时,传输的数据通常是能容忍丢失的,例如,一些语音视频通信的应用会选择UDP协议。
小结
计算机网络的基本概念主要有:
计算机网络:由两台或更多计算机组成的网络;
互联网:连接网络的网络;
IP地址:计算机的网络接口(通常是网卡)在网络中的唯一标识;
网关:负责连接多个网络,并在多个网络之间转发数据的计算机,通常是路由器或交换机;
网络协议:互联网使用TCP/IP协议,它泛指互联网协议簇;
IP协议:一种分组交换传输协议;
TCP协议:一种面向连接,可靠传输的协议;
UDP协议:一种无连接,不可靠传输的协议。
网络编程java_网络编程基础相关推荐
- 网络营销java_网络营销之博客营销
博客和博客营销 本问节选自<网络营销--网络营销实战密码:策略.技巧.案例>一书 要了解什么是博客营销,首先就要知道什么是博客. 简单地说,博客就是日记形式的网站.博客最初的名称是webl ...
- 迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等
文章目录 网络编程概述 网络通信要素 要素一IP和端口号 要素二网络协议 TCP网络编程 UDP网络编程 URL网络编程 Java网络编程基础 网络编程概述 Java是Internet上的语言,它从语 ...
- 基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明
基于c++和asio的网络编程框架asio2教程基础篇:1.基本概念和使用说明 由于asio2没有写技术文档,因此打算写几篇文章介绍一下如何使用它,主要是针对新手. 1.asio2如何使用? asio ...
- 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程
基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...
- 网络编程_1(网络基础+跨主机传输)
一.网络基础 知识点回顾: 同一主机间的进程通讯方式: 1.无名管道(亲缘关系间的通讯,固定的读端和写端) 2.有名管道(半双工(因为文件可见,可再次打开交换读端写端),非亲缘关系) 3.信号 4.共 ...
- web编程之网络基础
web编程之网络基础 一.TCP.IP网络: TCP/IP是"Transmission Control Protocol/Internet Protocol"的简写,翻译成中文为传 ...
- 【Linux】网络基础+UDP网络套接字编程
只做自己喜欢做的事情,不被社会和时代裹挟着前进,是一件很奢侈的事. 文章目录 一. 网络基础 1.局域网和广域网 2.协议初识和网络协议分层(TCP/IP四层模型) 3.MAC地址和IP地址(子网掩码 ...
- Linux网络编程之网络基础
目录 一.网络通信概述 二.网络通信基础知识 1.网络通信的发展历程 2.三大网络 3.网络通信的传输媒介 4.网卡 5.集线器(HUB) 6.交换机 7.路由器 8.DNS(Domain Name ...
- 网络编程简单入门,基础知识需先掌握
文章目录 网络编程入门 网络编程概述 网络编程三要素 ==IP地址== IP地址分类 通过控制台,获取IP的方法 InetAddress 三个常用方法 ==端口== 端口号 ==协议== UDP协议 ...
最新文章
- 如何只在IE上加载CSS样式表
- 在小程序开发路上踩过的小坑
- 萤石的云存储到期怎么启动内存卡_3款萤石智能入户单品 让普通入户门秒变智能...
- Delphi常用关键字用法详解
- [js] document.domain的作用是什么?它有什么限制?
- 区别对待 【找到问题发生的原因】 以及 【关于这个问题的 「正确可行」 的解决方法】
- opencv保存图像自动命名
- Task5.NB_SVM_LDA
- 由于应用程序配置不正确,未能启动此应用程序
- 关闭445端口等危险端口,应对勒索病毒
- 多省市房屋交易平台引入电子签章推动住房交易合同网签备案
- 手把手学会gitbub(4)
- 计算机桌面的图标都可以删除吗,桌面上图标删除不了怎么回事,电脑桌面的图标删除不了...
- eclipse/Myeclipse注释模板修改
- 福昕阅读器自定义快捷键
- 安装出错:Command line option syntax error.Type Command /? for help.解决方案
- elementPlus el-dialog 自适应
- 看到一个 cool sign
- 函数的参数(形参与实参)的理解
- 办公室局域网打印机配置笔记及0x0000011b连接错误成功解决方法
热门文章
- 收藏!这 50 道操作系统面试题,真牛!
- C++学习日记3——友元、运算重载符、继承、多态
- PHP实现RSA与RSA256加密,解密,加签,验签
- 在Viz 3.x中如何导入Viz 2.8的打包文件.eva
- CocosCreator无尽循环列表,长列表优化drawcall,scrollview列表优化
- 内网连接外网会怎么样
- 【网络编程】利用Nginx实现动静分离--分离动态请求和静态请求(Nginx+Tomcat)
- grasshopper butterfly插件报错
- 基于emWin的WAV,MP3软解软件播放器,带类似千千静听频谱,含uCOS-III和FreeRTOS两个版本...
- MPLAB X IDE v5.30离线安装MCC方法