Java学习--网络编程

深入理解TCP/IP协议栈、IP地址与Java网络编程

前言

在信息化时代,计算机网络已经渗透到我们生活的各个角落。了解网络通信的基本原理,对于开发网络应用和理解网络技术至关重要。本文将深入探讨TCP/IP协议栈的各层结构,详细解析IP地址、端口、协议,以及在Java中如何使用InetAddress类进行网络编程。

一、TCP/IP参考模型概述

TCP/IP参考模型是互联网的核心协议模型,分为四个层次,每一层都承担着特定的功能:

层次协议描述
应用层HTTP、FTP、Telnet、DNS等提供应用程序间的通信,如浏览器、邮件客户端。开发者通常在这一层进行开发。
传输层TCP、UDP负责主机间的数据传输,提供可靠或不可靠的数据传输服务。
网络层IP、ICMP、ARP处理数据包的路由和转发,封装源IP和目的IP等信息。
物理层与数据链路层以太网、Wi-Fi等,二进制比特流负责数据的物理传输,将数据转换为电信号或光信号传输。

网络通信协议的定义

  • 网络通信协议:在计算机网络中,规定通信双方如何连接和通信的规则集合,被称为网络通信协议。

二、IP地址与端口

1. IP地址

为了使网络中的计算机能够互相通信,必须为每台计算机指定一个唯一的标识号,用于指定接收数据的计算机和识别发送数据的计算机,这个标识号就是IP地址

1.1 IP地址的分类
  • IPv4

    • 采用32位地址长度,分为4个字节。
    • 通常以点分十进制表示法表示,例如:“192.168.1.66”。
    • IPv4地址数量有限,已接近枯竭。
  • IPv6

    • 采用128位地址长度,分为8组,每组16位,用冒号分隔。
    • 例如:“FE80:0000:0000:0000:0202:B3FF:FE1E:8329”。
    • 大幅度扩展了地址空间,解决了IPv4地址不足的问题。
1.2 特殊IP地址
  • 127.0.0.1:回环地址,指向本机,一般用于测试。
1.3 常用DOS命令
  • ipconfig:查看本机IP地址。
  • ping IP地址:检查与目标IP的网络连通性。

2. 端口

网络通信本质上是两个应用程序之间的通信。为了区分同一台计算机上的不同应用程序,引入了端口号的概念。

  • 端口号

    • 用16位二进制数表示,取值范围为0~65535。
    • 0~1023:保留给系统和知名服务或协议使用(如HTTP占用80端口)。
    • 1024~49151:注册端口,一般应用程序可使用。
    • 49152~65535:动态或私有端口。
  • 注意:如果端口号被其他服务占用,会导致当前程序无法启动。

三、网络通信协议

在计算机网络中,通信双方需要遵守统一的规则,这些规则被称为网络通信协议。协议对数据传输的格式、速率、步骤等进行了统一规定。常见的传输层协议有UDP和TCP。

四、UDP协议详解

1. UDP的特点

  • 面向无连接:发送数据前不需要建立连接。
  • 高效快速:由于无需建立连接,传输速度快。
  • 不可靠性:不保证数据能可靠送达,也不保证顺序。
  • 数据长度限制:单个UDP数据报的大小限制在64KB以内。

2. UDP的三种通信方式

  1. 单播(Unicast):一对一的通信方式。

  2. 组播(Multicast):一对多的通信方式,发送给一组特定的主机。

    • 组播地址范围:224.0.0.0 ~ 239.255.255.255
      • 224.0.0.0 ~ 224.0.0.255:保留地址,供路由协议等使用。
  3. 广播(Broadcast):将数据发送给同一子网内的所有主机。

    • 广播地址:255.255.255.255

五、TCP协议详解

1. TCP的特点

  • 面向连接:在数据传输前需建立可靠的连接。
  • 可靠传输:通过序列号、确认应答、重传控制等机制,确保数据的可靠性和顺序性。
  • 流量控制和拥塞控制:根据网络状况调整发送速度,防止网络拥塞。
  • 无数据长度限制:以字节流方式传输数据,没有严格的大小限制。

2. TCP的连接管理

2.1 三次握手(建立连接)

TCP使用三次握手建立连接:

  1. 客户端发送一个带有SYN标志的数据包,表示请求建立连接。

  2. 服务器收到后,回复一个带有SYN和ACK标志的数据包,表示同意建立连接并确认收到请求。

  3. 客户端收到确认后,再发送一个带有ACK标志的数据包,表示连接建立。

2.2 四次挥手(断开连接)

TCP使用四次挥手断开连接:

  1. 客户端发送一个带有FIN标志的数据包,表示请求断开连接。

  2. 服务器收到后,发送一个带有ACK标志的数据包,确认收到断开请求。

  3. 服务器处理完数据后,发送一个带有FIN标志的数据包,表示同意断开。

  4. 客户端收到后,发送一个带有ACK标志的数据包,确认连接已断开。

3. Socket编程

  • Socket(套接字):TCP/IP协议的API接口,应用程序通过创建Socket进行网络通信。

  • 通信过程

    • 服务器端:创建Socket,绑定地址和端口,监听连接请求,接受连接,数据传输。

    • 客户端:创建Socket,连接服务器地址和端口,数据传输。

六、Java中的InetAddress类

1. InetAddress概述

InetAddress类用于表示IP地址,有助于进行IP层面的操作,如获取主机名、IP地址等。

2. 常用方法

方法描述
static InetAddress getByName(String host)根据主机名或IP地址,获取对应的InetAddress对象。
String getHostName()获取此IP地址对应的主机名。
String getHostAddress()获取IP地址的字符串表示形式。

3. 代码示例

以下示例演示了如何使用InetAddress类获取主机名和IP地址:

import java.net.InetAddress;
import java.net.UnknownHostException;public class InetAddressDemo {public static void main(String[] args) {try {// 可以使用主机名或IP地址InetAddress address = InetAddress.getByName("192.168.1.66");// 获取主机名String name = address.getHostName();// 获取IP地址String ip = address.getHostAddress();System.out.println("主机名:" + name);System.out.println("IP地址:" + ip);} catch (UnknownHostException e) {e.printStackTrace();}}
}

输出示例

主机名:DESKTOP-XXXXXXX
IP地址:192.168.1.66

七、总结

理解TCP/IP协议栈以及IP地址、端口和协议的工作原理,对于网络编程和应用开发至关重要。通过Java的InetAddress类,我们可以方便地进行IP层面的操作,为网络通信奠定基础。在实际开发中,根据应用需求选择合适的传输层协议(TCP或UDP),可以在性能和可靠性之间取得平衡。


希望本文对您深入理解TCP/IP协议栈、IP地址和Java网络编程有所帮助。如有疑问,欢迎讨论指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470242.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工业相机选取

1.相机分类: 1.1 在相机曝光方式中,全局曝光和卷帘曝光是两种主流技术。CCD相机通常采用全局曝光方式,而CMOS相机则可能采用卷帘曝光。 面阵相机与全局曝光关联与区别 关联:面阵相机可以使用全局曝光作为曝光方式,但…

如何查看电脑关机时间

要查看电脑的关机时间,可以按照以下步骤进行操作: 1. 打开事件查看器:按下键盘上的Windows键R键,然后在弹出的运行对话框中输入"eventvwr.msc",并按下Enter键。 2. 在事件查看器窗口中,单击左侧窗…

jwt用户登录,网关给微服务传递用户信息,以及微服务间feign调用传递用户信息

1、引入jwt依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency> 2、Jwt工具类&#xff0c;生成token以及解析token package com.niuniu.gateway.uti…

SQL练习(2)

题源&#xff1a;牛客官网 选择题 假设创建新用户nkw&#xff0c;现在想对于任何IP的连接&#xff0c;仅拥有user数据库里面的select和insert权限&#xff0c;则列表语句中能够实现这一要求的语句是&#xff08;&#xff09; A grant select ,insert on *.* to nkw% B grant…

【MySQL从入门到放弃】InnoDB磁盘结构(一)

前言 从MySQL 5.5版本开始默认 使用InnoDB作为引擎&#xff0c;它擅长处理事务&#xff0c;具有自动崩溃恢复的特性&#xff0c;在日常开发中使用非常广泛。 下面是官方的InnoDB引擎架构图&#xff0c;主要分为内存结构和磁盘结构两大部分。 上一篇文章&#xff0c;我们解析了…

RT-DETR融合CVPR[2020]轻量化卷积模块Ghost Module模块

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《GhostNet: More Features from Cheap Operations》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/1911.11907 代码链接&#xff1a;GitHub - huawei-noah/Effici…

《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信

《TCP/IP网络编程》学习笔记 | Chapter 11&#xff1a;进程间通信 《TCP/IP网络编程》学习笔记 | Chapter 11&#xff1a;进程间通信进程间通信的基本概念通过管道实现进程间通信通过管道进行进程间双向通信 运用进程间通信习题&#xff08;1&#xff09;什么是进程间通信&…

2024 kali操作系统安装Docker步骤

1、更新系统 在开始之前&#xff0c;确保你的Kali系统是最新的。打开终端并运行以下命令&#xff1a; apt update 2、安装 apt install docker.io 3、查看启动状态 systemctl status docker 4、安装完 Docker 后&#xff0c;启动 systemctl start docker 5、启动并使…

LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略

LLMs之Code&#xff1a;Github Spark的简介、安装和使用方法、案例应用之详细攻略 目录 Github Spark的简介 Github Spark的安装和使用方法 1、安装 2、使用方法 Github Spark的案例应用 Github Spark的简介 2024年10月30日&#xff0c;GitHub 重磅发布GitHub Spark 是一…

MySQL数据库:SQL语言入门 【上】(学习笔记)

SQL&#xff08;Structured Query Language&#xff09;是结构化查询语言的简称&#xff0c;它是一种数据库查询和程序设计语言&#xff0c;同时也是目前使用最广泛的关系型数据库操作语言。&#xff08;95%适用于所有关系型数据库&#xff09; 【 SQL是关系型数据库通用的操作…

腾讯云nginx SSL证书配置

本章教程,记录在使用腾讯云域名nginx证书配置SSL配置过程。 一、nginx配置 域名和证书,替换成自己的即可。证书文件可以自定义路径位置。服务器安全组或者防火墙需要开放80和443端口。 server {#SSL 默认访问端口号为 443listen 443 ssl; #请填写绑定证书的域名server_name c…

使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行

electron-egg一个入门简单、跨平台、企业级桌面软件开发框架https://www.kaka996.com/electron-egg 跳转地址 1,使用 git下载代码到本地,如果没有git需要进行安装 # gitee git clone https://gitee.com/dromara/electron-egg.git # github git clone https://github.com/dro…

Nginx配置自带的stub状态实现活动监控指标

场景 为了确保应用以最佳性能和精度运行&#xff0c;需要清晰地了解有关其活动的监控指标。 NGINX 提供了多种监控选项&#xff0c;例如 stub 状态。 注&#xff1a; 博客&#xff1a;霸道流氓气质-CSDN博客 实现 启用 NGINX stub 状态 启用 NGINX HTTP 服务器内 locati…

vscode下nuget包的本地引入方法

优势&#xff1a; nuget包的本地引入可以方便打包后的本地测试&#xff0c;确保打包正确、功能完善后再上传至nuget服务端本地引入方式也极为简单&#xff0c;三步操作即可搞定&#xff0c;熟悉之后这个操作2分钟内就可以搞定 具体步骤&#xff08;以引入Epic.RobotService包…

【知识科普】SPA单页应用程序介绍

SPA单页应用程序 概述和传统的多页应用有什么区别&#xff1f;用户体验架构和开发性能和优化SEO&#xff08;搜索引擎优化&#xff09;维护和扩展 如何优化SEO服务端渲染和预渲染有什么区别&#xff1f; 概述 SPA&#xff0c;全称为Single Page Application&#xff08;单页应用…

免费HTML模板和CSS样式网站汇总

HTML模板&#xff1a;&#xff08;注意版权&#xff0c;部分不可商用&#xff09; 1、Tooplate&#xff0c;免费HTML模板下载 Download 60 Free HTML Templates for your websitesDownload 60 free HTML website templates or responsive Bootstrap templates instantly from T…

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

【go从零单排】Random Numbers、Number Parsing

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 这里是引用 &#x1f4bb;代码 Random Numbers package mainimport ("fmt…

网页web无插件播放器EasyPlayer.js点播播放器遇到视频地址播放不了的现象及措施

在数字媒体时代&#xff0c;视频点播已成为用户获取信息和娱乐的重要方式。EasyPlayer.js作为一款流行的点播播放器&#xff0c;以其强大的功能和易用性受到广泛欢迎。然而&#xff0c;在使用过程中&#xff0c;用户可能会遇到视频地址无法播放的问题&#xff0c;这不仅影响用户…

mysql5.7安装SSL报错解决(2),总结

Caused by: java.io.EOFException: SSL peer shut down incorrectly 在java里面连接mysql5.7.17数据库&#xff0c;报以上错误&#xff0c; 将数据库升级到mysql5.7.44就可以了。 这两天处理java连接mysql的问题&#xff0c;报了各种错误&#xff0c;总结一下就是openssl和mysq…