8/23 Java学习博客

网络初识

1.IP地址
描述了一个设备,在网络上的地址。
计算机中:使用了32位,4字节的数字表示地址。一般来说,IP地址就表示成4个0-255之间的十进制数字。
比如 192.168.2.100

2.端口号
区分一个主机上的不同应用程序

端口号也是一个整数(2个字节,相对比较小的数字)
要求同一个主机上的应用程序,不能关联到同一个端口号
(一个端口号只能被一个程序绑定,但是一个程序可以绑定多个端口)

2字节就是 0-66535

0一般不使用 , 1-1023这个范围端口号,系统留作特殊用途,我们写的程序不应该占用,就比如
22 ssh
80 http
443 https
23 telnet

在实际的通信中 IP和端口往往是一对

就比如唐僧说 贫僧自东土大唐而来,到西方拜佛求经

贫僧就是源端口 东土大唐源ip 西方目的ip 拜佛目的端口

3.协议
协议就是一种约定,约定了通信双方按照啥样的方式来传递数据

这里我们就可以得到个五元组
**源ip 源端口 目的ip 目的端口 协议类型 **

这个五元组就是一次通信过程必不可少的信息

4.协议分层

平时我们写代码,代码多了复杂了,我们就需要把代码拆分成多个部分,便用维护 解耦

那网络通信的场景可以会比较复杂,很多问题需要通过协议来解决,如果我们搞一个大的协议解决所有问题,这个协议就很庞大,非常复杂。我们就可以把大协议拆分成小协议,起到化繁为简的作用。

但是网络通信太复杂,一分就分出来很多个小协议,这时候我们就需要对协议进行分层

按照协议的定位/作用 分类 并且约定了不同层次之间的‘调用关系’

(1).协议分层之后,上层和下层彼此之间就进行了封装,使用上层协议不必多关注下层协议 ,使用下层协议也不用多关注上层。

就比如打电话
上层是语言层,下层是通信设备层

上层之间用汉语协议对话,不需要理解通信设备的电话协议

(2)每一层的协议可以根据需要进行灵活的替换
就比如语言层 我们可以不用汉语 用英语

分层的好处多多,所以在网络世界都是这种分层结构

5.经典的网络分层模型

(1)OSI七层网络模型
应表会传网数物

(2)TCP/IP五层模型
应传网数物

数据链路层 负责将网络层的数据包封装成帧,进行MAC地址寻址和错误检测。

物理层 负责在物理媒介(如电缆、光纤)上传输原始的比特流。

对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/五层模型的下四层

对于一台路由器,它实现了从网络层到物理层,也即是TCP/P五层模型的下三层

对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层(交换机的作用,是针对路由器的端口进行扩展路由器上的端口可能是有限.不够.)

对于集线器,它只实现了物理层;

接着我们学习了
6.封装和分用
描述了网络通信过程中,基本的数据传输流程.

**封装 **

举个例子:
考虑A通过QQ把一个hello传递给B
发送方:

1.应用层
QQ应用程序.QQ就会把用户输入的”hello”,给打包成一个应用层的数据报(这个数据报的格式,得是qq的程序员才能知道)
假设是按照这样的格式:源qq,目的qq,发送时间,发送的内容

四个字段.使用,来分割.
这里就构成了一个简单的应用层数据报.
(字符串拼接)

上述描述的规则,就是此处我们约定的应用层协议。具体是用几个字段,字段的顺序如何,使用什么符号分隔.....都是可以灵活调整的.(应用层协议,往往是根据具体的场景,具体的需要,由程序员自主决定的)

就可以把应用层数据报,通过操作系统的api,把数据交给传输层.

2.传输层

就要对刚才的应用层数据,再进行打包,变成传输层的数据报~~
这里的打包过程,本质上还是"字符串拼接”把刚才的应用层数据,基础上拼接上传输层的报头.

一个数据报=报头+载荷,进行封装的过程,也就是给数据添加更多的
"辅助信息”的过程.

传输层典型的协议,TCP,UDP

TCP(传输控制协议)和UDP(用户数据报协议)

TCP是面向连接的协议,而UDP是无连接的协议。

TCP协议提供了一种可靠的服务,确保数据能够完整地从发送端传输到接收端。TCP在发送数据之前需要在两个设备之间建立连接,并在数据传输过程中维持这个连接。TCP使用三次握手方法来建立连接,确保数据的顺序和完整性。如果在传输过程中数据包丢失,TCP会请求重新发送这些数据包。

TCP的特点包括:

面向连接:在数据传输前需要建立连接。

可靠性:确保所有数据包都能到达接收端。

数据顺序:保证数据包的顺序与发送顺序一致。

流量控制:根据接收端的处理能力调整发送速度。

拥塞控制:避免网络过载。

与TCP不同,UDP是一种无连接的协议,它不保证数据的可靠传输。UDP在发送数据时不需要建立连接,也不会确认所有数据包都已到达。UDP适用于对数据传输速度要求高但可以容忍一定数据丢失的场景,如实时视频/音频传输和在线游戏。

UDP的特点包括:

无连接:不需要建立连接即可发送数据。

不可靠性:不保证数据包的完整到达。

速度快:由于没有连接建立和维护的开销,UDP的传输速度通常比TCP快。

适用于多播和广播:UDP支持数据包的多播和广播。

UDP常用于实时应用,如视频会议、在线游戏和域名系统(DNS)查询。

以UDP为例

UDP的报头+UDP载荷(123456,654321,2023-09-24 12:00:00, hello)

UDP报头中最关键的信息就是“源端口"和"目的端口”

传输层数据报搞好了之后,这个数据又会进一步的交给网络层.

3.网络层
网络层最主要的协议,是IP协议

IP报头+IP载荷(UDP的报头+123456, 654321,2023-09-24 12:00:00, hello)

IP报头这里也包含很多重要的属性.其中最重要的属性
就是源IP和目的IP

网络层的数据打包好了之后,继续把数据交给"数据链路层"再来进一步打包

4.数据链路层
以太网

以太网报头+IP报头+UDP的报头+123456, 654321, 2023-09-24 12:00:00, hello+尾

以太网报头中,包含最重要的信息
就是源mac地址,目的mac地址.也是用来描述一个设备在网络上的地址的。

那我就在想这个mac和ip都是表示设备在网络上的地址 是不是重复了

那其实不是 他们都是网络地址 只是工作范围不一样

MAC 地址描述的是设备在数据链路层的“物理地址”(硬件地址),通常固定在网卡上。

那 IP 地址则被称为设备的“逻辑地址”,用于在网络层标识设备在网络中的位置,并负责路由寻址。

简单比喻:

MAC 地址:像设备的“身份证号”,出厂自带,一般不变,用于局域网内识别设备。

IP 地址:像设备的“当前住址/邮寄地址”,可以变化,用于在不同网络之间找到设备。

那我又在想既然大家都用IP 192.168.0.1,为什么不会冲突?

答案的核心在于:私有 IP 地址只在各自的局域网内部有效,不能直接出现在公网上,而且不同局域网之间是相互隔离的。

1.私有 IP 地址只在各自的局域网内有效,不能上公网;

2.不同局域网之间是隔离的,数据包不会直接互通;

3.上网时通过 NAT 转换成全球唯一的公网 IP,所以不会在互联网上冲突。

5.物理层
把上述数据,转换成2进制的01序列.通过光信号/电信号进行传输

总结:
从上层协议到下层协议,层层给数据报添加报头
这个过程称为"封装”

数据发送出去之后,就会经过一系列的交换机和路由器进行转发.
A和B一般来说不是直接网线连接的.中间还要经过很多的交换机/路由器设备进行转发.

当数据到达B这边之后,B就要针对上述数据进行

"分用" (针对上述数据报进行层层的解析)

如果经过路由器:就会封装分用到网络层.路由器解析到网络层,拿到IP地址,决定进一步如何传输.下一步传输的时候,又会重新经过网络层,数据链路层和物理层的封装。如果经过交换机:就会封装分用到数据链路层。

posted @ 2026-08-30 19:55  曾章吉的浩吧  阅读(4)  评论(0)    收藏  举报