网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用

文章目录

  • 前言
  • 一、网络发展各阶段
  • 二、网络通信的三大要素
    • 1.IP地址
    • 2.端口号
    • 3.网络协议
  • 三、TCP/IP五层网络模型
    • 各层级的用处
    • 网络设备所在分层
  • 四、封装和分用
    • 封装
    • 分用
    • 网络传输的实际情况
  • 总结


前言

本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果这篇文章可以帮助到你,劳请大家点赞转发支持一下!

从本篇文章开始就要分享网络编程的内容了,越发的感受到了编程的魅力,鸡汤来喽!!


一、网络发展各阶段

1️⃣单机阶段:计算机跟计算机之间是不互通的。即电脑A中的资源,电脑B是无法直接获取。只能通过外部设备进行拷贝。

2️⃣局域网阶段:局域网Local Area Network,简称LAN,(Local 即标识了局域网是本地,局部组建的一种私有网络)局域网内的主机等设备之间能方便的进行网络通信,又称为内网;两个局域网之间在没有连接的情况下,是无法进行通信的。

3️⃣广域网阶段:广域网,即 Wide Area Network,简称WAN。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。

4️⃣移动互联网阶段:移动互联网,就是将移动通信和互联网二者结合起来,指互联网的技术、平台、商业模式和应用与移动通信技术结合并实践的活动的总称。


二、网络通信的三大要素

1.IP地址

IP地址就类似于身份证上的家庭地址,

IP地址描述了该设备在互联网上的位置

简单来讲IP地址就是用来定位设备在网络上的位置,从而完成通信。

另一台设备将信息送到了这个位置上,那么这个位置上的设备就可以获得该信息。


2.端口号

在一个地址上,可能同时住了几个人。因此当信息送达后,需要通过姓名或电话来识别接收的人是谁。

端口号可以标识主机中发送数据、接收数据的进程。端口号是用来定位主机中的进程的 。(主机上的每一个进程都有一个端口号,同一主机上的不同进程的端口号必须不同)

一台主机上可能运行多个进程,因此当信息送达时,就是通过端口号来识别是哪个进程要接收信息,而后将信息送达。


3.网络协议

网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。
最终体现为在网络上传输的数据包的格式

网络协议的作用:
网络设备之间的传输媒介是光信号和电信号。通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息。网络传输的各种信息,其实本质都是传输的一串二进制数字,要想将这一串数字变成想要传递的信息,就需要双方约定好数据格式。
网络协议就是用来规定传输数据的格式

现如今的网络设备越来越多,网络环境非常复杂,因此网络协议也非常复杂。

分层的原因
因此就将复杂的网络协议拆分成 多个协议
其中一些小协议的 作用 / 定位类似
因此就针对这些小协议进行 “分类” ,同时再针对这些不同的类进行 “分层”


分层的作用
分层最大的好处,类似于面向接口编程: 定义好两层间的接口规范,让双方遵循这个规范来对接

下层为上层提供使用接口,下层即为接口的实现类(提供方),
上层使用下层提供的接口,上层即为接口使用类(使用方),

上下层互不关心对方的细节,从而更有利于维护与扩展。
(上层不关心下层如何实现的接口,下层不关心上层怎么使用接口)

上层只能够调用相邻的下层,严禁跨层调用

而实际应用当中, TCP/IP五层网络模型 使用的最为广泛。


三、TCP/IP五层网络模型


TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用_第1张图片


各层级的用处

应用层对应咱们程序员写的应用程序,而下面四层系统内核已经封装好了,因此我们应更加关注应用层,而传输层被应用层调用,所以也应了解传输层

1️⃣ 应用层:负责应用程序间的沟通。 该层的工作内容为:得到数据以后,如何处理数据。

2️⃣传输层:负责两台主机之间的数据传输。 主要为TCP协议 / UDP协议 该层的工作内容为:保证数据可靠的从源主机传输到目标主机。

3️⃣网络层:决定数据在网络中的传输路径,数据路由(决定数据在网络的路径)。 主要为IP协议 该层的工作内容为:负责地址管理和路由选择。

如在IP协议中,通过IP地址来标识一台主机,并通过路由表 的方式规划出两台主机之间的数据传输的线路。

4️⃣数据链路层:负责设备之间的数据帧的传送和识别。 主要为Ethernet以太网协议
该层的工作内容为:负责网络上两个相邻节点(通过网线/无线/光纤直接连接的设备)之间的传输。

5️⃣物理层:负责光/电信号的传递方式。
该层的工作内容为:网络通信的基础设施 网线/光纤/网络接口等硬件设备被设计时所遵守的规范协议。


网络设备所在分层


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

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

对于 一般的交换机 它实现了从数据链路层到物理层 ,也即是TCP/IP五层模型的下两层;

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


四、封装和分用

在协议分层的背景下,数据通过 封装 分用 来进行网络传输。

如何封装
发送方发送数据,会把数据从应用层依次向下,交给对应的层次的协议,进行封装。

如何分用
接收方接收数据,会把数据从物理层依次向上,交给对应的层次的协议,进行解析。


概念先知

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame),因此 数据包 == 数据报 == 数据段 == 数据帧。
经典数据报都是通过 报头 + 载荷的结构构成。

封装(Encapsulation):应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header)。
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。

分用:数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。


下面以QQ发送消息为案例讲解一下 封装 分用

忽略中间网络设备的转发过程,只将发送方发送时的封装过程与接收方接收时的分用过程

封装

发送方,层层封装,类似包装快递

1️⃣应用层

应用层(QQ这个程序)拿到你要发送的消息,并将消息封装成 应用层数据包 ,应用层调用传输层提供的api来处理这个数据包。
其中数据包的字段是由程序员手动规定的

网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用_第2张图片


2️⃣传输层

以TCP协议举例

此时传输层拿到应用层传输过来的 整个应用层数据包作为载荷再添加一个TCP报头 。然后调用 网络层提供的api 来处理这个数据报。

网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用_第3张图片

TCP报头中最重要的属性就是, 源端口号 (发送程序)和 目的端口号 (接收程序)


3️⃣网络层

此时网络层拿到传输层传输过来的 整个传输层数据报作为载荷再添加一个IP协议报头 。然后调用 数据链路层提供的api 来处理这个数据报。
网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用_第4张图片

IP协议报头中的最重要属性是 源IP (发送方主机的网络地址)与 目的IP (接收方主机的网络地址)

4️⃣数据链路层
此时数据链路层拿到网络层传输过来的 整个网络层数据报作为载荷再添加一个以太网数据帧头 / 帧尾 。然后调用 物理层提供的api 来处理这个数据帧。
以太网数据帧分为两种:封装以太网帧头 / 封装以太网帧尾

网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用_第5张图片
以太网帧头/尾中的最重要属性为与目的。 源mac地址 目的mac地址

mac地址也叫做物理地址,是描述一个主机在网络世界上的地址。
它的功能与IP地址很相似,但用途不同。
IP地址用来进行网络层的路径规划。
mac地址用来描述 数据链路层即将进行传输的两个相邻节点。

5️⃣物理层

物理层把上述的 一串0,1的二进制数据 转换成 光 /电 /电磁波信号 进行传输。


  • 注意:
    上述的所有数据报,以及下面将要讲到的,数据包,数据帧本质上都是字符串,而加上各种报头也都是进行字符串的拼接。

分用

接收方,层层分用,类似拆快递

1️⃣物理层

网卡收到 二进制的光 /电 /电磁波信号等二进制数据 ,然后进行解析,还原成 0101 这样的二进制序列 交给数据链路层
网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用_第6张图片


2️⃣数据链路层

根据传输过来的方式来交给对应的协议处理
数据链路层拿到数据报,交给以太网协议来进行解析,(如果数据是从以太网线传输过来的那么就会交给以太网协议来处理)。

数据帧头 /尾中会有一个消息类型,根据消息类型就可以知道用网络层的哪个协议了
然后数据链路层去掉数据帧头 /数据帧尾取出载荷再交给网络层

网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用_第7张图片

3️⃣网络层

IP数据报头中有一个字段,标识传输层用的哪个协议
网络层拿到数据报,根据相应的协议来分析数据,然后去掉报头,同时在做一些其他工作

然后取出载荷交给传输层
网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用_第8张图片

4️⃣传输层

每个要接收网络数据的程序都要关联上一个端口号

借助TCP报头中的重要属性,端口号来区分具体的应用程序
此处是由TCP协议解析,仍是去掉TCP报头取出载荷交给应用层

网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用_第9张图片

5️⃣应用层

交给对应的程序来解析应用层数据包,取出并使用相关数据。

此处是交给QQ这个程序来解析应用层数据包。


网络传输的实际情况

真是的网络环境十分复杂,数据的传输中间可能要经历很多节点 (交换机,路由器等设备) 进行转发,才能发送到目的地。

数据从发送方主机出发,一路可能会遇到交换机路由器等设备,最后传输到目的主机

发送方主机:将"数据" 从应用层封装到物理层,得到光或其他信号 ,然后这个信号可能会 顺着网线到达交换机或者路由器

信号如果到达交换机:交换机会进行分用, 从物理层分用到数据链路层,判断目的mac是否正确,然后进行重新封装到物理层 重新封装时封装到数据链路层时,会调整源mac与目的mac 。然后继续进行转发。

信号如果到达路由器:路由器也会进行分用, 从物理层分用到网络层,根据目的IP进行下一阶段的寻路操作,然后重新封装到物理层 ,继续进行转发。 重新封装时封装到数据链路层时,也会调整源mac与目的mac

接收方主机 一路从物理层分用到应用层 ,然后相应进程使用数据。


总结

以上就是今天要讲的内容,本文像大家介绍了网络通信的三大要素,以及常用的TCP/IP协议,以及传输过程中各层间的封装与分用。
开始网络编程的学习了,以后的内容只会越来越复杂了,大家加油啊!!!

路漫漫不止修身,也养性。

你可能感兴趣的:(JavaEE,网络,tcp/ip,网络协议,java,java-ee)