网络编程

网络编程

一、概述

简单地说,计算机网络就是把一些计算机相互连接起来。实现资源共享和信息传递。

计算机网络的正式定义是这样的:

利用通信线路和通信设备,将地理位置不同的、功能独立的多台计算机互连起来,以功能完善的网络软件来实现资源共享和信息传递,就构成了计算机网络系统。

目的是:资源共享 和 信息传递。

QQ群里面放一个文件,群里的成员都能下载,就是资源共享;
你收到别人发的一条微信,就是信息传递。

你和朋友通电话

信息传递类比邮件:

在这里插入图片描述

想要达到这个效果需要什么:

  1. 定位网络上的一台主机 192.168.16.124:端口, 定位上这个计算机上的某个资源。
  2. 如何传输数据呢?

Javaweb:网页编程 、 B/S架构。网络编程:TCP/IP 、 C/S

二、网络通信要素

如何实现网络的通信?

通信双方的地址:

  • ip:192.168.16.124
  • 端口:5900

规则:网络通信的协议:TCP/IP

TCP/IP参考模型是首先由ARPANET所使用的网络体系结构,共分为四层:网络接口层(又称链路层)、网络层(又称互联层)、传输层和应用层,每一层都呼叫它的下一层所提供的网络来完成自己的需求

每一层对应的协议有:

  • 网络接口层协议:Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。

  • 网络层协议:IP(Internet Protocol,英特网协议)、ICMP(Internet Control Message Protocol,控制报文协议)、ARP(Address Resolution Protocol,地址转换协议)、RARP(Reverse ARP,反向地址转换协议)。

  • 传输层协议: TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram protocol,用户数据报协议)。

  • 应用层协议:FTP(File Transfer Protocol,文件传输协议)、TELNET(用户远程登录服务协议)、DNS(Domain Name Service,是域名解析服务)、SMTP (Simple Mail Transfer Protocol,简单邮件传输协议 )、NFS(Network File System,网络文件系统)、HTTP、(Hypertext Transfer Protocol,超文本传输协议 )。

在这里插入图片描述

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

  • 如何让准确的定位到网络上的一台或多台主机;
  • 找到主机之后如何通信;

网络编程中的要素:

  • IP和端口号:IP
  • 网络通信协议:UDP、TCP

三、IP

IP 地址:Internet Protocol Address

唯一定位一台网络上的计算机。127.0.0.1: 本机localhost

ip地址的分类

  • IPV4: 127.0.0.1 ,4个字节组成。,0~255, 42亿~;30亿都在北美,亚洲4亿。2011年就用尽;
  • IPV6: fe80::f0e0:7383:ad8e:f32f%3 ,128位。8个无符号整数
2406:da18:ddf:4000:67d5:b226:cad7:125b

公网(互联网)–私网(局域网)

  • ABCDE类地址

  • 192.168.xx.xx, 专门给组织内部使用。

域名:记忆IP问题!例如 IP:www.vip.com

package com.gcbeen.net;

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

/**
 * @author gcbeen
 */
public class TestInetAddress {

    public static void main(String[] args) {
        try {
            // 查询本机地址
            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);

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

            // 常用方法
            // System.out.println(inetAddress.getAddress());   // 返回的是一个字节数组  无用
            System.out.println(inetAddress.getCanonicalHostName());    // 规范的名字
            System.out.println(inetAddress.getHostAddress());  // IP
            System.out.println(inetAddress.getHostName()); // 域名,或者自己电脑的名字

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

    }

}

// /127.0.0.1
// localhost/127.0.0.1
// xxxxx.local/192.168.0.102
// 
// www.taobao.com/39.175.110.232
// 39.175.110.232
// 39.175.110.232
// www.taobao.com

四、端口

端口表示计算机上一个程序的进程。不同的进程有不同的端口号!用来区分软件!

单个协议下端口范围被规定0~65535,例如:TCP,UDP:65535*2个端口。 tcp:80 udp:80 单个协议下,端口号不能冲突

端口分类

  • 端口 0~1023 内置的进程使用
    • HTTP:80
    • HTTP:443 如访问https://www.baidu.com:443 访问的还是百度
    • FTP:21
    • TELENT:23
  • 程序注册端口:1024-49151,分配给用户和程序
    • Tomcat:8080
    • MySql:3306
    • Oracle:1521
  • 动态、私有端口:49152~65535
netstat -ano #查看所有的端口
netstat -nao|findstr "7808" #查看指定的端口
tasklist|findstr "8696"

在这里插入图片描述

package com.gcbeen.net;

import java.net.InetSocketAddress;

/**
 * @author gcbeen 
 */
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);
        System.out.println(socketAddress2);

        System.out.println(socketAddress.getAddress());
        System.out.println(socketAddress.getHostName());    // 地址
        System.out.println(socketAddress.getPort());    // 端口
    }

}


// /127.0.0.1:8080
// localhost/127.0.0.1:8080

// /127.0.0.1
// localhost
// 8080

在这里插入图片描述

五、通信协议

协议:约定,就好比中国人交流说的是普通话

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

问题:非常的复杂

大事化小:分层

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

共分为四层:网络接口层(又称链路层)、网络层(又称互联层)、传输层和应用层,每一层都呼叫它的下一层所提供的网络来完成自己的需求

每一层对应的协议有:

  • 网络接口层协议:Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。

  • 网络层协议:IP(Internet Protocol,英特网协议)、ICMP(Internet Control Message Protocol,控制报文协议)、ARP(Address Resolution Protocol,地址转换协议)、RARP(Reverse ARP,反向地址转换协议)。

  • 传输层协议: TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram protocol,用户数据报协议)。

  • 应用层协议:FTP(File Transfer Protocol,文件传输协议)、TELNET(用户远程登录服务协议)、DNS(Domain Name Service,是域名解析服务)、SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)、NFS(Network File System,网络文件系统)、HTTP(Hypertext Transfer Protocol,超文本传输协议)。

重要的协议:TCP:用户传输协议、UDP:用户数据报协议

出名的协议:TCP:用户传输协议、IP:网络互联协议

在这里插入图片描述

TCP UDP 对比

TCP:打电话

  • 连接,稳定

  • 三次握手,四次挥手,保证稳定。

  • 客户端、服务器

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

UDP:发短信

  • 不连接,不稳定
  • 客户端、服务端:没有明确的界线
  • 不管有没有准备好,都可以发给你
  • DDOS:洪水攻击! 发垃圾包 堵塞线路 (饱和攻击)
posted @ 2022-09-16 10:41  gcbeen  阅读(131)  评论(0)    收藏  举报