《破译网络通信密码:5大核心要素带你从IP直通协议栈》

 前言

本篇博客将详细初步介绍网络通信

💖 个人主页熬夜写代码的小蔡

🖥 文章专栏

若有问题 评论区见

🎉欢迎大家点赞👍收藏⭐文章 ​

d6b44a6e06316a12d6dec7f29fc29d7b.gif

ca618b2856ce45c78a02cc2a85b3b0f6.gif

一.网络通信基础


网络互联的目的是进行网络通信,也就是网络数据传输,更具体⼀点,是⽹络主机中的不同进程间,基于⽹络传输数据。那么,在组建的⽹络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使⽤IP地址来标识。

1.1 IP地址


IP地址用于定位主机的网络地址

在生活中:山西省,运城市...

在计算机中:使用一个32位,4字节数字,来表示地址

一般来说,IP地址会表示成4个0-255之间的十进制数字,并使用3个点进行分隔

比如:192.168.2.102

1.2 端口号


端口号用于定位主机中的进程(也就是主机中的软件),说白了就是区分一个主机上不同的应用程序的。

端口号是一个整数(2个字节,相对较小的数字),值得注意的是,不同的程序可以绑定到不同的端口号,要求同一个主机上的不同应用程序不能绑定到同一个端口号

(一个端口号只能被一个被一个程序绑定,但是一个程序可以绑定多个端口)

注意!:

        2字节=>0~65535

        0一般不使用

        1~1023这个范围的端口号,系统留作特殊用途,咱们自己写的程序不应该占用此范围的端口号

        还有一些知名的端口号,留改一些常见的服务器程序进行使用

        22=>ssh

        80=>http

        443=>https

        23=>teInet

在实际的通信过程中,IP端口号往往是“一对

像我们在购物软件上购买/贩卖商品,有两个最重要的信息要填写收件人地址/收件人电话发件人地址/发件人电话

1.3 协议


网络协议是网络通信所经过的所有网络设备都必须遵守的一组约定,规则,最终体现为在网络上传输的数据包的形式.

为什么需要协议呢?就好⽐⻅⽹友,彼此协商胸⼝插⽀玫瑰花⻅⾯(避免见错网友),这就是⼀种提前的约定,也可以称之为协议。

1.4 五元组


一次通信过程中必不可少的信息~

1. 源IP:标识源主机
2. 源端⼝号:标识源主机中该次通信发送数据的进程
3. ⽬的IP:标识⽬的主机
4. ⽬的端⼝号:标识⽬的主机中该次通信接收数据的进程
5. 协议号:标识发送进程和接收进程双⽅约定的数据格式

1.5 协议分层


在阅读代码时,如果这个代码比较多比较长,脑子阅读起来就会更加吃力,但是如果把代码拆分成多个方法,同一时刻,你只需要关注一个方法,不需要考虑其他的方法,此时我们脑子里维护的信息减少了,就能更容易看懂代码了.

在网络通信中也是这样,网络通信实在是太复杂了,拆分就拆出来太多的小的协议,这么多的协议也就不好管理,就需要对协议进行分层管理了。

并且按照协议的定价/作用进行分类,约定了不同层次之间的“调用关系”,“上层协议,调用下层协议”“下层协议给上层协议提供支持”

在公司中就有这样的协议:

在我们的网络通信中:

在协议分层后,还有一些其他的好处

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

2.每一层协议都可以根据需要灵活变更

1.6 OSI七层模型


OSI 七层模型既复杂⼜不实⽤:所以 OSI 七层模型没有落地、实现。实际组建⽹络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来实现。

大多出现在学校的课本上,所以我们只进行一些简单的了解

1.7 TCP/IP5层协议


TCP/IP5层协议也就是 OSI七层模型的简化版本

1.物理层:描述的是网络通信的硬件设备

描述的是网络通信的硬件设备,好比基础设施,公路,铁路...,比如使用的网线,光纤应该是什么规模的

2.数据链路层:两个相邻节点的数据传输情况

如果我从黑龙江省哈尔滨市去山西省运城市,我把路线确定了——哈尔滨=>石家庄=>太原=>运城,接下来就需要考虑每一步怎么走,也就是相邻节点如何传输

哈尔滨=>石家庄 :绿皮火车

石家庄=>太原    :复兴号高铁

太原=>运城        :和谐号高铁

3.网络层:进行路径规划

我从黑龙江省哈尔滨市去山西省运城市,可以有多种路径选择

哈尔滨=>运城

哈尔滨=>石家庄=>运城

哈尔滨=>石家庄=>太原=>运城

4.传输层:关注起点和终点

在网上买了件衣服,站在我的角度,我只关心发货地址与收件地址

5.应用层:如何使用数据(程序员最需要关注的一点)

我买了一个床刷子,可以刷床​,可以刷沙发......

1.8⽹络设备所在分层



• 对于⼀台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四
层;
• 对于⼀台路由器,它实现了从⽹络层到物理层,也即是TCP/IP五层模型的下三层;
• 对于⼀台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;

交换机的作用:是针对路由器的端口进行扩展,路由器上的端口是有限的
• 对于集线器,它只实现了物理层;

集线器:把网线一分为二了

1.9 封装与分用


封装与分用描述了网络通信过程中,基本的数据传输流程

举个栗子:用户A通过QQ把一个hello发送给用户B

发送方:

1.应用层

        QQ应用程序会把输入的hello给打包成一个应用层的数据报,假设是按照这样的格式(我自己瞎写的)

四个字段使用来分割,这里就构成了一个简单的应用层数据报(字符串拼接),上述描述的规则就是此处我们约定的应用层协议,具体使用几个字段,字段的顺序,使用什么分隔符,都是可以灵活调整的(应用层协议,往往是根据具体的场景,具体的需要,由程序员自主决定的)

最后把应用层数据包通过操作系统的api,把数据交给传输层。

2.传输层

要对应用层传来的数据报在进行打包,变成数据层的数据报~~

这里的打包过程,本质上还是“字符串拼接“,把应用层数据再拼接上传输层的报头,

传输层典型的协议有,TCP,UDP,在传输层中一个数据报=报头+载荷,报头中最关键的信息就是“源端口”和“目的端口”

传输层数据报完成后,这个数据就会交给网络层。

3.网络层

网络层的最主要的协议就是IP协议

在IP报头中最重要的就是源IP和目的IP

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

4.数据链路层

在以太网的报头中最重要的信息就是源mac地址,目的mac地址

(mac地址:用来描述一个设备在网络上的地址)

再把这个数据交给物理层

5.物理层

把接收到的数据,转换成2进制的0 1序列,通过光电信号进行传播


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

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

当数据到达B之后,B就要对上述数据进行“分用”(针对上述数据进行层层解析)


接收方:

1.物理层

拿到的光电信号 =>转换成二进制数据=>得到以太网数据报,这个数据要交给数据链路层对应的协议处理

2.数据链路层
通过以太网协议,针对以太网数据报进行解析
这个解析过程就会解析出 报头 和 报尾. 以及中间的载荷把载荷部分,进一步的再交给网络层的协议来处理

3.网络层

IP 协议,再进一步的针对网络层数据报进行解析.去掉报头,拿到载荷,再进一步把载荷数据交给上层 (传输层)

4.传输层

此处使用 UDP 协议,针对这个数据报进行解析,拿到载荷,去掉报头,把载荷数据进一步的交给上层 (应用层了)

根据端口号来区分把数据交给哪个应用程序


5.应用层


​QQ 这个程序就要进一步解析这里的数据,这个解析过程也就是按照前面程序员自定义的应用层协议来展开的,

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值