写点什么

网络通信协议篇(一)

2020 年 3 月 22 日

网络通信协议篇(一)

网络通信协议概述

网络通信协议本质上是由一组协议组成的,而协议的本质则是一组规则和规范的组合体。举个例子:两个物流业务点在地域角度看是两个独立的整体,那么要何如对接才能把货物从一点输出到另一点呢?首先他们需要商定一个暗号,这个暗号的作用是可以证明货物是输出地发出来的,当前的站点可以进行接收,这个暗号可以任何形式:工牌、工服等,接下来还需要考虑用什么交通工具,可以是电车,也可以无人机等。



其中工服、工牌、电动车属于一个一个规则和规范,而他们结合起来就形成了配送的协议,而站点按照这个协议最终就可以完成货物的运输和配送。


OSI 七层模型、TCP/IP 四层模型

随着技术的发展,计算机的应用越来越广泛,计算机之间的通信开始了百花齐放的状态,每个具有独立计算服务体系的信息技术公司都会建立自己的计算机通信规则,而这种情况会导致异构计算机之间无法通信,极大的阻碍了网络通信的发展,至此为了解决这个问题,国际标准化组织(ISO)制定了 OSI 模型,该模型定义了不同计算机互联的标准,OSI 模型把网络通信的工作分为 7 层,分别是 物理层、数据链路层、网络层、传输层、会话层、表示层和应用层


这七层模型是设计层面的概念,每一层都有固定要完成的职责和功能,分层的好处在于清晰和功能独立性,但分层过多会使层次变的更加复杂,虽然不需要实现本层的功能,但是也需要构造本层的上下文,空耗系统资源,所以在落地实施网络通信模型的时候将这七层模型简化合并为四层模型分别是 应用层、传输层、网络层、网络接口层(各层之间的模型、协议统称为:TCP/IP 协议簇)。



TCP/IP 分层解析

一、网络接口层


TCP/IP 的网络接口层承接 OSI 七层模型中物理层和数据链路层的功能,对标物理层的部分完成的是将高低电压转换成传输信号(电信号、无线信号等)传递给目标方;对标数据链路层的部分则是规定了输出信号组的规则及格式,统一标准后则为我们所知的以太网协议(ethernet),协议规定网络接口层每一个信号数据包称为一个数据帧,数据分为 head 和 data 两部分,其中 head 部分包括:


  • 发送者地址—6 字节(mac 地址)

  • 目标地址—6 字节(mac 地址)

  • 数据类型—6 字节


mac 地址释义:以太网协议规定接入的网络设备必须具备网卡,而网卡的标识就是 mac 地址,地址为 6 个字节,前三个字节为标准化组织给厂商分配的编码,后三个字节为厂商生产的序列号,由此保证地址唯一。


数据部分为上层需要向外发送的数据,如下:



具有了上述规则,两台计算机就可以进行通讯了,而通讯的方式则为广播,类比为通信的时候先问所有人”故宫”是谁家的地址,局域网内地址是”故宫”的主机则会回复自己的 mac 地址,这个模式在小型的局域网主机数相对较少的情况下可以玩转,但整个世界数以亿计的主机,如果一台主机需要知道目标的地址就需要给世界上所有的主机都发一个广播消息,那就成为灾难了,故需要下一层设计解决这个问题。


二、网络层


由上层的遗留问题可知,必须找到一种方法,区分相同局域网内的直播域,不是同域内的请求需要进行转发广播,而网络层就是解决这种问题而存在,它定义了一套地址称之为 ip 地址,有读者可能会有疑问:为什么不使用 mac 地址在上一层完成这个需求呢?这是因为 mac 地址只跟厂商有关,不能标识局域网内网规则,就类比笔者虽然身份证是黑龙江人但是人却在北京飘,身份证类比 mac 地址,身份证是无法证明本人到底在哪也就无法做下一步骤了,这个网络层的协议目前通常使用的是 IPV4,协议规定地址为 32 位表示,通常大家看到 ip 地址都是以十进制展示,每 8 位以 . 号分割,例如:192.168.1.1,IP 数据包同样分为 head 和 data 两部分:



接下来我们通过抓包的形式来看一下 ip 头的主要字段:



至此网络层帮我们定位目标网路,网络接口层帮助我们锁定目标主机,我们之间距离天涯海角的两台主机已经可以完成通讯,但是每一台机器上有好多服务,比如邮件服务、微信、咚咚,如何定位是哪个应用的数据包呢,这需要下层设计给予解决。


三、传输层


由上层协议遗留问题可知,我们需要定位是哪个服务程序的数据包,不然会造成数据错乱,而传输层正是解决此类问题,传输层依靠端口来唯一定位一个服务,而发送端端口+接收端端口组成一组链接,传输层的作用总结为提供端口到端口的通信,传输层通常是指 tcp(udp)协议,TCP 协议提供可靠性传输能力、分包传输能力。tcp 层数据包也分为 head 和 data 部分:



接下来让我们通过抓包的方式来看一下 tcp 头信息的主要字段:



至此两台主机已经有可以完成指定服务信息传输的能力,但是不同应用程序所要应用的场景不同,需要数据的数据结构也不尽相同,截止目前的能力无法为丰富多彩的应用程序提供规范的数据信息,此问题需要由下层设计给予解决。


四、应用层


由上层协议遗留的问题可知,我们需要为丰富多彩的应用程序对应不同场景设计不同的数据结构。而应用层正是为了解决此问题而存在,所以需要应用层定义丰富多彩的协议来对应适配复杂场景所需的数据结构,故应用层定义为规范了应用层的数据结构,目前大家常用的应用层协议有 http、https、ssl、ftp 等。



接下来让我们通过抓包的形式,来看看应用层(http)协议数据信息:



至此两台主机对等应用程序信息传输的条件都已具备,可以愉快的开始通信了。


小结

本文通过问题解决维度梳理了网络协议层次结构及对应层次的作用、存在意义,下一部分将会从 tcp 三次握手、四次(三次)挥手为切入点分析 tcp 的可靠性发送等,小伙伴们如果对本文有疑问可以咚咚咨询,可以加入问题讨论群,大家一起进步。


2020 年 3 月 22 日 21:04133

评论

发布
暂无评论
发现更多内容

漫谈中台系列:《1小时带你深入理解中台》学习整理

程序员架构进阶

架构 中台 技术 探索与实践 28天写作

Spring Boot返回Json数据及数据封装

武哥聊编程

Java springboot SpringBoot 2 28天写作

大作业一

golangboy

架构师训练营第 1 期

如何让多个线程按顺序执行?

Java鱼仔

Java 多线程 高并发

架构师训练营 - 第一周

石子头

python 变量

老赵

Python 28天写作

架构师训练营大作业(二)

Bear

架构师训练营第 1 期

架构师训练营 - 大作业(二)

树森

现代浏览器原理

roadup

前端 浏览器 基础知识

架构师训练营 week12 课后作业

花果山

大作业

ABS

生产环境全链路压测建设历程 26:FAQ之 压测结束阶段的相关问题

数列科技杨德华

28天写作

当目的地无法抵达「幻想短篇 3/28」

道伟

28天写作

架构师训练营第 2 期 第12周总结

月下独酌

架构师训练营第2期

谬误词典:因果谬误

lidaobing

28天写作 谬误词典

Hadoop安装配置

小马哥

大数据 hadoop 28天写作

【架构师训练营 1 期】大作业一

诺乐

架构师训练营-大作业二

石子头

架构师训练营大作业(一)

Bear

架构师训练营第 1 期

架构二期-第十二周作业(1)

浮生一梦

第十二周 2组 架构师训练营第2期

读《专访朱啸虎》,我学到了什么?

李忠良

学习 写作 投资 创业者 读后感

架构师训练营第十二周总结

xiaomao

28天瞎写的第二百一四天:考前临时抱佛脚

树上

28天写作

算法:罗马数字转换为整数,RxSwift的好处,git pull问题解决error: cannot lock ref,产品经理新人如何落地 John 易筋 ARTS 打卡 Week 34

John(易筋)

ARTS 打卡计划 算法:罗马数字转换为整数 RxSwift的好处 git pull cannot lock ref 产品经理新人如何落地

Week 12 大数据应用

evildracula

学习 架构

架构师训练营 - 大作业一

石子头

第12周作业

Rocky·Chen

hadoop hive

架构师训练营第十二周作业2

韩儿

【架构师训练营 1 期】大作业二

诺乐

架构师训练营第 12 周:数据应用(一)

xiaomao

架构师训练营 - 大作业(一)

树森

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

网络通信协议篇(一)-InfoQ