zoukankan      html  css  js  c++  java
  • 简单聊聊四层/七层模型到HTTP

    本文内容借鉴这篇博客:https://blog.csdn.net/agzhchren/article/details/79173491

    但是这篇博客也是该博主转载的,文章具体出处我没有找到,如果有人知道文章具体出处,请在评论区告诉我,我好标明出处。

    话说国际标准化组织ISO搞了个《OSI七层网络模型》,但是因为实在太过复杂与繁琐,基本上没人执行它,但是又有一个五层模型和四层模型却比较常见,尤其是四层模型。

    作为一个程序员,了解四层模型是十分有比较的,但是大学《计算机网络》这门课没有好好学,所以在这里重新记一下。

    TCP/IP是一个协议簇,由许多协议组成。 而HTTP(超文本传输协议)属于TCP/IP协议簇。

    七层、四层模型及其协议:

    作为一个程序员,我们来说说TCP/IP四层概念模型:

    应用层:

      应用层决定了在向用户提供应用服务时通信的活动,TCP/IP协议簇中有各类通用的应用服务。如FTP(文件传输协议)、DNS(域名解析协议),

      当然还有HTTP(超文本传输协议)。

    传输层:

      传输层相对于上层的应用层,提供处于网络连接中的两台计算机之间的数据传输,传输层有两个性质不同的协议:TCP(传输控制协议)、UDP(用户数据报协议)

    网际层:

      网际层用来处理在网络上流动的数据包,数据包是网络传输的最小单位。该层规定了根据怎样的传输路线来到达对方的计算机,并把数据包传送给对方。

      与对方计算机通过多台计算机或网络设备进行传输时,网际层负责的就是在众多的选项内选择一条传输路线。网际层上的协议有:

      IP(网际协议)、ARP(地址解析协议)、RARP(逆地址解析协议)等。

    网络接口层:

      网络接口层用来处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动、NIC(网络适配器,即网卡)、及光纤等物理可见部分。

    那么TCP/IP具体如何来通信呢?

      利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。我们用HTTP举例来说明,首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。接着,为了传输方便,在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求。

      并且发送端在层与层之间传输时,每经过一层都会被打上该层所独有的头部信息,反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。这种把数据信息包装起来的做法称为封装(encapsulate)。

                                                             

      IP(网际协议):负责传输的协议。

        IP协议的主要任务就是将各种数据包传给对方,但是想要确保把数据包传递给对方,需要满足一些条件,其中最重要的两个就是需要知晓目标机的IP地址与MAC地址。

      IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本上不会更改。

      IP间的通信依赖MAC地址。在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,

      会利用下一站中转设备的MAC地址来搜索  下一个中转目标。这时,会采用ARP协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,

      根据通信方的IP地址就可以反查出对应的MAC地址。

      

    确保可靠性的TCP协议:

      按层次分,TCP位于传输层,提供可靠的字节流服务。所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。

     而可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之,TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到对方。

     确保数据能到达目标。为了准确无误地将数据送达目标处,TCP协议采用了三次握手(three-way handshaking)策略。用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,

     它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志(flag) ——SYN(synchronize) 和ACK(acknowledgement)。发送端首先发送一个带SYN标志的数据包给对方。

     接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后,发送端再回传一个带ACK标志的数据包,代表握手结束。

     若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。除了上述三次握手,TCP协议还有其他各种手段来保证通信的可靠性。

     

     负责域名解析的DNS服务:

      DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。计算机既可以被赋予IP地址,也可以被赋予主机名和域名。

     比如www.baidu.com。因为域名更加直观,所以用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址访问。但要让计算机去理解名称,相对而言就变得困难了。

     因为计算机更擅长处理一长串数字。为了解决上述的问题,DNS服务应运而生。DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。

     

    HTTP协议与其他TCP/IP协议是如何协作的: 

    想了解更多Python关于爬虫、数据分析的内容,欢迎大家关注我的微信公众号:悟道Python

      

  • 相关阅读:
    Python基础篇【第十一篇】:正则表达式之计算器
    Python基础篇【第十篇】:正则表达式
    Python基础篇【第九篇】:剖析装饰器
    Python基础篇【第八篇】:剖析递归函数
    Python基础篇【第七篇】:文件操作
    Python基础篇【第六篇】:函数补充
    Python基础篇【第五篇】:sed和函数
    TCP/IP详解之:Ping程序、Traceroute程序
    TCP/IP详解之:ICMP协议
    TCP/IP详解之:ARP协议 和 RARP协议
  • 原文地址:https://www.cnblogs.com/ss-py/p/9851155.html
Copyright © 2011-2022 走看看