[JavaEE] 网络初识(网络通信 及 TCP / UDP / IP 封装分用 )
Author:MTingle
major:人工智能---------------------------------------
Build your hopes like a tower!
文章目录
目录
文章目录
一. 网络通信基础
1. 局域网LAN
2. ⼴域⽹WAN
3. IP地址
4. 端口号
二.协议
1. 五元组
2. 协议分层
协议分层的优点:
3. OSI七层协议:
4. TCP / IP 协议
⽹络设备所在分层
三.封装和分用
1. 封装
2.分用
3. 路由器和交换机的封装分用
一. 网络通信基础
1. 局域网LAN
局域⽹,即 LocalAreaNetwork ,简称 LAN 。 Local 即标识了局域⽹是本地,局部组建的⼀种私有⽹络。 局域⽹内的主机之间能⽅便的进⾏⽹络通信,⼜称为内⽹;局域⽹和局域⽹之间在没有连接的情况下,是⽆法通信的。
2. ⼴域⽹WAN
⼴域⽹,即 WideAreaNetwork ,简称 WAN 。 通过路由器,将多个局域⽹连接起来,在物理上组成很⼤范围的⽹络,就形成了⼴域⽹。⼴域⽹内部 的局域⽹都属于其⼦⽹。
3. IP地址
概念:IP地址⽤于定位主机的⽹络地址,就像我们发送快递⼀样,需要知道对⽅的收货地址,快递员才能将包裹送到⽬的地。(设备在网络上的位置)
格式:IP地址是⼀个32位的⼆进制数,通常被分割为4个“8位⼆进制数”(也就是4个字节),如: 01100100.00000100.00000101.00000110。 通常⽤“点分⼗进制”的⽅式来表⽰,即a.b.c.d的形式(a,b,c,d都是0~255之间的⼗进制整数)。 如:100.4.5.6。
4. 端口号
概念:端⼝号⽤于定位主机中的进程。类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货⼈(端⼝号)。有了IP可以确定主机,但是一个主机有多个程序在使用网络,这个时候就需要区分出主机收到的网络数据需要交给哪个程序
格式:端⼝号是0~65535范围的数字,在⽹络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收⽹络数据。
二.协议
概念:协议,就是一种通信过程中的约定,发送方和接收方都提前商量好数据的格式,才能确保两者之间能够正确地进行沟通,确保不同厂商之间生产出的设备能够相互配合
1. 五元组
在TCP/IP协议中,⽤五元组来标识⼀个⽹络通信:
1. 源IP:标识源主机
2. 源端⼝号:标识源主机中该次通信发送数据的进程
3. ⽬的IP:标识⽬的主机
4. ⽬的端⼝号:标识⽬的主机中该次通信接收数据的进程
5. 协议号:标识发送进程和接收进程双⽅约定的数据格式
可以在cmd中,输⼊ netstat -ano 查看⽹络数据传输中的五元组信息
2. 协议分层
网络通信过程中,需要涉及到的细节很多,如果单纯用一个协议来完成网络通信,就需要约定要方方面面的内容,就会导致协议非常复杂,所以我们就要将协议拆分,拆分成一个个功能更单一,"小而美"的协议,拆分出来的协议多了,于是就引入了协议分层
网络通信协议拆分的多了之后也是分层了许多层,把功能相似的协议放到同一层之中,上层协议会调用下层协议的功能,下层协议给上层协议提供服务,只有相邻的层次之间可以进行沟通,不能跨层次调用
协议分层的优点:
1). 上层协议直接调用下层协议即可,不需要了解下层协议的细节,相当于下层协议直接被封装好了
2). 某一层协议被替换后,对于其他层协议没有影响
当前网络现状,有很多协议都是按照分层来组织的.
3. OSI七层协议:
7 应用层
6 表示层
5 会话层
4 传输层
3 网络层
2 数据链路层
1 物理层
最初设计的时候给出的方案,但是由于过于麻烦,后续被简化成了五层: => TCP / IP 协议
4. TCP / IP 协议
应用层: 程序拿到数据之后,要用来干啥,解决什么问题
传输层:负责关注 网络数据包 的 起点和终点 (从哪儿来到哪儿去) 端到端之间的传输 比如确定起点 西安到上海
网络层: 负责关注 起点和终点 之间,要走那一条路 (路径规划) 比如确定路线:西安 -> 南京 -> 上海
数据链路层:负责两个相邻节点直接的传输 无锡到西安 (火车运输) 南京到上海 (飞机空运)
物理层: 通信过程中的基础设施. 例如: 公路,铁路,航线
⽹络设备所在分层
• 对于⼀台主机, 它的操作系统内核实现了从传输层到物理层的内容也即是TCP/IP五层模型的下四层;
• 对于⼀台路由器, 它实现了从⽹络层到物理层,也即是TCP/IP五层模型的下三层;(工作在网络层)
• 对于⼀台交换, 它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;(工作在数据链路层)
• 对于集线器,它只实现了物理层;
事实上 真实世界中的交换机/路由器要更复杂,功能更强大很多交换机,也具有一些路由器的功能,也能工作在网络层很多路由器,也具备一些交换机的功能,也能工作在数据链路层.
三.封装和分用
1. 封装
1. 应用层(应用程序)
此处用 QQ 举例:
QQ从消息输入框中获取到用户输入的 hello ,就要把这个字符串构造成一个应用层数据包,QQ这样的程序内部就设置了一个应用层协议,应用层数据包就是按照这个应用层协议约定的格式来构造的.
应用程序就会调用操作系统提供的 api ,把这个数据包交给传输层.
2. 传输层: TCP 和 UDP 协议
传输层就会把上述的数据作为一个整体,再构造成一个传输层的数据包,传输层涉及到的协议,最主要的就是 TCP 和 UDP 协议,此处假定使用 UDP 来进行通信,就会构造出一个 UDP 数据包
形如上述添加报头的过程就是封装,本质上字符串的拼接,只不过拼的报头,具有一定的结构
拼好的传输层数据包会被进一步交给下层(网络层),网络层继续封装 (交给下层指的是,下层协议提供一组 api ,上层调用这个 api 并且把刚刚构造好的参数传下去,下层协议就可以处理这个数据了)
3. 网络层: IP协议
网络层 IP 协议,把刚才得传输层的 UDP 数据包作为一个整体,再拼上 IP 协议的报头,构成一个 IP 数据包
这里构造成完整的 IP 数据包之后, IP 协议继续调用数据链路层的 api ,把数据交给数据链路层,数据链路层的协议继续对数据包进行处理
4.数据链路层: 以太网
数据链路层的核心协议是,以太网,此处的"以太"二字用于表述 网络数据传输的介质 ,以太网就是我们日常最常见到的 有线网络 ,日常用的网线称作 "以太网线" ,日常用到的网口叫做 "以太网口", 以太网数据帧 也是以 IP 数据包作为一个整体,在这个基础上添加帧头和帧尾.
这样的数据再往下交给物理层
5.物理层: 硬件设备
物理层把上述这样的以太网数据帧(二进制结构)转换成 光信号 / 电信号 / 电磁波
经过上述的一系列操作,数据终于从电脑上发出去了!!!
2.分用
我们暂时不考虑中间过程,假定数据包已经到达了 B 网卡,看一下 B 网卡会如何处理数据包,这个处理过程就叫做 "分用"
1. 物理层
B的物理层收到了 光信号 / 电信号 / 电磁波 ,就会把这些物理信号转换成数字信号(二进制的0/1),得到一个以太网数据帧,再进一步把这个数据帧交给数据链路层
2.数据链路层: 以太网
按照以太网数据帧的格式来解析,去除其中的载荷交给上层协议
3.网络层: IP协议
按照 IP 协议的格式进行解析,去除其中的载荷,再交给上层协议
4. 传输层: TCP / UDP 协议
按照 UDP 协议格式来解析,去除其中的载荷,再交给上层协议
5.应用层: QQ 应用程序
按照 QQ 应用程序内部的应用层协议格式来解析数据,QQ程序拿到这个数据后,就会在窗口给你弹出提示,消息就被显示到聊天框上
分用的过程,就是封装的逆过程
3. 路由器和交换机的封装分用
真实情况下,两个主机不太会直接通过网线直连的,而是通过一系列的交换机和路由器进行数据转发的.但是上述的封装分用过程同样适用.
如果是交换机,交换机就会把上述的光电信号转换成以太网数据帧数据,交给数据链路层,交换机的数据链路层就会对上述数据进行解析,这个解析过程,一方面要去除载荷部分,另一方面,就要解析帧头的关键信息,根据帧头的信息,决定下一步把数据往哪里发送,根据这个情况再进一步构造出新的以太网数据帧(交换机工作在数据链路层)
再把这个数据通过 物理层 发送出去
如果是路由器,情况会稍微复杂,此时就是封装分用到网络层
物理层先拿到光电信号,转换成二进制数据交给数据链路层,数据链路层再对数据进行解析,拿到载荷,交给网络层( IP 协议), IP 协议会对上述数据进一步解析,去除载荷(也会解析此处的报头),拿出数据后, IP 协议会进行重新封装,再交给数据链路层,数据链路层给数据加上新的帧头和帧尾,这个数据再交给物理层,转换成光电信号,继续传输