1.1、概述

引入

image.png

信件的格式:对方邮编、对方地址、对方姓名、自己的地址

网络中包的格式:对方的信息、对方地址、自己的地址

网络中的两种连接方式(TCP,UDP)就类似于打电话和发短信:

​ 打电话:连接、接通了、通话(通话结束前一直保持联系)

​ 发短信:发送出去就完事了

计算机网络

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统网络管理软件及**网络通信协议(类似于http、tcp、udp等)的管理和协调下,实现资源共享和信息传递**的计算机系统。

网络编程的目的

类似于无线电台:用以传播交流信息,数据交换,通信。

想达到效果需要什么

  1. 如何准确的定位网络上的一台主机 192.168.26.1(主机ip地址):8080(端口号),定位到计算机上的某个资源
  2. 找到了这个主机,如何传输数据呢?

1.2、网络通信的要素

如何实现网络的通信?

通信双方地址:

  • ip
  • 端口号
  • 192.168.26.1:8080

规则:网络通信的协议

image.png

小结

  1. 网络编程中有两个主要的问题
    • 如何准确的定位到网络上的一台或者多台主机
    • 找到主机后如何进行通信
  2. 网络编程的要素
    • IP和端口号
    • 网络通信协议
  3. 万物皆对象(所以java中也有特定的类来进行网络编程)

1.3、IP

ip地址(网络互联协议地址):InetAddress

  • 唯一定位一台网络上的计算机

  • ip地址的分类

    • ipv4/ipv6

      • IPV4 127.0.0.1,本机地址等于localhost,4个字节组成,0~255,42亿余个,2011年已经用尽

      • IPV6 128位,8个无符号整数

        1
        2021:0bb2:aaaa:0015:0000:1aaa:1312(仅举例)
    • 公网(互联网) - 私网(局域网)

  • 域名:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.net.InetAddress;
import java.net.UnknownHostException;

public class TestInetAddress {
public static void main(String[] args) throws UnknownHostException {
InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1");
System.out.println(inetAddress1);
InetAddress inetAddress2 = InetAddress.getByName("localhost");
System.out.println(inetAddress2);
InetAddress inetAddress3 = InetAddress.getLocalHost();
System.out.println(inetAddress3);
//查看本机地址

InetAddress inetAddress4 = InetAddress.getByName("www.baidu.com");
System.out.println(inetAddress4);
//查看网站ip地址

//System.out.println(inetAddress4.getAddress());
System.out.println(inetAddress4.getCanonicalHostName());//规范的名字
System.out.println(inetAddress4.getHostAddress());//ip
System.out.println(inetAddress4.getHostName());//域名,或者自己电脑的名字
//常用方法
}
}

1.4、端口

端口表示计算机上的程序的进程

  • 不同的进程有不同的端口号!用来区分软件!

  • 端口被规定为 0~65535之中的数

  • 端口号分为TCP,UDP两种:所以实际上是6553*2个端口,单个协议下,端口号不能冲突

  • 端口分类

    • 公有端口:0~1023

      • HTTP:80
      • HTTPS:443
      • FTP:21
      • Telent:23
    • 程序注册端口:1024~49151,用以分配用户或者程序

      • Tomcat:8080
      • MySQL:2206
      • Oracle:1521
    • 动态、私有端口:45152~65535(尽量不要用)

      1
      2
      3
      4
      netstat -ano #查看所有的端口
      netstat -ano |findstr "5353" #查看5353号端口
      tasklist |findstr "8696" #查看8696端口的进程
      Ctrl+shift+Esc 调用任务管理器查看进程

1.5、通信协议

协议:约定,就好比我们现在都说的是普通话。

网络通信协议:速率,传输速率。代码结构,传输控制……

问题:非常复杂

解决方法:大事化小,也就是进行分层

TCP/IP协议簇:实际上是一组协议

重要的协议:

  • TCP:传输控制协议

  • UDP:用户数据报协议

出名的协议:

  • TCP
  • IP:网际互连协议,无连接、不可靠的、尽力而为

TCP与UDP比较:

TCP:打电话

  • 面向连接,可靠

  • 三次握手,四次挥手

    • 最少需要三次,保证稳定连接
      A:你瞅啥 
      B:瞅你咋滴
      A:干一场
      
      1
      2
      3
      4
      5
      6
      7
      8
        

      - ```
      四次消息,保证双方都断开
      A:我要走了
      B:我知道了
      B:我也要走了
      A:我知道了
  • 客户端,服务端(主动和被动)

  • 传输完成,释放连接,效率低

UDP:发短信

  • 无连接、不可靠、快速传输
  • 客户端,服务端(没有明显的界限)
  • 不管有没有接受,都可以发送