kuangshenshuo-网络编程-IP、端口及通信协议

网络编程 -> IP、端口、通信协议

1. 概述
  • 计算机网络

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

  • 网络编程的目的

    传播交流信息

    数据交换

    通信

  • 网络编程中的两个主要问题:

    • 如何准确定位网络上的一台或多台主机,以及定位到这个计算机上的某个资源?
  • 找到了这个主机,如何传输数据?

  • JavaWeb 是网页编程,B/S架构;网络编程是针对TCP/IP的C/S架构;

2. 网络通信的要素
  • 通信双方的地址:

    • IP
    • 端口号
  • 规则:即网络通信协议

    • TCP/IP参考模型

      OSI七层网络模型TCP/IP四层概念模型对应网络协议
      应用层应用层HTTP、TFTP、FTP、NFS、WAIS、SMTP
      表示层Telent、Rlogin、SNMP、Gopher
      会话层SMTP、DNS
      传输层传输层TCP、UDP
      网络层网络层IP、ICMP、ARP、RARP、AKP、UUCP
      数据链路层数据链路层FDDI、Ethernet、Arpanet、PDN、SLIP、PPP
      物理层IEEE 802.1A、IEEE 802.2 ~ IEEE 802.11
3. IP
  • IP地址的类:java.net.InetAddress

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

  • 127.0.0.1:本机 LocalHost

  • 分类:

    • IP地址分类

      • IPV4: 4个字节组成,0~255, 42亿~ (127.0.0.1)亚洲4亿,2011年就用尽了

      • IPV6:128位,8个无符号整数 (fe80::b075:f4c1:c098:ad31%12),

        2001:0bb2:aaaa:0015:0000:0000:1aaa:1312
        
    • 公网和私网分类

      • 公网:互联网; 私网:局域网
      • 192.168.XX.XX 专门给组织机构用的
      • A类:1.0.0.0 ~ 127.255.255.255(二进制表示为:00000001 00000000 00000000 00000000 - 01111111 11111111 11111111 11111111),最后一个是广播地址。
      • B类:128.0.0.0 ~ 191.255.255.255(二进制表示为:10000000 00000000 00000000 00000000----10111111 11111111 11111111 11111111), 最后一个是广播地址。
      • C类:192.0.0.0 ~ 223.255.255.255(二进制表示为: 11000000 00000000 00000000 00000000 - 11011111 11111111 11111111 11111111)。
      • D类:D类IP地址被叫做多播地址(multicast address),即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是“1110”,范围从224.0.0.0 ~ 239.255.255.255。
  • 域名:记忆IP问题!

    • www.baidu.com 61.135.185.32
import java.net.InetAddress;
import java.net.UnknownHostException;

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

            //查询网站IP地址
            InetAddress inetAddress2 = InetAddress.getByName("www.baidu.com");
            System.out.println(inetAddress2);   //www.baidu.com/61.135.185.32

            //常用方法
            System.out.println(inetAddress2.getAddress());
            System.out.println(inetAddress2.getCanonicalHostName()); //获得规范的名字
            System.out.println(inetAddress2.getHostAddress());  //IP
            System.out.println(inetAddress2.getHostName());  //域名

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}
4. 端口
  • 端口表示计算机上的一个程序的进程

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

  • 端口被规定0~65535

  • TCP端口、UDP端口;单个协议下,端口号不能冲突

  • 分类:

    • 公有端口: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 "11092"   #查看指定端口的进程
      

      Ctrl + Shift + Esc 打开任务管理器

    import java.net.InetSocketAddress;
    
    public class TestInetSocketAddress {
        public static void main(String[] args) {
            InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1",8080);
            InetSocketAddress socketAddress2 = new InetSocketAddress("localhost",8080);
            System.out.println(socketAddress);  //127.0.0.1:8080
            System.out.println(socketAddress2); //localhost/127.0.0.1:8080
    
            System.out.println(socketAddress.getAddress());
            System.out.println(socketAddress.getHostName());  //127.0.0.1
            System.out.println(socketAddress.getPort());  //8080
        }
    }
    
5. 通信协议
  • 网络通信协议:速率、传输码率、代码结构、传输控制…

  • 由于太复制,分层! TCP/IP协议簇

  • 重要的协议:

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

    • TCP
    • IP:网络互联协议
  • TCP & UDP 对比

    • TCP :打电话

      • 连接,稳定;

      • 三次握手,四次挥手

        A: 你瞅啥?
        B: 瞅你咋地?
        A: 干一场!
        
        
        A: 我要走了
        B: 你真的要走了吗
        B: 你真的真的要走了吗
        A: 我真的要走了
        
      • 客户端、服务端

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

    • UDP:发短信

      • 不连接、不稳定
      • 客户端、服务端没有明确的界限
      • 不管有没有准备好,都可以发送
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值