美文网首页
网络编程01 -- 网络模型

网络编程01 -- 网络模型

作者: YanZi_33 | 来源:发表于2022-01-21 11:09 被阅读0次
  • 互联网的实现,分为不同的层次,每一层都有自己独特的功能,每一层都会其下一底层的支持,针对层级的划分有不同的模型,下面我们探讨的是网络七层模型,如下图所示:
image.png
  • 从最底层往上依次为:物理层,链接层,网络层,传输层,会话层,表示层,应用层;
  • 越接近最底层,越接近硬件;
  • 网络层次的划分,每一层有着自己的功能,为了实现这些功能,就需要大家都遵守共同的规则,大家都遵守的规则,就叫做协议(protocol);
  • 网络的每一层,都定义了很多协议,这些协议可统称为互联网协议,它们是互联网的核心;
物理层
  • 物理层:就是将计算机连接起来的物理手段,它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号;
  • 将计算机连接起来,组成一个网络,可以通过光缆,电缆,无线电波等方式;
链接层
  • 物理层传送过来的0和1的电信号,单纯的0和1是没有任何意义的,必须规定特定的解读方式即多少个电信号为一组,每个信号位有什么意义;
  • 链接层:确定了电信号0和1的分组方式,以及每个信号位的意义;
  • 以太网协议:其规定一组电信号构成一个数据包,称为帧(Frame),每一帧分为两个部分:标头(Head)和数据(Data);
    • 标头(Head)包含数据包的说明,例如发送者,接受者,数据类型等等,其长度为固定的18个字节,
    • 数据(Data):就是数据包的具体内容,其最短为46个字节,最长为1500个字节;
image.png
  • MAC地址:联入网络的所有设备,都必须具有网卡接口,数据包必须是从一块网卡,传送到另一块网卡,网卡的地址就是数据包的发送地址和接收地址,也就是所谓的MAC地址;
  • 每块网卡出厂的时候都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个16进制位进行表示;
  • 有了MAC地址,然后计算机采用广播的方式发送数据包给其他计算机;
    • 首先当前计算机通过ARP协议,知道另一台计算机的MAC地址
    • 其次当前计算机采用广播的方式,给本网络内的所有计算机都发送数据包,本网络内的所有计算机拿到数据包之后,读取标头(Head)中接收方的MAC地址与自己MAC地址进行比较,若相同则接收数据包,若不同则丢弃数据包;
  • 根据上述的数据包,计算机的MAC地址,广播的发送方式,实现了在同一网络中在多台计算机之间传送数据了;
网络层
  • 在链接层实现了同一子网络中计算机之间的数据传输,如何在不同的子网络中实现数据传输呢?答案是网络层;
  • 网络层:其作用是引进一套新的地址,能让我们区分不同计算是否属于同一个子网络,这套地址叫网络地址,简称网址,网络层出现之后,每台计算机就有了两种地址,一种是MAC地址,另一种是网络地址,这两种地址之间没有任何联系,MAC地址是绑定在网卡上的,固定不变的,网络地址是管理员分配的,是可以改变的;
  • 网络地址可以帮助我们确定计算机所在的子网络,MAC地址则是将数据包传送给该子网络中目标网卡;
  • IP协议:规定网络地址的协议,叫做IP协议,它所定义的地址,被称为IP地址,目前,广泛采用的是IP协议第四版,简称IPv4,IPv4这个版本规定,网络地址由32个二进制位组成,习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255;
  • IP地址又分为两个部分,分别为网络部分主机部分,其中网络部分是由多少个二进制位组成是由子网掩码决定的,子网掩码是表示子网络特征的一个参数,也是一个32位二进制数字,它的网络部分全部为1主机部分全部为0
  • 现有两个IP地址175.16.254.1和175.16.254.233以及子网掩码为255.255.255.0,判断这两个IP地址是否属于同一个子网络;
    • 首先IP地址175.16.254.1与子网掩码为255.255.255.0 进行位与运算得到网络部分为175.16.254;
    • 其次IP地址175.16.254.233与子网掩码为255.255.255.0 进行位与运算得到网络部分为175.16.254,看到两个IP地址的网络部分相同,所以它们属于同一个子网络;
  • 总结:IP协议的主要作用有两个:
    • 首先为每一台计算分配一个IP地址;
    • 其次提供子网掩码,确定哪些IP地址属于同一个子网络;
  • IP数据包:根据IP协议发送的数据,称为IP数据包,其中包含IP地址信息,上述的以太数据包中只包含MAC地址,这两种地址是如何组合的呢?答案是把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的结构,这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构;
  • IP数据包的格式如下所示:
image.png
  • IP标头通常占用20-60个字节,整个数据包的最大长度为65535个字节;
  • ARP协议:当前计算机给另一台计算发送数据包,必须要知道另一台计算的IP地址与MAC地址,其中IP地址是已知的,对于获取MAC地址,这里分为两种情况:
    • 第一种情况:两台计算机不在同一子网络,只能只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理;
    • 第一种情况:两台计算机在同一子网络,可通过ARP协议,获取对方的MAC地址;
传输层
  • 由上述可知,有了计算机的IP地址与MAC,就能实现在互联网上任意两台主机上建立通信,但问题是同一台计算机上,运行了多个不同的进程(程序),例如看电影,听音乐,聊天等等,计算机接收到数据给哪个进程使用呢? 这里就引出了端口(port)的概念,其本质应用程序的编号,将数据包发送到计算机特定的端口,端口对应的程序就能取到自己所需要的数据;
  • 端口:是0到65535之间的一个整数,正好16个二进制位,0到1023的端口被系统占用,用户只能选用大于1023的端口;
  • 传输层的功能,就是建立"端口到端口"的通信,相比之下,"网络层"的功能是建立"主机到主机"的通信,只要确定主机和端口,我们就能实现程序之间的交流,因此,Unix系统就把主机+端口,叫做"套接字"(socket),有了它我们就可以进行网络应用程序开发了;
  • UDP协议:在传输层需要往数据包中添加端口信息,那么需要定义新的协议,这里就引入了UDP协议
  • UDP数据包,标头包含发出端口与接收端口信息,数据部分直接放入IP数据包中,格式如下所示:
image.png
  • TCP协议:UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到,为了解决这个问题,提高网络可靠性,TCP协议就诞生了,这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了,因此TCP协议能够确保数据不会遗失,它的缺点是过程复杂、实现困难、消耗较多的资源;
应用层
  • 应用程序收到"传输层"的数据,接下来就要进行解读,由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读;
  • 应用层的作用,就是规定应用程序的数据格式
  • 应用层接收到数据格式如下所示:
image.png
电脑联接网络的设置
  • 主要分为下列四个重要步骤:
    • 设置本机的IP地址;
    • 设置子网掩码;
    • 设置网关的IP地址;
    • 设置DNS的IP地址;
  • 上述的详细情形如下图所示:
image.png
  • 当我们在浏览器中输入网址http://www.google.com/,按下enter键,就会向谷歌服务器发送一个网页请求的数据包,底层的详细执行逻辑如下:
  • 首先,我们发送数据包,必须要知道对方的IP地址,但现在我们只知道谷歌的网址,需要借助DNS服务器,帮助我们将http://www.google.com/``解析成IP地址
  • 其次,现在我们知道了谷歌的IP地址,根据子网掩码,判断我们当前所处的网络是否与谷歌所处的网络相同,若相同,直接获取得到谷歌的Mac地址,若不同转发给网关处理,网关可以帮助我们获取得到谷歌的Mac地址;
  • 一般情况下,浏览器发送网页数据包采用的是HTTP协议,当前处于应用层
  • 进入传输层,获取谷歌的HTTP的端口(默认为80),将HTTP数据包,包装上TCP标头;
  • 进入网络层,获取谷歌的IP地址,将TCP数据包,包装上IP标头;
  • 进入链接层,获取谷歌的Mac地址,将IP数据包,包装上以太协议标头;
  • 最后进入物理层,经过网线,网关,传递给谷歌服务器;
  • 谷歌服务器拿到传输过来的以太数据包,会进行解析操作,依次转换成IP数据包,TCP数据包,HTTP数据包,得到HTTP网络请求数据,然后对其作出响应,响应过程的数据传输与上述的发送请求的流程完全相同;
TCP协议
  • 客户端发送请求到服务端,服务端接收请求并作出响应,此过程中会涉及到TCP的三次握手,下面我们来阐述TCP三次握手机制;
  • TCP的三次握手,主要是为了确认双方的身份和通信能力,然后建立联接,下面以一个实例来形象的论述;
  • 一天清晨,下了大雾,李四走在前面,张三走在后面,双方互相看不清对方,这时张三听见前面有人在走路,不知道是不是李四,于是张三第一次喊话前面的是不是李四啊?,李四听到之后,立马回复到我是李四,并询问道你是不是张三啊?,这时张三听到李四的回复,知道了前面的是李四,然后回复李四的问话,我是张三,这时双方都确认了对方的身份和通信能力,张三的发问李四的回复与发问张三的回复 就相当于TCP中的三次握手;
  • TCP的三次握手之后,客户端与服务端建立联接,就开始进行数据传输了;
    • 第一次握手:客户端向服务端发送数据;
    • 第二次握手:服务端确认客户端发送的数据,并回复数据;
    • 第三次握手:客户端收到服务端的数据,并回复服务端;
  • TCP的四次挥手,是为了断开客户端与服务端之间的联接,终止数据的传输;
  • 还是以上面的实例进行论述,张三李四建立联接之后,在路上一起走了一段距离,当到了路口时,两人要分道扬镳了,首先张三说到我要走了,然后李四回复到好的,再者李四说到我也走了,最后张三回复到好的,双方的四次会话后,各奔东西,这四次会话相当于TCP中客户端与服务端之间的四次挥手;
    • 第一次挥手:客户端向服务端发起断开联接的请求;
    • 第二次挥手:服务端确认客户端的断开联接请求;
    • 第三次挥手:服务端向客户端的发起断开联接请求
    • 第四次挥手:客户端确认服务端的断开联接请求;
  • 经过四次挥手,TCP联接断开关闭;

相关文章

  • 网络编程01 -- 网络模型

    互联网的实现,分为不同的层次,每一层都有自己独特的功能,每一层都会其下一底层的支持,针对层级的划分有不同的模型,下...

  • Spider基础之网络编程

    学习自刘大拿的Python课程 网络编程 网络编程 网络协议: 一套规则 网络模型:七层模型-理论模型:任务分块,...

  • 网络编程基础(看不懂算我输)

    网络编程 网络模型 OSI(Open System Interconnection开放系统互联)参考模型 TCP/...

  • Python爬虫 - 网络编程

    1. 网络编程基础 1.1 介绍 网络编程基础(1) OSI模型和TCP/IP协议计算机网络、OSI七层模型、TC...

  • Java网络编程模型(一)

    本系列主要介绍java网络编程的模型,沿着模型的进化线结合案例分析学习。本文主要介绍基于OIO的网络编程模型。 基...

  • 【Netty开发指南】搭稳Netty开发的地基

    Linux网络编程5种IO模型 根据UNIX网络编程对于IO模型的分类,UNIX提供了5种IO模型,分别是 阻塞I...

  • java核心类库 —— 网络编程

    java核心类库之-------网络编程体系图 1. 网络概述 1.1网络分层: 1.2网络模型: OSI参考模型...

  • day26

    1:网络编程(理解)## (1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享 (2)网络编程模型 ...

  • 第62节:探索Java中的网络编程技术

    前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要...

  • Python-Net编程

    网络编程 网络: 网络协议: 一套规则 网络模型:七层模型-七层-理论物理层数据链路层网络层传输层会话层表示层应用...

网友评论

      本文标题:网络编程01 -- 网络模型

      本文链接:https://www.haomeiwen.com/subject/ekftfrtx.html