Java-网络与协议

1.网络编程概述

  • 网络编程主要解决计算机与计算机(手机、平板...)之间的数据传输问题。

  • 网络编程:不需要基于html页面就可以达到数据之间的传输。比如:qq,微信。

  • 网页编程:就是基于html页面的基础上进行数据的交互。比如:京东、天猫、淘宝。

  • 网络通讯的三要素:IP地址、端口号、协议

2.IP地址及端口

  • IP地址

    • Internet上的每台主机(Host)都有一个唯一的IP地址。IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。例如159.226.1.1。(四个字节)

  • IP地址类别

    • IP地址=网络号+主机号

    • A类地址 = 一个网络号 + 三个主机号 IP地址范围为:1.0.0.1-126.255.255.254 (注意,数字0和 127不作为A类地址,数字127保留给内部回送函数,而数字0则表示该地址是本地宿主机,不能传送。) 政府单位

    • B类地址 = 两个网络号+ 两个主机号 IP地址范围为:128.1.0.1-191.255.255.254 事业单位(学校、银行..)

    • C类地址= 三个网络号+ 一个主机号 IP地址范围为:192.0.1.1-223.255.255.254 私人使用..

  • 特殊的IP地址

    • 127.0.0.1 表示 本机回环地址

  • InetAddress

    • 此类在java.net包下,表示互联网协议 (IP) 地址。

  • 功能

    • getLocalHost(); 获取本机的IP地址对象

    • getByName("IP或者主机名") 根据一个IP地址的字符串形式或者是一个主机名生成一个IP地址对象。 (用于获取别人的IP地址对象)

    • getHostAddress() 返回一个IP地址的字符串表示形式。

    • getHostName() 返回计算机的主机名。

    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    public class InetAddrTest {
        public static void main(String[] args) throws UnknownHostException {
            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println("本机IP地址:"+localHost.getHostAddress());
            System.out.println("本机主机名:"+localHost.getHostName());
            // 根据一个主机名生成一个IP地址对象。
            InetAddress address2 = InetAddress.getByName("DESKTOP-NUSK95V");
            System.out.println("IP地址:" + address2.getHostAddress());
            System.out.println("我的主机名:" + address2.getHostName());
            //根据一个IP地址生成一个IP地址对象。
            byte[] bytes = {(byte)192,(byte)168, (byte) 140, (byte) 178};
            InetAddress address3 = InetAddress.getByAddress(bytes);
            System.out.println("IP地址:" + address3.getHostAddress());
            System.out.println("你的主机名:" + address3.getHostName());
        }
    }
  • Port地址

    • 如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(2^16-1)。

    • 所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号。

  • Port分类(0~65535)

    • 公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。

    • 注册端口(RegisteredPorts):从1024到49151。它们松散地绑定于一些服务。

    • 动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。

    • 端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务,如:http使用80端口;

3.子网

  • 为了确定网络区域,分开主机和路由器的每个接口,从而产生了若干个分离的网络岛,接口端连接了这些独立网络的端点。这些独立的网络岛叫做子网(subnet);

  • 网络中的每一个计算机都有一个IP地址,IP地址由四个数字表示,包括网络号和主机号两部分;例如172.16.1.101,其中172.16.1是网络号,也是常说的网段,101是主机号;网络号标识的就是Internet上的一个子网;只有在一个子网中计算机之间才能“直接”互通;

  • 划分子网可以使得网络管理更为容易;

4.TCP/IP协议栈

  • TCP/IP协议栈包含了一系列构成互联网基础的网络协议

    • TCP(传输控制协议):Transmission Control Protocol ,是一种面向连接的、可靠的、基于字节流的传输层通信协议;

    • UDP(用户数据报协议):User Datagram Protocol,用于处理数据包,是一种无连接的、不可靠的通信协议;

    • IP(网络协议):Internet Protocol,把数据从源传送到目的地。它不负责保证传送可靠性,流控制,包顺序等。

    • ICMP(网络控制报文协议):Internet Control Message Protocol,是TCP/IP协议栈的一个子协议,用于在IP主机、路由器之间传递控制消息。

    • IGMP(网际组报文协议):Internet Group Management Protocol,是一个组播协议,运行在主机和组播路由器之间。

    • ARP(地址解析协议):Address Resolution Protocol,根据IP地址获取物理地址的协议。

    • HTTP(超文本传输协议):HyperText Transfer Protocol,是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。

    • FTP(文件传输协议):File Transfer Protocol,用于Internet上的控制文件的双向传输。

5.TCP协议与UDP协议的差异

  • TCP协议

    • TCP是面向连接的协议,在正式收发数据前,必须和对方建立可靠的连接,所以速度会在连接中传输大数据量;

    • 通信前必须建立连接,效率稍低;

    • 通过三次握手机制连接,四次挥手机制断开连接,TCP提供IP环境下的数据可靠传输,保证数据无差错的、按照顺序的进行传输;

    • TCP使用字节流模式发送数据;

    • TCP适用对可靠性要求高的应用环境;

      如:打电话,文件的传送.

  • TCP三次握手创建连接

    TCP三次握手过程:

    1、主机A通过向主机B发送一个含有同步(SYN)序列号(seq)的标志位的数据段给主机B.向主机B请求建立连接。通过这个数据段,主机A告诉主机B我想要和你通信。

    2、主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A也告诉主机A我已经收到你的请求了,你可以传输数据了。

    3、主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段我已收到回复,我现在要开始传输实际数据了。这样3次握手就完成了,主机A和主机B就可以传输数据了

  • TCP四次挥手断开连接

     

    四次挥手断开连接:

    (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。

    (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1.和SYN一样,一个FIN将占用一个序号。

    (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A

    (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1.

  • UDP协议

    • UDP是面向无连接的协议,不与对方建立连接,而是直接就发送数据包,相对速度

    • 因为不需要建立连接,所以速度快;

    • 因为无连接,UDP的传输是不可靠的,不保证数据正确,不保证顺序等,也可能丢包;

    • UDP使用数据报模式;

    • 将数据极其源和目的封装为数据包,不需要建立连接;

    • 每个数据包大小限制在64K中;

    • UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境;

      如:飞秋、凌波、CS等

6.HTTP协议

  • HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议;

  • 1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基

  • 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法;

  • HTTP协议是互联网上使用最广泛的一种协议;

7.Socket

  • 在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。即socket是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。Socket()函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

posted @ 2022-04-26 21:06  carat9588  阅读(76)  评论(0编辑  收藏  举报