首页 > 其他分享 >网络初始:TCP/IP 五层协议模型 & 网络通信基本流程

网络初始:TCP/IP 五层协议模型 & 网络通信基本流程

时间:2024-11-09 08:46:28浏览次数:5  
标签:网络通信 协议 数据 IP TCP 传输层 数据包 链路层

目录

1. 名词解释

1.1 局域网

1.2 广域网

1.3 交换机

1.4 IP 地址

1.5 端口号

2. 协议

2.1 认识协议

2.2 五元组

 3. 协议分层

3.1 分层的作用

3.2 OSI 七层网络模型 & TCP/IP 五层(四层)协议模型

4. TCP/IP 五层(四层)网络模型

4.1 物理层

4.2 数据链路层

4.3 网络层

4.4 传输层

4.5 应用层

5. 网络数据通信的基本流程

5.1 封装

5.2 分用 

6. 网络设备所在分层 [面试题]


咱们国家的互联网发展历程: 

单机时代 => 局域网时代 => 广域网时代 => 移动互联网时代(目前阶段)

1. 名词解释

1.1 局域网

把两台设备连接到同一个路由器上, 那这两台设备就在同一个局域网中了.

举个例子, 

2000年后, 国内网络主键普及开来, 出现了很多的网吧, 但那时候, 想要进行联机对战, 就只能在同一个网吧/机房中, 使用同一个网络, 出了网吧就不行了.

那时候就是局域网时代.

1.2 广域网

广域网其实就是一个大的局域网. 把多个局域网连到一起, 就成了广域网.

全世界最大的广域网, 称为"因特网(The Internet)".

因此, 局域网和广域网只是一个相对的概念.

1.3 交换机

大家知道, 路由器上的接口很少, 家有路由器一般只能插 4 个网线(1 WAN口连运营商的设备).

而 交换机, 可以视为 "对路由器的接口进行了扩展"(类似于插排的功能), 交换机上有多个插口, 别的设备连接到交换机上, 就等价于连接到路由器上(都是同一个局域网).

1.4 IP 地址

IP地址用于定位一台设备所在的网络地址.

1.5 端口号

一台设备上会有多个应用程序, IP 地址是用来标识一台设备的, 而端口号就是用来区分这台设备上的应用程序的.(每个程序的端口号都是不同的)

举个例子:

我们在网购时, 需要填写收货地址, 比如: xxx省xxx市xxx大学.

这个地址就是 "IP 地址", 但是这个大学中有上万个人, 不能明确表示收货人是谁. 

那快递小哥就会通过手机号来确定收货人到底是谁, 而手机号就可以认为是 端口号.


2. 协议

2.1 认识协议

所谓协议, 通俗来讲, 就是指事先约定好的规则. 

网络协议, 就是通信双方对于 发送/接受 数据格式的约定. (约定好我该怎么发送, 你该怎么解析)

当多个主机设备进行通信时, 只有多个主机遵守的是同一套协议, 此时的通信才是有意义的.

举个例子:

大学中, 同学们都来自五湖四海, 都有着自己的家乡话, 但是大家交流起来毫无问题, 因为大家说话聊天时, 都遵循着同一个协议 --- 普通话.

2.2 五元组

五元组是非常关键的五个信息, 每进行一次网络通信, 就会涉及到五元组:

  1. 源 IP : 数据包从哪台设备来的
  2. 源端口 : 数据包从哪个程序来的
  3. 目的 IP : 数据包要发送到哪台设备
  4. 目的端口 : 数据包要发送到哪个程序
  5. 协议类型

"源" => 从哪来的;  "目的" => 到哪去

举个例子:

"贫僧自东土大唐而来, 到西方拜服求经而去" , 其中: 

东土大唐 => 源 IP

唐僧 => 源端口

西方 => 目的 IP

佛 => 目的端口

 3. 协议分层

网络通信是一个非常复杂的过程, 如果就设计一个协议来制定网络通信中方方面面的规则, 那这个协议将会非常大非常复杂.

于是, 就将协议进行了拆分, 并且将拆分后的这些小的, 功能单一的协议进行了分类, 也就是协议分层.

分层后, 不同层的协议间有以下的要求:

  • 只有上下两层相邻的协议间才可以进行交互
  • 上层协议可以调用下层协议(下层协议可以给上层协议提供服务)
  • 协议之间的交互, 不能跨层进行 (跨级汇报, 是职场大忌)

3.1 分层的作用

协议分层具有以下好处:

  1. 封装. 上层协议不需要了解下层协议的细节. (比如下图中, 我们打电话时, 只需会说汉语就可以了, 不需要关注电话机的工作原理)
  2. 解耦. 分层之后, 可以灵活的替换其中的某一层, 对整体的影响很小. (比如下图中, 打电话的人可以说汉语, 也可以说英语; 打电话可以使用电话机, 也可以使用无线电)

3.2 OSI 七层网络模型 & TCP/IP 五层(四层)协议模型

OSI 将协议分为七层, 分别为:

  1. 物理层(Physical Layer)
  2. 数据链路层(Data Link Layer)
  3. 网络层(Network Layer)
  4. 传输层(Transport Layer)
  5. ‌会话层(Session Layer)
  6. 表示层(Presentation Layer)
  7. 应用层(Application Layer)

但是呢, OSI 的协议分层体系, 只存在于教科书上, 由于体系太过复杂, 所以真实的网络分层方式并非如此, 而是采用了更加简化的版本, 即 TCP/IP 五层(四层)协议模型. 

4. TCP/IP 五层(四层)网络模型

(五层/四层 只是叫法上的差异, 四层是因为把数据链路层和物理层看做一个整体了(这俩和硬件的相关性都很大), 这里就按照五层来讲了~)

TCP/IP是⼀组协议的代名词,它还包括许多协议.

TCP/IP 五层模型又称为 TCP/IP 协议栈, 类似于调用栈, 即上层协议可以调用下层协议提供的 api.

在 TCP/IP 五层模型中 , 对协议这样进行分层(从上往下):

  1. 应用层
  2. 传输层
  3. 网络层
  4. 数据链路层
  5. 物理层

其中, 越往上层越偏向软件, 越往下层越偏向硬件.

其中应用层就是面向应用程序的, 以后咱们程序员主要就是工作在应用层.

而传输层和网络层是由操作系统内核实现的, 操作系统也提供了供应用层调用的接口(api).

数据链路层和物理层就是直接和硬件相关的了.

4.1 物理层

物理层规定了网络通信中的一些硬件设备要符合的要求.

比如, 约定 网线, WiFi, 光纤(光猫) ... 这些硬件设施要满足的要求是怎样怎样的.

可以把整个网络体系想象成是一个物流系统, 而物理层就是在铺桥修路~

有了物理层, 才能有后续的网络通信~

4.2 数据链路层

数据链路层, 是完成两个相邻的节点/设备间的通信. (通过网线, 电脑和路由器/交换机相连, 那么这台电脑和路由器/交换机就是相邻节点/设备)

通俗来说, 数据链路层, 就是先考虑一小步该怎么走.

举个例子, 

数据链路层, 可以想象成高中时, 你和你的同桌传纸条. 你和你同桌距离很近, 不容易被老师发现, 比较容易完成.

4.3 网络层

网络层, 是基于数据链路层的, 是指任意两个设备之间的通信(这两个设备间可能隔着很多的路由器和交换机). 

网络层, 侧重于通信的中间过程是怎样的.

举个例子,

网络层, 可以想象是你跟教室里另外一名同学传纸条, 可能你在最后一排, 而ta在第一排, 需要让中间的同学一个一个的传, 最终才能到那名同学的手中.

4.4 传输层

传输层, 也是任意的两个设备之间的通信, 但和网络层不同的是, 传输层不考虑中间过程是怎样的, 只考虑起点和终点.

举个例子,

淘宝上的卖家, 卖出去衣服后, 把商品给物流公司后:

  • 卖家只考虑包裹的发出地址和收件地址, 不用考虑中间的路程是怎样规划的, 不用考虑用什么设施来运输.
  • 而物流公司就得考虑中间是怎么走的, 走哪条路线才能到达目的地.

此时, 卖家就是传输层, 物流公司就是网络层.

4.5 应用层

应用层, 负责应用程序间沟通. 可以通俗的理解为, 我们买家拿到包裹后怎样使用.

这里通过网购的例子, 将这四层贯通一下:

  1. 应用层 => 我, 考虑好收到货后怎样使用
  2. 运输层 => 卖家, 考虑好发件地址和目的地址
  3. 网络层 => 物流公司, 考虑并规划好包裹发出地和目的地的路线, 进行运输
  4. 数据链路层 => 快递小哥, 考虑相邻的节点, 将包裹送到我手中

5. 网络数据通信的基本流程

5.1 封装

发送数据时, 从上层到下层, 需要对数据逐层进行加工(添加报头), 这个过程就称为 "封装"(包装数据).

比如, 我正在QQ上给别人发消息, 这个消息是 "hello".

那么, 这个消息的发出, 需要经过一系列 封装 的过程.

1. 第一步:

应用程序获取到用户的输入, 构造一个应用层的数据包.

这个数据包, 通常是"结构化数据"(类似 C 的结构体, 有多个属性), 

发送数据的时候, 会把 结构化数据, 转化为 字符串/二进制 bit 流的数据 => 序列化

接受数据的时候, 会把 字符串/二进制 bit 流的数据, 转化为 结构化数据 => 反序列化

因为网络传输的数据, 本质上都是以 ''字符串" 或者 "二进制 bit 流" 的形式进行传输的.

而这个应用层的数据包, 就遵守着应用层协议(这个协议都是开发这个程序的程序员设定的).

假设, 遵守这样的协议格式: 发送者QQ号, 接受者QQ号, 消息发送时间, 消息内容

那么, 应用层数据包如下:

2. 第二步

接着, 应用程序调用 传输层 提供的接口(socket api), 把数据往下层传输, 交给传输层.

传输层在拿到数据后, 会根据传输层的协议, 在 "应用层数据包" 的基础上构造出 "传输层数据包".

(传输层的主要协议有两种: TCP, UDP. 这里以 TCP 为例)

并且, "传输层数据包" 的 报头 中, 包含了五元组中的 源端口和目的端口.

报头 可以理解为 标签, 里面包含了本次传输的关键信息.

比如, 卖家发货时, 肯定不是把商品光秃秃的给物流公司, 肯定会先包装好, 物流公司也会在快递袋上贴快递单(上面有收货人信息).

报头, 就可以理解为这些商品外包装, 或者快递单.

3. 第三步

传输层构造好数据后, 调用网络层的 api , 把传输层数据包交给网络层.

网络层继续进行处理, 在网络层中, 最主要的协议是 IP 协议, IP 协议继续对数据包进行加工(拼上 IP 报头)

IP 数据包的报头中, 包含了五元组的中的 源IP和目的IP.

到目前为止, 五元组中的四个关键信息已经包含了(源端口, 目的端口, 源 IP, 目的 IP),

还差一个 协议类型.

但是, 协议不止只有一种(五层协议), 所以每层数据包的报头中, 都包含了上层使用的哪个协议:

  1. 物理层数据包的数据信息, 和数据链路层使用的协议直接相关.
  2. 数据链路层得到的数据包的报头中, 记录了网络层使用的哪个协议
  3. 网络层数据包(IP 数据包)的报头中, 记录了运输层使用的哪个协议
  4. 运输层数据包(TCP 数据包)的报头中, 记录了交给应用层的哪个应用程序

注意:

TCP 协议是不关心载荷内容是啥的; IP 协议也不关心载荷内容是啥.

4. 第四步

网络层继续调用 数据链路层 的api , 把 IP 数据包交给数据链路层.

数据链路层的核心协议, 就是"以太网", 以太网这个协议就会在网络层数据包的基础上进一步加工.

(数据链路层构建出的以太网数据包, 不仅添加了 以太网报头, 还添加了以太网报尾)

(到目前为止, 数据还在主机上转悠, 还没出门~~)

注意, 谈到网络传输的 "基本数据单位", 涉及多个术语(网络数据包/帧/报/段):

  1. 段(segment) --- TCP 使用
  2. 报(Datagram) --- UDP 使用
  3. 包(packet) --- IP 使用
  4. 帧(frame) --- 数据链路层使用(以太网数据帧)

我们 Java 程序员对这些术语就不做严格区分了, 混着用也没问题~

5. 第五步

以太网会继续将这样的数据交给物理层(硬件设备 --- 网卡)

网卡会把上述二进制数据, 最终以 光信号/电信号/电磁波信号 传播出去. (此时, 数据才真正出门了~~)

综上, 

发送数据时, 从上层到下层, 需要对数据逐层进行加工(添加报头), 这个过程就称为 "封装"(包装数据).

这里的 封装, 和面向对象中的封装, 不是一个封装, 这里的封装是指网络中的自己的专业术语.


5.2 分用 

数据到达接收方主机后, 需要从下层到上层, 逐层进行解析, 这个过程, 就叫做 "分用".(封装的逆向过程)

1. 第一步

数据(光电信号)到达接收方的网卡, 网卡把光电信号还原成二进制 0101...

网卡再把二进制数据交给数据链路层.

物理层接收到数据的类型, 和数据链路层是息息相关的.

  1. 光纤/网线(有线) 来的数据, 数据链路层则按照 以太网 协议进行解析
  2. wifi(无线) 来的数据, 数据链路层则按照 802.11 协议进行解析
  3. 以太网和 802.11 是并列的关系, 本质是一样的, 都是封装分用, 但其中报头报尾不同
  4. ......

2. 第二步

数据链路层按照以太网协议进行解析, 把报头和报尾取出来, 剩下载荷, 将载荷往上传递交给网络层.

注意: 以太网报头中有专门的属性, 描述了 网络层 使用的是哪个协议. 

 3. 第三步

网络层拿到数据后, 按照 IP 协议进行解析, 取出报头, 再把载荷向上传递交给传输层.

注意: IP 报头中也有专门的属性, 描述了传输层使用的是哪个协议.

4. 第四步

传输层拿到数据后, 也是类似: 按照 TCP 协议进行解析, 取出报头, 将载荷向上交给应用层(准确来说是交给哪个应用程序).

注意: 传输层报头中, 描述了目的端口号, 告知将数据交给哪个应用程序.

5. 第五步

QQ应用程序拿到传输层给的数据后, 按照程序员指定的协议, 解析应用层数据, 拿到关键信息, 展示到聊天界面上, 给出相应提升.

(不同的应用程序, 使用的是不同的应用层协议进行解析的)

综上, 发送的数据以光电信号的形式到达对方主机后, 从下层到上层逐层进行解析("拆包")的过程, 就叫做分用.


6. 网络设备所在分层 [面试题]

上文我们考虑的只是, 当前主机数据发送前和对方主机数据接受后的事情.

但是, 数据传输的中间过程也是涉及到 封装分用的.

  • 主机, 工作过程涉及: 物理层 => 应用层(通过应用程序满足网络通信的需求)
  • 路由器, 工作过程涉及: 物理层 => 网络层(组建局域网, 进行网络数据包的转发)
  • 交换机, 工作过程涉及: 物理层 => 数据链路层(对路由器接口的扩展, 不需要考虑组网的问题)

路由器的封装分用过程:

  • 主机的数据到达路由器后, 物理层, 数据链路层, 网络层(没有传输层) 逐层进行解析, 重新构造出网络层数据包, 重新构造出以太网数据帧, 重新构造出二进制数据, 再次进行转发.
  • 路由器工作在网络层(又称为三层转发)

交换机的封装分用过程:

  • 主机的数据到达交换机后, 物理层, 数据链路层(没有网络层)逐层进行解析, 再重新构造出 以太网数据包, 重新构造出二进制数据, 转发给下一个设备即可.
  • 交换机在数据链路层取得的 以太网报头, 其中的信息就足以支持交换机来进行下一步的工作.
  • 交换机工作在数据链路层(二层转发)

传输过程中, 信号是会有衰减的, 但是到达下一个节点时(交换机/路由器), 下个节点重新发送数据时, 又会把信号重新加强.


 END

标签:网络通信,协议,数据,IP,TCP,传输层,数据包,链路层
From: https://blog.csdn.net/2401_83595513/article/details/143405553

相关文章

  • 【题解】「NOIP2024模拟赛24 T3」钙绿
    【题解】「NOIP2024模拟赛24T3」钙绿https://www.becoder.com.cn/contest/5715/problem/3\(\mathcal{Description}\)给定\(n,p,m\)。对于每个\(k=0,1,\dots,m\),统计满足下面条件的\(n\)位\(10\)进制数:(允许前导零各位数之和不超过\(k\)。\(p\)能整除这个数。数据......
  • 《基础设施、政策与发展杂志》-外文期刊征稿 Journal of Infrastructure, Policy and
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz三、大会介绍《基础设施、政策与发展杂志》(JIPD)是一本多学科、双盲同行评审期刊,致力于发表有关基础设施、经济发展和公共政策的高质量文章。......
  • 【题解】「NOIP2024模拟赛24 T2」子序列们
    【题解】「NOIP2024模拟赛24T2」子序列们https://www.becoder.com.cn/contest/5715/problem/2\(\mathcal{Description}\)给定一个0/1串\(a\),你需要生成一个长度为\(n\)的序列\(b\),其中\(b_i\)为\(a\)的一个子序列,且满足:\(|b_i|=n-i+1\);\(\foralli\in(1,n]\),\(b......
  • NOIP2024模拟赛 #17 总结
    省流:T1对\(998244353\)取模,T2对\(mod\)取模,T3求排名,T4对\(10^9+7\)取模。比赛出锅不少。开T1,发现并没有前几天那么简单,对着题目盯了\(1\)h毫无思路,发现没看见所有高塔的高度两两不同这个条件,看到后略有思路,但是还不太行。后来说大样例出锅了,幸好没写。T2很......
  • Regex 历史 / 规范 / 流派 | JavaScript 匹配 emoji
    注:本文为几篇regex相关合辑。机翻,未校,未整理。RegexHistoryandHow-ToCrystalVillanuevaJan14,2021Aregularexpression,alsoknownasregexorregexp,isaspecialstringthatpresentsitselfrepeatedlyinasearchpattern;today,programmersuse......
  • [2024.11.8]NOIP 模拟赛
    省流:若为IOI赛制,则全机房一定同分。赛时T1看上去不太会。首先发现最大的数字的位置是固定的,然后我大胆考虑将数字从大到小依次填充。对于当前数字,一共会有四种情况:\(a,b\)数组都有,此时显然位置固定。\(a\)有或\(b\)有,此时能填的位置显然是一行或一列,即这一行或一列上......
  • 如何获取IP地址专用SSL证书
    随着网络安全意识的不断提高,越来越多的网站和服务开始采用SSL证书来加密数据传输,保护用户信息的安全。对于那些仅通过IP地址访问的服务来说,获取IP地址专用SSL证书就显得尤为重要。1.准备阶段确认公网IP地址确保您拥有一个可以在互联网上访问的公网IP地址。2.注册账号和......
  • P1525 NOIP2010 提高组 关押罪犯 题解
    Link:P1525NOIP2010提高组关押罪犯-洛谷分析首先题目给出了罪犯与罪犯之间的矛盾关系,这让我们可以想到图或并查集。然后,题目又说了要把罪犯分入两个监狱,也就是把罪犯看作点,要把这些点分入两个集合,这很自然地可以想到二分图。再然后,市长只会去看列表中的第一个事件的影响力......
  • [赛记] 多校A层冲刺NOIP2024模拟赛19
    图书管理85pts2s1e10助我85pts;考虑正解,仍然是算贡献;这个题有一个很通用的套路:将大于某数的数看成$1$,小于这个数的数看成$0$;那么我们枚举$a_i$,运用上面的套路将$i$左边的前缀和算出来并开个桶记录一下端点编号之和,然后在枚举$i$右边的同时找到现在的前缀和......
  • 通过Guava实现ip限流访问
    一分钟内某个ip请求制定接口超过10次,则禁止该ip10分钟内不能访问,通过Guava实现一个拦截器,拦截指定接口来处理 mportcom.google.common.cache.Cache;importcom.google.common.cache.CacheBuilder;importjava.util.concurrent.TimeUnit;importjava.util.concurrent.ato......