网络通信(一)

网络编程概述

  • 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。

Java提供了哪些网络编程的解决方案

  • java.net.*包下提供了网络编程的解决方案

基本的通信架构

  • 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。

 无论是CS架构,还是BS架构的软件都必须依赖网络编程

网络通信三要素

IP地址

  • IP(internet Protocol):全称当“互联网协议地址”,设备在网络中的地址,是唯一的标识
  • IP地址有两种形式:IPv4、IPv6

IPv4

 IPv6

  • IPv6:共128位
  • IPv6分成8段表示。每段每4位编码成一个十六进制位表示,数之间用冒号(:)分开。

 公网IP,内网IP

  • 公网IP:就是可以连接互联网的IP地址;内外IP:也叫局域网IP,只能组织机构内部使用。
  • 192.168.开头的就是常见的局域网地址,范围即为192.168.0.0~192.168.255.255,专门位组织机构内部使用。

特殊IP地址

  • 127.0.0.1、localhost:代表本机IP,只会寻找当前所在的主机。

IP常用命令:

  • ipconfig:查看本机IP地址。
  • ping IP地址:检查网络是否连通。

InetAddress

  • 代表IP地址
InetAddress的常用方法
名称 说明

public static InetAddress getLocalhost()

获取本机IP,会以一个inetAddress的对象返回
public static InetAddress getByName(String host) 根据IP地址或者域名,返回一个inetAddress对象
public String getHostName() 获取该IP地址对象对应的主机名
public String getHostAddress()  获取该IP地址对象中的IP地址信息
public boolean isReachable(int timeout) 在指定毫秒内,判断主机与该IP对应的主机是否能连通
import java.net.InetAddress;

public class InetAddressTest {
    public static void main(String[] args) throws Exception {
        // 获取本机IP地址对象
        InetAddress ip1 = InetAddress.getLocalHost();
        System.out.println(ip1.getHostName());
        System.out.println(ip1.getHostAddress());

        // 获取指定IP或域名的IP地址对象
        InetAddress ip2 = InetAddress.getByName("www.baidu.com");
        System.out.println(ip2.getHostName());
        System.out.println(ip2.getHostAddress());

        // 相当于ping
        System.out.println(ip2.isReachable(6000));
    }
}

端口号

  • 应用程序在设备中唯一的标识,标记正在计算机设备上运行的应用程序的,被规定为一个16位的二进制,范围是0~65535。

分类

  • 周知端口:0~1023,被预先定义的知名应用占用(如:HTTP占用80,FTP占用21)
  • 注册端口:1024~59151,分配给用户进程或某些应用程序。
  • 动态端口:49152~65535,之所以称为动态端口,是因为它一般不固定分配某种进程,二十动态分配。

注意:我们自己开发的程序一般选择使用注册端口,且一个设备中不能出现两个程序的端口一样,否则出错。

协议

  • 网络上通信的设备,事先规定的连接规则,以及传输数据的规则被称为网络通信协议。

开发式网络互联标准:OSI网络参考模型

  • OSI网络参考模型:全球网络互联标准。
  • TCP/IP网络模型:事实上的国际标准。
OSI网络参考模型 TCP/IP 各层对应 面向操作
应用层 应用层 HTTP、FTP、SMTP…… 应用程序需要关注的:浏览器,邮箱。程序员一般在这一层开发
表示层
会话层
传输层 传输层 UDP、TCP…… 选择使用的TCP,UDP协议
网络层 网络层 IP…… 封装源和目标IP
数据链路层 数据链路层+物理 比特流…… 物理设备中传输
物理层

传输层的2个通信协议

  • UDP(User Datagram Protocol):用户数据报协议;
  • TCP(Transmission Control Protocol):传输控制协议。
UDP协议
  • 特点:无连接,不可靠通信。通信效率高
  • 不事先建立连接,数据按照包发,一包数据包含:自己的IP、程序端口,目的地址、程序端口和数据(限制在64KB内)等。
  • 发送方不管对方是否在线,数据在中间丢失也不管,如果接收方收到数据也不返回确认,故是不可靠的。
 TCP协议
  • 特点:面向连接、可靠通信。通信效率相对不高
  • TCP的最终目的:要保证在不可靠的信道上实现可靠的传输。
  • TCP主要有三个步骤实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接。

TCP协议:三次握手建立可靠连接

        可靠连接:确认通信双方,收发消息都是正常无问题的(全双工)

 

  TCP协议:四次握手断开连接

        目的:确保双方数据的收发都已经完成

 

 

相关推荐

  1. 第二十 网络通信

    2024-03-15 10:50:01       31 阅读
  2. 第二十 网络通信

    2024-03-15 10:50:01       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-15 10:50:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 10:50:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 10:50:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 10:50:01       18 阅读

热门阅读

  1. 【AI生成】军用无人机数据链路抗干扰研究

    2024-03-15 10:50:01       20 阅读
  2. 向内存安全语言迁移的五大挑战

    2024-03-15 10:50:01       20 阅读
  3. react 对Fiber架构的理解?解决了什么问题?

    2024-03-15 10:50:01       22 阅读
  4. 洛谷P5051 [COCI2017-2018#7] Timovi

    2024-03-15 10:50:01       22 阅读
  5. Hibernate的FlushMode类

    2024-03-15 10:50:01       20 阅读
  6. CSS 03

    CSS 03

    2024-03-15 10:50:01      16 阅读
  7. JVM对象创建与内存分配机制分析

    2024-03-15 10:50:01       22 阅读
  8. 开发Flutter项目的时候一般用什么版本?

    2024-03-15 10:50:01       22 阅读
  9. Mac 安装nvm

    2024-03-15 10:50:01       21 阅读
  10. hbase rowkey设计原则

    2024-03-15 10:50:01       18 阅读
  11. macOS 安装使用 python 虚拟机

    2024-03-15 10:50:01       23 阅读
  12. 在Spring Boot中使用Validation进行表单验证

    2024-03-15 10:50:01       22 阅读
  13. 跨系统调用认证秘钥安全保存方案

    2024-03-15 10:50:01       20 阅读