zoukankan      html  css  js  c++  java
  • Python Day 28 网络编程、OSI七层模型、三次握手和四次挥手

      ##网络编程思维路线

    “”“
    ##什么是网络编程?
    网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的
    
    ​编写基于网络的应用程序的过程序称之为网络编程
    
    ##思维路线:
    
    目的是要链接互联网中的其他计算机
    
    物理层 用物理介质链接其他计算机 
    
    数据链路层 用MAC地址来通讯,但仅限于同一局域网
    
    网络层 用ip确定全球范围的某个局域网中的某一台计算机
    
    传输层 用端口来确定 某一计算机中的某一个进程
    
    应用层 组织自己的数据结构,例如json, xml等用于在两个应用程序间交换数据
    
    ”“”

      ##C/S架构

    “”“
    #建立网络至少需要两台计算机,然后使用网络来传输数据
    1.网络必须联通
    2.在需要访问数据一方  必须安装用于访问数据的应用程序
       该应用程序称之为客户端应用程序(client)
    
    3.在需要提供数据的一方  必须安装用于共享数据的应用程序
       该应用程序称之为服务端应用程序(server)
           简写为C/S
               例如: qq  就是一个客户端   服务器在腾讯公司
                     腾讯视频
    
                    B/S    Browser浏览器/Server    该结构下 通过传输都是HTML文本数据
    
    #学习网络编程 最终的目的就是要编写出一个基于C/S结构的应用程序

      ##网络通讯的基本要素

    #要通讯必须具备的两个条件
    1.物理传播介质  (双绞线   光纤   同轴线   无线电波)
    2.通讯协议   (重点)

      ##网络通讯协议

    #是由发送方和接收方共同商定一套规范
    
    #为什么需要协议
    其目的是是为了双方能正确解析数据
    例如 国内通讯:双方都是用普通话
         国际通信:使用英文
    
    
    IBM  DELL  HP    早些年 每个公司都有自己一套通讯协议 这导致了  不同品牌的电脑连不了网于是 国际标准组织就提出了一套开放系统互联模型 OSI

      ##OSI七层模型

    ##Open System Interconnection Reference Model,开放式系统互联通信参考模型,缩写为OSI,是由国际标准组织推出的,其实就是一大堆协议,OSI把整个通讯过程划分为七层,简称OSI七层模型
    
    ##最右边就是完整的七层模型,是最完整的通讯模型,虽然很详尽,但是整个通讯流程的复杂度较高,后期为了降低学习难度,将其进行了简化,于是又了中间的五层,和左边的四层
    
    ##其中应用层,表示层和会话层都是属于应用程序层的,是一个整体,故将其合并为应用层,由此得到中间的五层,这是我们学习的重点!

       ##OSI工作原理解析

    ##OSI各层工作原理解析
    OSI就是相当于计算机界的通用语言,只要按照OSI规定的标准来通讯,就能够与全世界任何一台所有计算机通讯
    
    #1.物理层的功能:基于电子器件发送电流信号,根据电流的高低可以对应到数字0和1,也就是二进制数据 传播介质:双绞线,电缆,同轴电缆,无线电波
    
    #2.数据链路层
    以太网:
        以太网协议(Ethernet)工作在数据链路层,其规定了电信号分组方式,以及一组电信号应该包含哪些内容
    ethernet规定如下:
        - 一组电信号构成一个数据包,叫做‘帧’
        - 每一数据帧分成:报头head和数据data两部分
    head包含:(固定18个字节)
    
    - 发送者/源地址,6个字节
    - 接收者/目标地址,6个字节
    - 数据类型(标签+以太类型),6个字节
    
    data包含:(最短46字节,最长1500字节)
    
    - 数据包的具体内容
    
    head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
    
    ## mac地址:
    
    head中包含的源和目标地址指的是什么地址呢?
    
    ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址
    
    mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)
    ##广播

     有了mac地址,同一网络内的两台主机就可以通信了

    ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼

    广播容易出吸纳广播风暴
    交换机不仅负责让网络中的计算机能够互相通信,还要优化网络传输

     #如何优化呢?

     当pc1想要与pc2通讯前

     1.需要知道pc2的MAC地址,所以必须先将这个信息广播给所有的计算机,

     2.这个信息必须先交给交换机,再由交换机广播出去,

     3.pc2收到消息消息后发现目标MAC是自己,就回复数据给发送方,

     4.而回复也必须先交给交换机,此时交换机就会记录pc2的MAC地址与网口号的对应关系存到自己的缓存中,

     5.下一次在要给pc2发数据时从缓存中查找pc2的MAC地址,

     6.如果找到了就直接单独给pc2发送,不在需要广播,

     7.如果没有则重复之前的广播过程

     这一优化功能称之为自动学习功能

      ##网络层

    # 1.IP协议
    
    IP协议是工作在网络层的协议,全称:Internet Protocol Address,翻译为互联网协议地址
    
    #### 1.1 IP地址(重点)
    
    - ip协议定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
    - 范围0.0.0.0-255.255.255.255
    - 一个ip地址通常写成四段十进制数,例:192.168.10.1
    - 网络号:标识子网
    - 主机号:标识主机
    
    IP地址的分类:
    
    ​    A类保留给政府机构
    
    ​        1.0.0.0---126.0.0.0
    
    ​    B类分配给中等规模公司
    
    ​        128.0.0.0---191.255.0.0
    
    ​    C类分配给任何需要的人
    
    ​        192.168.0.1 - 192.168.255.254
    
    ​    D类用于组播
    
    ​    E类用于实验
    
    我们的电脑ip通常都是C类的,以192.168开头,正因为C类任何人都可以用
    
    # 1.2 子网掩码(了解)
    
    # 什么是子网掩码
    
    子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
    
    它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
    
    # 为什么需要子网掩码
    
    单纯的ip地址段只是标识了ip地址的种类,无法辨识一个ip所处的子网
    例:192.168.10.1与192.168.10.2并不能确定二者处于同一子网,因为不清楚哪些位表示网络号,哪些表示主机号

    #1.3 IP数据包(了解)

    ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分

    head:长度为20到60字节

    data:最长为65,515字节。

    而以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据帧,分开发送了。


    #1.4 ARP协议(了解)

    ARP协议的由来: IP是通常是动态分配的, 是一个逻辑地址, 而数据传输则必须依赖MAC地址, 那如何才能通过IP得到对方的MAC地址呢? 这就需要ARP协议了

    arp协议功能:广播的方式发送数据包,获取目标主机的mac地址

    首先明确每台主机ip都是已知的, 并可以通过子网掩码来判断是否属于同一子网

    ** 案例1:主机192
    .168
    .1
    .101
    访问192
    .168
    .1
    .102 **

    是同一子网内
    ARP请求帧内容:

    1.FF:FF:FF:FF:FF:FF是一个特殊的MAC地址 交换机在看到这个地址时会将这个数据向网内所有主机进行广播

    2.192.168.1.102 收到ARP请求后 回复自己的MAC给  源MAC主机

    3.发送方(192.168.1.101)收到回复后,会将对方的ip的MAC地址映射关系存储到缓存中,以便下次使用

    ps:arp -a 可以查看ARP缓存列表

     

    #总结:ARP通过广播的方式由IP地址获取MAC地址, 不在同一子网时   ARP得到的时对方网关的MAC地址,数据到达对方网关后,由网关根据IP交给对应的主机,当然对方网关获取主机MAC也是通过ARP

    ps:路由器 交换机都可以称之为网关!

    
    
    
    

      ##传输层

    #TCP/UDP工作在这一层
    传输层要求每一个应用程序捆绑一个端口号
    端口号是一个整数     取值范围0-65536     0-1024 这是系统保留的 不建议使用
    端口号不能重复
    至此  就可以通过ip+端口号定位全球某一台计算机上的某一个应用程序
    
    #TCP 传输控制协议
        可靠传输协议,  如何保障可靠,在发生完数据之后,必须等待接收方返回回复消息,该数据才算发送成功
        如果对方在一段时间内没有返回,会再次发送数据,超限制次数,将判定为链接丢失
        基于链接的传输
        怎么叫链接
            要发生数据必须先建立链接  简单的说就是找一条可以到达对方的路  ,
            如何选择一条最佳的传输路径,由路由协议来控制
        要保证数据传输室可靠 一定要保证这传输路径是可用的
        建立链接需要三次握手:
            三次握手是为了确定传输可用
            但是并不能保证后续传输可靠 所以TCP协议在传输数据时 每一个数据段segment都需要确认信息

         后面学习得到的总结:为什么tcp可靠?面试题哦
                   答:不是跟tcp协议连接有关系,而是和tcp传输数据工作原理相关,每传输一个数据都需要得到ack确认,如果没回应再发一次。udp为什么不可靠,因为它发完以后就不管了。

    断开链接需要四次挥手 保证双方数据传输完毕 ,为什么需要多一次,有可能一段传输结束 另一边还没结束 优点: 保证传输可靠,数据完整 缺点: 因为需要传输确认信息,所以对网络消耗较大,效率相对较低 应用场景: 重要数据,在线支付,文字信息 #UDP 协议用户数据报协议 不可靠传输 UDP只管发送 不管对方是否收到 优点:传输效率比TCP高 缺点:传输不可靠 应用场景: 对速度要求高 ,对完整性要求较低 视频通话,语音聊天 对战游戏 多是UDP 你卡了你就卡吧 别人正常游戏

     

       ##三次握手和四次挥手总结


    #TCP的连接建立是一个三次握手过程,目的是为了通信双方确认开始序号,以便后续
    通信的有序进行。主要步骤如下:
    1. 连接开始时,连接建立方(Client)发送SYN包,并包含了自己的初始序号a;
    2. 连接接受方(Server)收到SYN包以后会回复一个SYN包,其中包含了对上一个a包
    的回应信息ACK,回应的序号为下一个希望收到包的序号,即a+1,然后还包含
    了自己的初始序号b;
    3. 连接建立方(Client)收到回应的SYN包以后,回复一个ACK包做响应,其中包含了
    下一个希望收到包的序号即b+1
    #TCP终止连接的四次握手过程如下:
    1. 首先进行关闭的一方(即发送第一个FIN)将执行主动关闭,而另一方(收到这
    个FIN)执行被动关闭。
    2. 当服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一
    样,一个FIN将占用一个序号。
    3. 同时TCP服务器还向应用程序(即丢弃服务器)传送一个文件结束符。接着这个
    服务器程序就关闭它的连接,导致它的TCP端发送一个FIN。
    4. 客户必须发回一个确认,并将确认序号设置为收到序号加1。

    -----------------------自己总结-------------------------------
    #三次握手:
      首先客户端向服务端发送一个连接请求(这是第一次),服务端收到后回复客户端收到,服务端在发送一个要连接
    客户端的信号给客户端,客户端收到后还要反馈一个信号给服务端(这是第三次),中间服务端干的两个事可并成一个(这是第二次),
    所以是三次握手
    #四次挥手:
      首先客户端向服务端发送一个断开连接信号(第一次),服务端回复客户端收到(第二次),服务端还要发送给客户端一个信号
    说明服务端的数据还没传完,传完以后就断开(第三次),客户端给服务端回复收到(第四次)
     

       ##应用层

    应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开放的,大家都可以开发自己的应用程序,用什么样的数据格式来传输,就需要由应用程序开发者自己来制定
    
    应用层功能:规定应用程序的数据格式。
    
    例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。
  • 相关阅读:
    【Python学习之路】——Day20(Django 上)
    【Python学习之路】——WEB本质
    【Python学习之路】——Day16(JavaScript)
    【Python学习之路】——Day14(HTML)
    【Python学习之路】——Day13(Redis and Memcached)
    【Python学习之路】——Day12(python mysql)
    【Python学习之路】——Day11(I/O多路复用)
    【Python学习之路】——Day10(线程、进程)
    【Python学习之路】——Day9(网络编程socket)
    哲学家就餐-同步问题解析-python
  • 原文地址:https://www.cnblogs.com/liangzhenghong/p/10932762.html
Copyright © 2011-2022 走看看