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. (转)coures包下载和安装 可解决报错ImportError: No module named '_curses'

    原创文章,转载请注明出处. coures curses 库 ( ncurses )提供了控制字符屏幕的独立于终端的方法.curses 是大多数类似于 UNIX 的系统(包括Linux)的标准部分,而且 ...

  2. HDU1556-Color the ball-前缀和/线段树/树状数组

    N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但 ...

  3. 图文形式分享网页到facebook (要求:可以多个图片切换选择)

    分享网页到facebook的功能很常见,之前都是简单的网页分享,没遇到什么砍儿.这次的需求相比之前有一丁点特殊,就是图片得是用户指定选择的. fb文档地址:https://developers.fac ...

  4. jdbc_mysql----interset

  5. Servlet共享数据

    共享数据: 1.域对象:有一个作用范围的对象,可以在范围内共享数据 2.request域:代表一次请求范围,一般用于请求转发的多个资源中共享数据 方法: 1.存储数据:setAttrbute(Stri ...

  6. java Future && Guava Future

    ### java future Runnable的任务是没有返回值,也不能抛出异常的java.util.concurrent.Callable接口,可以返回一个对象或者抛出异常 使用jdk的这种方式提 ...

  7. Flutter 打包报错 : Unknown FLUTTER_BUILD_MODE: xxx

    概要 在集成flutter 工程之后,我们的工程在debug 和release 模式下都没什么问题,一切都很顺利.但是我们在打企业包的时候却出现了错误: Showing Recent Errors O ...

  8. The linux command 之引用

    [me@linuxbox ~]$ echo this is a test this is a test shell 会对echo进行单词分割(word splitting)去除多余的空白. [me@l ...

  9. postman连接不了localhost问题解决

    学习搭建服务器可用postman 连接不了localhost的端口 网上好多教程是这样连接 看完视频后我们是这样 找了大量资料都解决不了,什么版本,什么证书的都不好使,最简单的就是去掉http:// ...

  10. Java中的常量池

    JVM中有: Class文件常量池.运行时常量池.全局字符串常量池.基本类型包装类对象 常量池 Class文件常量池: class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,编写的 ...