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网络编程概念的更多相关文章

  1. 廖雪峰Java13网络编程-1Socket编程-2TCP编程

    1. Socket 在开发网络应用程序的时候,会遇到Socket这个概念. Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据 ...

  2. 廖雪峰Java13网络编程-1Socket编程-5UDP编程

    1. UDP编程: 不需要建立连接 可以直接发送和接收数据 1.1 客户端 DatagramSocket sock = new DatagramSocket(){} sock.connect(addr ...

  3. 廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程

    TCP多线程编程 一个ServerSocket可以和多个客户端同时建立连接,所以一个Server可以同时与多个客户端建立好的Socket进行双向通信. 因此服务器端,当我们打开一个Socket以后,通 ...

  4. 廖雪峰Java13网络编程-3其他-2RMI远程调用

    1.RMI远程调用: Remote Method Invocation 目的:把一个接口方法暴露给远程 示例: 定义一个接口Clock,它有一个方法能够获取当前的时间,并编写一个实现类,来实现这个接口 ...

  5. 廖雪峰Java13网络编程-3其他-1HTTP编程

    1.HTTP协议: Hyper Text Transfer Protocol:超文本传输协议 基于TCP协议之上的请求/响应协议 目前使用最广泛的高级协议 * 使用浏览器浏览网页和服务器交互使用的就是 ...

  6. 廖雪峰Java13网络编程-2Email编程-2接收Email

    1接收Email协议类型 接收Email:收件人通过MUA软件把邮件从MDA抓取到本地计算机的过程. 1.1 POP3 从MUA到MDA使用最广泛的是协议是POP3 Post Office Proto ...

  7. 廖雪峰Java13网络编程-2Email编程-1发送email

    1.邮件发送 1.1传统邮件发送: 传统的邮件是通过邮局投递,从一个邮局到另一个邮局,最终到达用户的邮箱. 1.2电子邮件发送: 与传统邮件类似,它是从用户电脑的邮件软件(如outlook)发送到邮件 ...

  8. 廖雪峰Java1-3流程控制-9break、continue

    break跳出循环 int sum=0; for(int i=1; ;i++) { sum =sum + i; if(i == 100) { break; } } System.out.println ...

  9. 廖雪峰Java1-3流程控制-6 do-while循环

    do-while循环 do-while先执行循环,再判断条件. 条件满足时继续循环:条件不满足时退出:至少循环1次 int sum =0; int n = 1; do{ sum = sum + n; ...

随机推荐

  1. C++的指针常量和常量指针

    这2个概念非常容易混淆,即使是老鸟,也有眩晕的时候,写此博文,加深记忆... 指针常量:一个指针,并且它是一个常量,它的值不许被改变: char *const p1 = "Hello!&qu ...

  2. C# sort System.InvalidOperationException: Failed to compare two elements in the ar

    System.InvalidOperationException: Failed to compare two elements in the array. ---> System.NullRe ...

  3. [14]APUE:API for Mysql

    库:/usr/lib64/libmysqlclient.so.#.#... 头文件:/usr/lib64/mysql/mysql.h 一.建立连接 MYSQL *mysql_init(MYSQL *) ...

  4. webAPI(DOM) 2.1 获取页面元素 | 事件1 | 属性操作 | 节点 | 创建元素 | 事件2

    js分三个部分: ECMAScript标准:js的基本语法 DOM:Ducument Object Model--->文档对象模型--->操作页面的元素 BOM:Browser Objec ...

  5. Deep Dive into Neo4j 3.5 Full Text Search

    In this blog we will go over the Full Text Search capabilities available in the latest major release ...

  6. idea引入项目下所有文件(ps:包括静态文件夹)

    打开项目的目录结构 点击finish 最后删除目录下多余的src就可以了

  7. web项目中使用的协议

    DNS协议 1.DNS协议的作用是将域名解析为IP,网络上的每个站点的位置是用IP来确定的,访问一个网站首先就要知道它的IP,不过数据组成的IP记起来不方便,所以就使用域名来代替IP,由于IP和域名的 ...

  8. Python学习笔记(二)——列表

    Python学习笔记(二)--列表 Python中的列表可以存放任何数据类型 >>> list1 = ['Hello','this','is','GUN',123,['I','Lov ...

  9. C++ BASS 实例

    #include <iostream> #include <string> #include <map> #include "..\sdk\bass\in ...

  10. Jmeter使用:JSON返回数据处理

    想要解决的问题: 通过查询接口,获取response数据,作为下个请求post的参数值 后置处理器:JSON Extractor 先下载一个插件:JSONPathExtractor Names of ...