java网络编程--2 IP,端口,通信协议,TCP/UDP对比

1.3、IP

ip地址:InetAddress

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

  • 127.0.0.1 :本机localhost

  • IP地址的分类

    • ipv4/ipv6
      • IPV4 127.0.0.1,4个字节组成。0-255,总共42亿个;有30亿都在北美,亚洲只有4亿,2011年就用尽了
      • IPV6 2001:0BAC:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA ,共16个字节,128位,8个无符号整数。可以为地球的每一粒沙子都分配一个IP。
    • 公网(互联网)- 私网(局域网)
      • ABCD类地址
        • A类网络的IP地址范围为:1.0.0.1-126.255.255.254; 一个A类IP地址由1字节(每个字节是8位)的网络地址和3个字节主机地址组成,网络地址的最高位必须是“0”,即第一段数字范围为1~126。每个A类地址可连接16387064台主机,Internet有126个A类地址。
        • B类网络的IP地址范围为:128.1.0.1-191.255.255.254; 一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,即第一段数字范围为128~191。每个B类地址可连接64516台主机,Internet有16256个B类地址。
        • C类网络的IP地址范围为:192.0.1.1-223.255.255.254 ; 一个C类地址是由3个字节的网络地址和1个字节的主机地址组成,网络地址的最高位必须是“110”,即第一段数字范围为192~223。每个C类地址可连接254台主机,Internet有2054512个C类地址。
        • D类为多播地址:IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。
      • 192.168.xx.xx,专门给组织内使用
  • 域名:记忆IP问题

    • IP:记忆IP地址。越短越值钱。
package com.ssl.lesson01;

import java.net.InetAddress;
import java.net.UnknownHostException;


//测试IP
public class TestInetAddress{
    public static void main(String[] args) {
        try {
            //查询本机地址
            InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
            System.out.println(inetAddress);

            InetAddress inetAddress4 = InetAddress.getByName("localhost");
            InetAddress inetAddress3 = InetAddress.getLocalHost();
            System.out.println(inetAddress4);
            System.out.println(inetAddress3);
            //查询网络地址
            InetAddress inetAddress2 = InetAddress.getByName("www.baidu.com");
            System.out.println(inetAddress2);

            //常用方法
            System.out.println(inetAddress2.getAddress());    //一般不用
            System.out.println(inetAddress2.getCanonicalHostName());   //获取规范名字 ip
            System.out.println(inetAddress2.getHostAddress());   //ip
            System.out.println(inetAddress2.getHostName());  //域名,或者电脑名
            /**
             * [B@4554617c
             * 39.156.66.14
             * 39.156.66.14
             * www.baidu.com
             */

        } catch (UnknownHostException e) {
            throw new RuntimeException(e);
        }
    }
}

1.4、端口Port

  • 端口表示计算机上的一个程序的进程。

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

    • 被规定范围:0-65535 ,16位,2byte;

    • TCP端口、UDP端口不冲突。所以可用通信端口有65536*2,单个协议下端口号不能冲突

    • 端口分类

      • 公有端口0-1023
        • HTTP 80
        • HTTPS 443
        • FTP 21
        • Telent 23
      • 程序注册端口:1024-49151,分配给用户或者程序
        • Tomcat 8080
        • MySQL 3306
        • Oracle 1521
      • 动态、私有:49152-65535,用户尽量不要用
      netstat -ano   #查看所有端口
      netstat -ano |findstr "5900"   #查看指定的端口
      tasklist|findstr "8696"  #查看指定端口的进程
      Ctrl+shift+ESC  #打开任务管理器
      
    • 访问端口号

    package com.ssl.lesson01;
    
    import java.net.InetSocketAddress;
    
    public class TestInetSocketAddress {
        public static void main(String[] args) {
            InetSocketAddress inetSocketAddress1 = new InetSocketAddress("127.0.0.1",8080);
            InetSocketAddress inetSocketAddress2 = new InetSocketAddress("localhost",8080);
            System.out.println(inetSocketAddress1);
            System.out.println(inetSocketAddress2);
    
            //使用方法
            System.out.println(inetSocketAddress1.getAddress());  //获取ip地址
            System.out.println(inetSocketAddress1.getHostName()); //获取本机ip地址
            System.out.println(inetSocketAddress1.getPort());   //获取端口号
            /*
            /127.0.0.1
            127.0.0.1
            8080
             */
    
        }
    }
    

1.5、通信协议

协议:约定!

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

非常复杂,所以大事化小,分层解决!!

TCP/IP协议簇:实际上是一组协议 用户传输协议/网络互联协议

传输层重要的两个协议:

  • TCP:用户传输协议
  • UDP:用户数据报协议

TCP UDP 对比

TCP:打电话

  • 连接,稳定
  • 三次握手,四次分手
/**
三次握手:
A:你瞅啥  SYN=1,seq=x;
B:瞅你咋地 SYN=1,ACK=1,seq=y,ack=x+1;
A:干一场  ACk=1,seq=x+1,ack=y+1;

四次分手
A:我要走了   FIN=1,seq=u;
B:你真的要走了吗   ACK=1,seq=y,ack=u+1;
B:你真的真的要走了吗  FIN=1,ACK=1,seq=w,ack=u+1;
A:我真的要走了!  ACK=1,seq=u+1,ack=w+1;
*/
  • 客户端、服务端
  • 传输完成,释放连接,效率低

UDP:发短信

  • 不连接,不稳定
  • 客户端、服务端:没有明确的界限
  • 不管有没有准备好,都可以发给你
  • DDOS:洪水攻击(饱和攻击)。