Java网络编程学习(一)

网络相关概念

网络体系结构

OSI体系结构(七层)

OSI(Open Systems Interconnection,开放系统互联)体系结构将整个计算机网络分为七层,从上到下依次为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

分层 功能 经典设备 协议与标准
物理层(Physical Layer) 负责在物理媒体上传输原始比特流。这包括定义物理设备的硬件规格、传输介质的类型(如电缆、光纤、无线电波)、信号的编码方式和传输速率等 集线器(Hub)、中继器(Repeater)、网络适配器(NIC)等 以太网标准(如10BASE-T、100BASE-TX)、光纤通信标准(如SONET、SDH)以及无线通信标准(如IEEE 802.11、蓝牙)等
数据链路层(Data Link Layer) 负责将物理层传输的比特流组装成帧,并提供节点之间的可靠数据传输。这包括成帧、物理地址(MAC地址)管理、错误检测和校正、流量控制和访问控制等功能 交换机(Switch)、网桥(Bridge)等 VLAN(虚拟局域网)、STP(生成树协议)、IEEE 802.3(以太网标准)、ATM(异步传输模式)、HDLC(高级数据链路控制)、PPP(点对点协议)等
网络层(Network Layer) 负责数据包的路由选择和逻辑地址(IP地址)的处理。这包括路径选择、逻辑地址管理、分组转发和拥塞控制等功能 路由器(Router)等 IP(网络互联协议)、ICMP(Internet控制报文协议)、ICMPv6(互联网控制信息协议版本六)、ARP(地址解析协议)、RARP(反向地址转换协议)等
传输层(Transport Layer) 提供端到端的通信服务,确保数据从发送方到接收方的可靠传输。这包括端口管理、可靠传输、流量控制和错误检测与校正等功能 网关等 TCP(传输控制协议)、UDP(用户数据报协议)、TLS(传输层安全协议)等
会话层(Session Layer) 责管理应用程序之间的会话。这包括会话建立、管理和终止、会话检查点和恢复、对话控制等功能 网关等 LDAP(轻型目录访问协议)等
表示层(Presentation Layer) 负责数据的格式化、加密解密和数据压缩。这确保发送方和接收方使用一致的数据格式,提供数据的语法和语义转换 该层主要关注数据的表示形式,如数据的编码、压缩和解压、加密和解密等,以确保数据的完整性和保密性。虽然OSI模型中没有明确列出表示层的具体协议,但实际应用中可能涉及各种数据编码、压缩和加密标准
应用层(Application Layer) 直接面向用户,提供各种网络服务。这包括文件传输、电子邮件、远程登录、网页浏览等功能 网关等 TELNET、DNS(域名解析协议)、HTTP(超文本传输协议)、HTTPS(超文本传输安全协议)、FTP(文件传输协议)、NFS(网络文件系统)等
TCP/IP体系结构(四层)

TCP/IP(Transmission Control Protocol/Internet Protocol)体系结构。

分层 功能 协议
网络接口层(Network Interface Layer) 网络接口层(有时也称为链路层或数据链路层)负责处理与物理网络介质的直接通信。它实现了数据帧在物理媒介上的传输 网络接口层包含了各种硬件协议,如以太网(Ethernet)、无线局域网(WLAN,如Wi-Fi)等。这些协议定义了如何在物理连接上传输数据
网络层(Network Layer) 网络层负责数据的路径选择和逻辑地址寻址。它实现了数据包从源主机到目的主机的路由和转发 网络层主要包括IP(互联网协议)和ICMP(互联网控制消息协议)等协议
传输层(Transport Layer) 传输层负责在源端和目的端之间建立、管理和终止会话。它提供了端到端的通信和数据传输服务,并确保数据的可靠传输和流量控制 传输层主要包括TCP(传输控制协议)和UDP(用户数据报协议)两种协议
应用层(Application Layer) 应用层是TCP/IP协议的最高层,负责处理特定的应用程序细节。它提供了网络应用程序之间的通信接口,并实现了特定的应用协议和服务 应用层包含了各种不同的协议,如HTTP(用于万维网的超文本传输)、FTP(用于文件传输)、SMTP(用于电子邮件的发送)、POP3和IMAP(用于电子邮件的接收)、DNS(域名解析服务)等
五层协议体系结构
分层
物理层(Physical Layer)
数据链路层(Link Layer)
网络层(Network Layer)
传输层(Transport Layer)
应用层(Application Layer)

网络通信数据封装

数据封装是指将协议数据单元(PDU)封装在一组协议头和尾中的过程。在数据通过网络进行传输时,每一层协议都会对其下层传来的数据进行封装,添加自己的协议头和必要的信息,以便在下一层进行处理和传输。封装的过程确保了数据在传输过程中的完整性和可靠性。

具体来说,数据封装的过程如下:

  • 应用层生成应用数据,如HTTP请求。
  • 传输层将应用数据封装成段(segment),并添加传输层头部(如TCP/UDP头部)。
  • 网络层将传输层段封装成数据包(packet),并添加网络层头部(如IP头部)。
  • 数据链路层将数据包封装成帧(frame),并添加数据链路层头部(如以太网头部)和尾部。
  • 物理层将帧转换成比特流(bit stream)进行物理传输。

网络通信数据分用

分用是复用的逆过程,它指的是在接收端,将从网络接收到的合并数据流拆分成单独的应用程序数据流的过程。在数据通过网络传输到达目的主机后,每一层协议都会根据其协议头中的信息,将数据包拆分成其下层可以处理的数据单元,并传递给下一层进行处理。这样,最终应用层就能够接收到属于自己的数据,并进行相应的处理。

具体来说,数据分用的过程如下:

  • 物理层接收到比特流,并将其转换成帧。
  • 数据链路层根据帧头中的信息,将帧拆分成数据包,并传递给网络层。
  • 网络层根据数据包头中的信息,将数据包拆分成传输层段,并传递给传输层。
  • 传输层根据段头中的信息,将段拆分成应用数据,并传递给应用层。
  • 应用层接收到属于自己的数据,并进行相应的处理。

端口

端口号的定义与作用

端口号是一个16位的无符号整数,其取值范围是0到65535。在网络通信中,端口号与IP地址配合使用,共同确定了一个网络连接的唯一性。具体来说,端口号的作用主要体现在以下几个方面:

  • 标识服务或应用程序:每个端口号都与一个特定的服务或应用程序相关联,这样网络上的计算机就能够根据端口号来识别并路由数据到正确的目标。
  • 实现多路复用:通过使用端口号,一台计算机可以同时提供多种服务,而无需为每种服务分配一个单独的IP地址。这使得网络通信更加灵活和高效。
  • 提供安全性:某些端口可以用于加密通信,如HTTPS使用的443端口,从而确保数据在传输过程中的安全性。
  • 区分传入和传出连接:在TCP连接中,每个连接都有两个端口号,一个用于源地址,一个用于目标地址。这样,系统就能够区分传入和传出的连接,并对其进行相应的处理。
端口号的分类

根据端口号的用途和范围,可以将其分为以下几类:

  • 系统或保留端口(Well-Known Ports):范围从0到1023。这些端口号通常分配给系统级或熟知的服务和应用,如HTTP(80端口)、HTTPS(443端口)、FTP(21端口)等。普通用户通常没有权限来绑定这些端口。
  • 注册端口(Registered Ports):范围从1024到49151。这些端口号没有固定的用途,但对于一些无法使用系统端口的服务来说,这些端口号是预留的。有些软件企业会为自己的服务预留一些端口号。
  • 动态/私有端口(Dynamic/Private Ports):范围从49152到65535。这些端口号不被ICANN或IANA管理,可供任意使用。它们常用于客户端软件临时通讯,如临时的端点。
常用端口号及其对应的服务
端口号 服务/协议 描述
80 HTTP 超文本传输协议,用于非安全的网页传输
443 HTTPS 安全的超文本传输协议,通过SSL/TLS加密传输数据
21 FTP 文件传输协议,用于文件传输服务
22 SSH 安全外壳协议,用于远程登录和管理
25 SMTP 简单邮件传输协议,用于电子邮件传输服务
110 POP3 邮局协议版本3,用于接收邮件服务
143 IMAP Internet消息访问协议,用于接收邮件服务并支持邮件管理
53 DNS 域名系统,用于域名解析服务
23 Telnet 远程登录到主机的终端仿真服务,但通常不安全
3389 RDP 远程桌面协议,用于Windows远程桌面服务

数据链路层

封装成帧、透明传输和差错控制是三个核心问题,它们对于保证数据的可靠传输起着至关重要的作用。

封装成帧

  • 封装成帧是指在数据链路层将上层交付的协议数据单元(PDU)添加帧头和帧尾,使之成为帧。
  • 帧头和帧尾中包含有重要的控制信息,用于帧定界、帧同步、差错控制等。封装成帧的作用在于将原始数据封装成能够在物理层传输的比特流,并确保在传输过程中数据能够完整、准确地被接收端接收。
  • 帧头通常包含源地址、目的地址、协议类型等控制信息,而帧尾则用于标识帧的结束。

透明传输

  • 指数据链路层对上层交付的传输数据没有任何限制,就好像不存在一样。
  • 数据链路层应该能够传输任意比特组合的比特流数据,而不会因数据中的某些特定比特组合而导致传输错误。
  • 数据链路层需要采取一些措施来避免数据中的特定比特组合被错误地解释为控制字符。例如,在面向字节的物理链路中,可以使用字节填充(或称字符填充)的方法。当数据中出现与帧定界符相同的字节时,在其前面插入一个转义字符,接收端在接收到转义字符后,就知道其后面的字节是数据而不是定界符。这样,就可以确保数据中的任意比特组合都能够被正确传输。

差错控制

  • 指在数据链路层中采取各种措施来检测和纠正数据传输过程中可能出现的差错。由于物理线路、设备故障、干扰等多种原因,数据传输过程中可能会出现比特差错,即0/1翻转。为了保证数据传输的可靠性,必须采用差错控制技术来检测和纠正这些差错。
  • 差错控制技术包括循环冗余检验(CRC)和检错重发等。CRC是一种基于多项式运算的差错检测方法,通过在数据后面附加一定数量的冗余码来生成帧校验序列(FCS)。接收端在接收到帧后,使用相同的生成多项式对接收到的数据进行CRC运算,如果得出的余数不为0,则说明数据在传输过程中出现了差错。
  • 检错重发则是一种差错纠正方法。当接收端检测到数据差错时,可以请求发送端重新发送数据,直到接收端接收到正确数据为止。这种方法虽然会增加一些传输延迟,但能够大大提高数据传输的可靠性。

网络层

IP地址(Internet Protocol Address)

  • IP地址(Internet Protocol Address)是互联网协议地址,用于标识互联网上的每一台设备,无论是计算机、手机、服务器还是其他网络设备。
  • IP地址使得数据包能够在互联网中正确地路由和传递。
分类
版本分类

IP地址主要分为两类:IPv4(Internet Protocol Version 4)和IPv6(Internet Protocol Version 6)。

  1. IPv4地址
  • IPv4地址由32位二进制数表示,通常被划分为4个8位(一个字节)的十进制数,用点号(.)分隔,例如:192.168.1.1。
  • IPv4地址范围从0.0.0.0到255.255.255.255,但并非所有地址都是可用的。
  • IPv4地址被分为几个类别,包括A类、B类、C类、D类和E类,以及特殊地址(如私有地址、广播地址、环回地址等)。
  1. IPv6
  • IPv6地址由128位二进制数表示,通常被划分为8个16位(两个字节)的十六进制数,用冒号(:)分隔,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。
  • IPv6地址提供了更大的地址空间,解决了IPv4地址耗尽的问题。
  • IPv6地址的表示方式更灵活,例如可以使用缩写(省略连续的零),例如:2001:db8:85a3::8a2e:370:7334。
用途和分配方式
  • 公网IP:这是在全球互联网上唯一且可路由的地址。它允许设备在互联网上被直接访问和通信。
  • 私网IP(也称为局域网IP):这些地址是在私有网络内部使用的,通常用于家庭、办公室或企业等局域网环境。私网IP地址在外部互联网上是不可见的,也无法直接访问。
  • 动态IP:这种地址是由网络中的动态主机配置协议(DHCP)服务器在设备连接到网络时自动分配的。动态IP地址可能会随着设备的每次连接而改变。
  • 静态IP:与动态IP不同,静态IP地址是手动分配给设备的,并且不会改变(除非手动更改)。静态IP地址通常用于需要稳定网络连接的设备,如服务器。
IPv4地址根据其网络号和主机号的位数

IP地址由网络号和主机号两部分组成,这种分类方式主要适用于IPv4地址。
一、网络号和主机号

  1. 网络号(Network ID)
  • 用于标识一个特定的网络或子网。
  • 在IP地址中,网络号占据前若干位(具体位数取决于IP地址的类别和子网划分)。
  1. 主机号(Host ID)
  • 用于标识网络中的某一台特定设备。
  • 在IP地址中,主机号占据剩余的位数。

二、基于网络号和主机号分类的IP地址类型分类

  1. A类地址:
  • 网络号:最高位为0,后面跟着7位网络地址和24位主机地址。
  • 范围:1.0.0.0到126.255.255.255。
  • 子网掩码:默认为/8(即255.0.0.0)。
  • 特点:支持的最大主机数为16,777,214,适用于大型网络。
  1. B类地址:
  • 网络号:最高两位为10,后面跟着14位网络地址和16位主机地址。
  • 范围:128.0.0.0到191.255.255.255。
  • 子网掩码:默认为/16(即255.255.0.0)。
  • 特点:支持的最大主机数为65,534,适用于中等规模的网络。
  1. C类地址:
  • 网络号:最高三位为110,后面跟着21位网络地址和8位主机地址。
  • 范围:192.0.0.0到223.255.255.255。
  • 子网掩码:默认为/24(即255.255.255.0)。
  • 特点:支持的最大主机数为254,适用于小型网络或局域网。
  1. D类地址:
  • 用途:作为组播地址,用于将数据发送给特定的一组设备。
  • 范围:224.0.0.0到239.255.255.255。
  • 特点:不区分网络号和主机号。
  1. E类地址:
  • 用途:保留用于实验和开发,不用于公共网络。
  • 范围:240.0.0.0到255.255.255.255(但通常不包括255.255.255.255,因为它用作有限广播地址)。
  • 特点:同样不区分网络号和主机号。

三、特殊IP地址

除了上述分类外,还有一些特殊用途的IP地址,如:

  • 环回地址:127.0.0.1,用于测试TCP/IP协议和本地主机进程之间的通信。
  • 广播地址:255.255.255.255,用于将数据发送给网络中的所有设备(有限广播地址)。
  • 私有地址:用于局域网内部,不会在互联网上公开。包括A类私有地址10.0.0.0/8、B类私有地址172.16.0.0/12和C类私有地址192.168.0.0/16。
协议报文
IPV4
字段名称 占用位数(bit) 描述
版本(Version) 4 指定IP协议的版本,IPv4为4
首部长度(Header Length) 4 表示IP首部的长度,单位是4字节。最小值为5(20字节),最大值为15(60字节)
区分服务(Differentiated Services/Type of Service, TOS) 8 用于指定QoS(Quality of Service)和流量控制等参数
总长度(Total Length) 16 表示整个IP数据报的长度,包括IP首部和数据部分,单位是字节。最大值为65535字节
标识(Identification) 16 用于唯一地标识一个报文的所有分片,以便在重组时识别
标志(Flags) 3 用于标识IP分片的状态,包括保留位、禁止分片(Don't Fragment, DF)和更多分片(More Fragment, MF)
片偏移(Fragment Offset) 13 表示分片相对于原始数据报的偏移量,单位是8字节
生存时间(Time to Live, TTL) 8 表示数据报在网络中最多可以被经过的路由器数量,用于防止数据报在网络中无限循环
协议(Protocol) 8 表示数据报中的数据部分使用的协议类型,如TCP、UDP、ICMP等
首部检验和(Header Checksum) 16 用于检测IP头部在传输过程中是否出现了错误
源地址(Source Address) 32 表示数据报的发送者IP地址
目的地址(Destination Address) 32 表示数据报的接收者IP地址
可选字段(Options) 可变长度 附加的首部字段,可选地跟在目的地址之后,用于特殊需求,长度可变
填充(Padding) 可变长度 用于保证首部是4字节的整数倍,当首部长度不是4字节的整数倍时,需要填充0
数据部分(Data) 可变长度 来自上一层的数据,长度可变

子网掩码

子网掩码(Subnet Mask),又叫网络掩码、地址掩码、子网络遮罩,它用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码是一个32位地址(IPV4),不能单独存在,必须结合IP地址一起使用。

功能
  1. 区分网络地址和主机地址:子网掩码用于屏蔽IP地址的一部分,以区分网络标识(Net.ID)和主机标识(Host.ID),并说明该IP地址是在局域网上还是在广域网上。
  2. 划分子网:子网掩码可以将一个大的IP网络划分为若干小的子网络,从而提高网络的管理效率和安全性。通过子网掩码划分子网后,每个子网可以独立管理和控制,限制不同子网之间的直接通信,从而提高网络的安全性。
与IP地址的关系
  1. 确定唯一地址:子网掩码是用来判断两台计算机的IP地址是否属于同一子网络的根据。通过子网掩码和IP地址的二进制AND运算,可以确定一个IP地址所属的子网络。
  2. IP地址规划:在分配IP地址时,子网掩码可以帮助网络管理员合理规划和分配IP地址,避免地址浪费。例如,在一个拥有多个部门的企业中,可以为每个部门分配一个独立的子网,从而实现更精细的IP管理。
配置
  1. 确定网络需求:根据网络的规模和需求确定子网掩码。例如,如果需要将一个类C网络(默认子网掩码为255.255.255.0)分割成4个子网,可以使用子网掩码255.255.255.192。
  2. 计算子网地址和广播地址:根据选定的子网掩码,计算每个子网的子网地址和广播地址。例如,对于子网掩码255.255.255.192,每个子网有64个地址,其中第一个地址是子网地址,最后一个地址是广播地址。
  3. 配置网络设备:将计算出的子网地址和子网掩码配置到网络设备(如路由器、交换机等)中,确保网络设备能够正确识别和处理子网。

常用的网络命令

ifconfig
功能

ifconfig命令用于显示和配置网络接口的信息,包括IP地址、子网掩码、广播地址等。它还可以启用或禁用网络接口。

基本语法

ifconfig [interface] [options]

  • interface\]:指定要配置或显示信息的网络接口名,如eth0。

示例
  • 查看所有网络接口的信息:ifconfig
  • 启用名为eth0的网络接口:ifconfig eth0 up
  • 为eth0接口设置IP地址为192.168.1.10:ifconfig eth0 192.168.1.10 netmask 255.255.255.0
netstat
功能

netstat命令用于显示网络连接、路由表、网络接口统计信息、伪装连接以及广播域成员等。它可以帮助用户了解网络的状态和连接情况。

基本语法

netstat [options]

  • options\]:指定要显示的信息类型,如-a(列出所有连接)、-t(列出TCP连接)、-u(列出UDP连接)、-n(禁用反向域名解析,加快查询速度)等。

  • 显示所有当前连接:netstat -a

  • 显示所有TCP连接:netstat -at

  • 显示所有监听中的TCP和UDP端口:netstat -tuln

ping
功能

ping命令是最常用的网络连通性测试命令之一。它向目标主机发送ICMP Echo Request消息,并等待目标主机的ICMP Echo Reply消息。通过ping命令,用户可以检查是否能够到达目标主机以及网络延迟的情况。

基本语法

ping [options] <目标主机名或IP地址>

  • options\]:指定ping命令的选项,如-t(不间断地ping指定计算机,直到管理员中断)、-n(发送指定个数的数据包)、-l size(发送指定大小的数据包)等。

示例
  • ping百度:ping baidu.com
  • 不间断地ping指定IP地址,直到管理员中断:ping -t ip地址(注意:此命令可能会导致目标主机资源占用过高,应谨慎使用)
相关推荐
爱睡懒觉的焦糖玛奇朵6 小时前
【从视频到数据集:焦糖玛奇朵的魔法工具使用说明】
人工智能·python·深度学习·学习·算法·yolo·音视频
齐齐大魔王6 小时前
Linux-网络编程实战
linux·运维·网络
智塑未来6 小时前
app应用怎么接入广告?标准流程与落地实操方案全解析
大数据·网络·人工智能
夏天想6 小时前
人类将从“执行者“变为“总导演”,学习Ai知识
人工智能·学习
晓梦林7 小时前
Baji1靶场学习笔记
笔记·学习
wanhengidc7 小时前
私有云的作用都有哪些?
运维·服务器·网络·游戏·智能手机
Java面试题总结7 小时前
java高频面试题(2026最新)
java·开发语言·jvm·数据库·spring·缓存
CTO Plus技术服务中7 小时前
71款企业级自研产品,线上演示环境
网络
希冀1237 小时前
【CSS学习第十一篇】
前端·css·学习
苦逼的猿宝8 小时前
学生心理咨询评估系统
java·毕业设计·springboot·计算机毕业设计