廖雪峰Java13网络编程-1Socket编程-1网络编程概念
1.计算机网络
1.1 什么是计算机网络?
- 两台或更多计算机组成的网络
- 同一网络内的任意2台计算机都可以直接通信
- 所有计算机必须遵循同一种网络协议
1.2 什么是互联网
- 互联网是网络的网络
- 互联网采用TCP/IP协议
* TCP/IP协议泛指互联网协议
* 其中最重要的2个协议是TCP协议和IP协议
2. IP地址
IP地址用于唯一标识一个网络接口(Network Interface)
* IPv4采用32位地址,类似101.202.99.12
* IPv6采用128位地址,类似2001:0DA8:100A:0000:0000:1020:F2F3:1428公网IP可以直接被访问
内网IP只能在内网访问
* 192.168.x.x
* 10.x.x.x本机地址:127.0.0.1
IPv4地址实际上是一个32位整数
* 4个整数,每一个在0-255(2^8-1)之间,即32位整数
import java.math.BigInteger;
public class IPCalculator {
public static void main(String[] args) throws NumberFormatException{
int[] ip = {101,202,99,12};
String[] listaddr16=new String[4];
for(int i=0;i<ip.length;i++){
String hex = Integer.toHexString(ip[i]);
if(hex.length()<2){
hex="0"+hex;
}
listaddr16[i]=hex;
}
String address16 ="";
for(String addr:listaddr16){
address16 += addr;
}
System.out.println("IP地址转化为16进制:"+ address16);
System.out.println(new BigInteger(address16,16));
}
}

如果1台计算机有1个网卡,并且接入了网络,它会拥有2个IP地址,本地地址127.0.0.1和一个IP地址,并通过这个IP地址连接网络。
如果计算机有2个网卡,除了本地地址,还有2个IP地址,分别接入2个网络。通常连接2个网络的设备是交换机和路由器,其至少有2个IP地址,分别接入不同的网络,让网络之间连接起来。

如果2台电脑位于同一个网络下,它们可以直接通信,因为其IP地址前段是相同的,网络号也是相同的。
网络号是IP地址通过子网掩码以后过滤得到的。每台计算机都配备了IP地址和子网掩码,根据IP地址和子网掩码可以计算出网络号。
计算方法:按组对齐,做与运算。

如果计算出的网络号相同,证明在同一个网络,可以直接通信。

如果2台计算机计算出的网络号不同,2台计算机不在同一个网络,不能直接通信。必须通过路由器或交换机等网络设备间接通信,我们把这种设备成为网关。

网关的作用:连接多个网络,负责把来自一个网络的数据包发到另一个网络,这个过程成为路由。

所以一台计算机的网卡会有IP地址、子网掩码、网关的IP地址这3个关键的配置。

直接记忆IP地址非常困难,所以我们通常使用域名来访问某个特定的服务。域名解析器DNS负责把域名翻译为对应的IP地址,客户端再根据IP地址来访问服务器。
3. TCP/IP协议
TCP/IP协议:繁殖互联网协议簇,最重要的2个协议是TCP/IP协议。
3.1 OSI模型(Open System Interconnect)
OSI模型是ISO组织定义的一个计算机互联的标准模型。只是一个定义,目的是简化网络各层的操作,提供标准的接口,便于实现和维护。
应用层:提供应用层序之间的通信
表示层:处理数据格式、加减密
会话层:负责建议和维护会话
传输层:提供端到端的可靠传输
网络层:负责根据目标地址来选择路由
链路层和物理层:负责把数据进行分片,并且真正通过物理网络进行传输,例如无线网、光线等
互联网实际使用的TCP/IP模型大致对应OSI的5层模型

4. IP协议和TCP协议
4.1 IP协议
- 分组交换 一个大的数据包想要通过IP协议传输的时候,被自动分成若干个小的数据包,然后通过网络进行传输。
- 不保证可靠传输
4.2 TCP协议:
TCP协议也是应用最广的协议,许多高级协议都是建立在TCP协议之上的。
- 传输控制协议 建立在IP协议上的,IP协议只负责发数据包,而TCP控制数据包的传输
- 面向连接 TCP在传输数据之前,需要先建立连接,然后才能传输数据,传输完后还需要断开连接
- 可靠传输 TCP是一个可靠传输的协议,之所以能保证这一点,是通过接受确认、超时重传这些机制实现的
- 双向通信 TCP允许双向通信,双方可以同时发送接受数据
4.3 UDP协议(User Datagram Protocol)数据报文协议:
- 数据报文协议
- 无连接
- 不保证可靠传输
- 传输效率高
UDP比TCP简单的多。UDP协议不需要连接,不保证可靠传输,发送方发送数据后,无法得知接收方是否收到,因为UDP协议比TCP要简单的多,所以同样的数据用UDP传输要比TCP效率高。
选择UDP协议的时候,传输的数据,通常是能够容忍丢失一部分的,例如一些语音、视频通讯的应用会选择UDP协议
5. 总结:
计算机网络的基本概念:
- 互联网:网络的网络
- IP地址:计算机在网络中的标识
- 网关:负责连接多个网络
- 协议:TCP/IP协议
- TCP协议:面向连接,可靠传输
廖雪峰Java13网络编程-1Socket编程-1网络编程概念的更多相关文章
- 廖雪峰Java13网络编程-1Socket编程-2TCP编程
1. Socket 在开发网络应用程序的时候,会遇到Socket这个概念. Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据 ...
- 廖雪峰Java13网络编程-1Socket编程-5UDP编程
1. UDP编程: 不需要建立连接 可以直接发送和接收数据 1.1 客户端 DatagramSocket sock = new DatagramSocket(){} sock.connect(addr ...
- 廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程
TCP多线程编程 一个ServerSocket可以和多个客户端同时建立连接,所以一个Server可以同时与多个客户端建立好的Socket进行双向通信. 因此服务器端,当我们打开一个Socket以后,通 ...
- 廖雪峰Java13网络编程-3其他-2RMI远程调用
1.RMI远程调用: Remote Method Invocation 目的:把一个接口方法暴露给远程 示例: 定义一个接口Clock,它有一个方法能够获取当前的时间,并编写一个实现类,来实现这个接口 ...
- 廖雪峰Java13网络编程-3其他-1HTTP编程
1.HTTP协议: Hyper Text Transfer Protocol:超文本传输协议 基于TCP协议之上的请求/响应协议 目前使用最广泛的高级协议 * 使用浏览器浏览网页和服务器交互使用的就是 ...
- 廖雪峰Java13网络编程-2Email编程-2接收Email
1接收Email协议类型 接收Email:收件人通过MUA软件把邮件从MDA抓取到本地计算机的过程. 1.1 POP3 从MUA到MDA使用最广泛的是协议是POP3 Post Office Proto ...
- 廖雪峰Java13网络编程-2Email编程-1发送email
1.邮件发送 1.1传统邮件发送: 传统的邮件是通过邮局投递,从一个邮局到另一个邮局,最终到达用户的邮箱. 1.2电子邮件发送: 与传统邮件类似,它是从用户电脑的邮件软件(如outlook)发送到邮件 ...
- 廖雪峰Java1-3流程控制-9break、continue
break跳出循环 int sum=0; for(int i=1; ;i++) { sum =sum + i; if(i == 100) { break; } } System.out.println ...
- 廖雪峰Java1-3流程控制-6 do-while循环
do-while循环 do-while先执行循环,再判断条件. 条件满足时继续循环:条件不满足时退出:至少循环1次 int sum =0; int n = 1; do{ sum = sum + n; ...
随机推荐
- JVM内核-原理、诊断与优化学习笔记(三):常用JVM配置参数
文章目录 Trace跟踪参数 -verbose:gc (打开gc的跟踪情况) -XX:+printGC(打开gc的log开关,如果在运行的过程中出现了gc,就会打印出相关的信息.) -XX:+Prin ...
- jdk自带的数据库derby的基本使用以及注意事项(mac为例),附java demo
文章目录 安装 环境变量 验证是否安装成功 启动 本地启动 允许远程连接的启动方式: 在启动过程中可能遇到的错误(远程连接的时候会出现): 1 2 连接测试,创建数据库 方法一(推荐) 方法二 jav ...
- 6、 restful API
RESTful 一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. RE ...
- Python-docx库的使用
from docx import Document from docx.shared import Inches document = Document() document.add_heading( ...
- JAVA利用JXL导出 EXCEL (在原有的excel模板上把数据导到excel上)
添加依赖 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>j ...
- centos yum install 找不到软件包
yum install epel-release 然后再试试yum install 其他安装包
- linux安装openoffice,并解决中文乱码
1.安装openoffice 官网http://www.openoffice.org/zh-cn/download/下载 2.解压并进入文件夹: cd /zh-cn/RPMS yum localins ...
- Spark Streaming的简单介绍
本文讲解Spark流数据处理之Spark Streaming.本文的写作时值Spark 1.6.2发布之际,Spark 2.0预览版也已发布,Spark发展如此迅速,请随时关注Spark Stream ...
- php 执行mysql inset 指令无效
网数据库里插入一条 inset into je_user("name","va") values("df","12"), ...
- js 本地预览图片和得到图片实际大小
//填充预览图片 function adpter(file, upfile) { var imgName = new Date().getTime() + file.name.substr(file. ...