python-网络编程(各种协议的简单讲解)

第一节 网络相关基础理论知识

1.C/S、B/S架构

  1. C/S架构:基于客户端与用户端之间的架构。例如:QQ、微信、优酷、暴风影音等等。
  2. B/S架构:基于C/S架构的一种特殊的C/S架构,浏览器与服务端之间的架构。
  • 小结:CS响应速度快,安全性强,一般应用于局域网中,但是开发维护成本高;BS可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。所以有些单位日常办公应用BS,在实际生产中使用CS结构。

2.互联网通信本质

  1. 互联网通信就是你的客户端软件:计算机+操作系统+软件,与服务端的软件:计算机+操作系统+软件之间的通信
  2. 互联网通信是精确到客户端的软件(比如QQ)与服务端的软件(QQ)之间的通信
    • 首先要通过各种物理连接介质连接。
    • 找准确确定对方计算机(准确到软件)的位置。
    • 通过统一的标准(一揽子协议)进行数据的收发。
  3. 接两台计算机之间的internet实际上就是一系列统一的标准,这些标准称之为互联网协议
    • 互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

3.osi七层协议

  • 互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

  • 物理层

    • 物理层就是网线,交换机,路由器等一堆物理连接介质,他连接就是你的网卡。
    • 物理层只是发一堆0101010.
    • 要想让二进制有真正的意义就必须对二进制进行分组
  • 数据链路层

    • 数据链路层就是对这些二进制数据也就是比特流进行分组

    • 我们要发数据,数据从哪里来,发到哪里去?我们一定要有注明。

    • 共同遵守的这个分组协议就是以太网协议ethernet

    • 一组电信号为一帧,构成一个数据报,

      每一组数据报分为报头和数据两部分。

      head | data

      head包含:(固定18个字节)

      • 发送者/源地址,6个字节

      • 接收者/目标地址,6个字节

      • 数据类型,6个字节

        data包含:(最短46字节,最长1500字节)

      数据包的具体内容

      head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送。

    • head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址

  • 在同一个局域网中,计算机的通信方式为广播

    • 我们班就好比一个局域网,在一个局域网之内计算机是通过广播+以太网协议进行通信的
    • mac地址只能在局域网中用,如果跨局域网怎么办?这个就是上一层网络层做的事情了
  • 网络层

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fCP8uqJJ-1576151634530)(https://s2.ax1x.com/2019/11/10/MnOKP0.png)]
    • 必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,就采用路由的方式(向不同广播域/子网分发数据包)
    • 网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址。
  • IP协议

    • IP协议就是确定对方局域网的位置
    • ip + mac + 广播的方式 就能让你找到全世界所有的计算机的位置但是你还不能通讯
    • 互联网之间通信本质是:客户端的应用软件与服务端的应用软件的通信
    • 只是找到计算机的位置是不够的,你应该需要找到具体的软件的位置
    • 每一个软件都有一个对应的端口用于专门收发数据的
  • 传输层

    • 传输层就是TCP/UDP协议也叫做端口工作协议。这样我们就可以找到计算机具体软件的位置
    • 现在是ip+mac+端口 就可以确定全世界任何一个计算机上的任何一个软件的位置。
  • 应用层

    • 这个协议是每个软件自定义的一些协议。
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tv41Tj4n-1576151634532)(https://s2.ax1x.com/2019/11/10/MnvErD.png)]
  • 交换机的学习功能

    1. 我要吼一嗓子,将我的数据包发到交换机上,然后交换机将所有的数据包都发到你们的网卡上,进行查找。找到之后拿到了数据各种拆包,然后回包

    2. 我继续进行数据通信,然后又吼一嗓子,交换机发到所有的计算机上,交换机每次都要通过广播的方式寻找目标计算机,消耗太大了。其实针对这个问题交换机给我们提供了一个mac地址学习功能

    3. mac地址学习功能:工作原理

      • ARP协议

        • ARP协议(Address Resolution Protocol)地址解析协议,根据目标IP地址获取目标物理地址的协议。
        • ARP协议需要分两种情况讨论:
          1. 同一个局域网(网段,子网)。
          2. 不同的局域网(网段,子网)。
        • 所以我们就得借助ARP协议,通过对方的IP地址获取到其mac地址,然后在同一个局域网内通过广播+以太网协议在进行通信。
        • 其实ARP协议还有个功能,他在每个计算机都有一个ARP缓冲区,这里面有一个ARP列表:这个列表就是记录的IP地址和MAC地址的对应关系,但是这个缓存区是有生存期的,一段时间之后就会清空,如果清空了那么在重复此操作。
      • 网络层《IP协议》

        • 规定网络地址的协议叫ip协议

        • 它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示

          范围0.0.0.0-255.255.255.255

        • 一个ip地址通常写成四段十进制数,例:172.16.10.1

        • ip地址分成两部分

          • 网络部分:标识子网
          • 主机部分:标识主机
        • 单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网

      • 子网掩码

        • 所谓”子网掩码”,就是表示子网络特征的一个参数,。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0
        • 知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络
        • IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络
      • 传输层

        • 通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号
        • 传输层功能:建立端口到端口的通信
        • 补充:端口范围0-65535,0-1023为系统占用端口
        • 传输层也有协议叫‘端口’协议,这两个协议包含两种:UDP协议,TCP协议
      • 应用层

        • 应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开放的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式

          1. 选择一个合适的网络应用体系结构;
          2. 根据所选的网络应用体系结构,确定客户进程和服务器进程;
          3. 确定客户进程和服务器进程的端口号
          4. 确定客户进程和服务器进程的IP地址
          5. 选择一个合适的应用层协议
          6. 考虑网络应用所需的服务。
        • 应用层要获取客户端服务端的端口号以及ip协议,还有就是选择一个合适的应用层协议,封装我的数据,目前存在的应用层协议有:

          DNS,FTP,HTTP,telnet,HTTP,SMTP,POP3,SNMP等。

          • 我们使用的应用程序都会根据其本身的性质选择其中的某个协议作为传输数据的规范。
          • FTP协议就是文件传输协议,FTP是因特网上使用得最广泛的文件传送协议
          • 比如我们利用百度云盘上传一个文件,文件读取出来就是一堆二进制的数据,它不只是上传一堆这样的二进制数据,我们上传文件时肯定需要验证文件的完整性,获取源文件名,获取源文件的大小等,所以我们假如file_content代表文件的内容,我们应用程序可以按照一定规范对其进行加工
          • dic = {
            “md5”: ‘ec623e4013d9e87a367ea086b8392563’,
            “filename”: ‘太白金星.md’,
            “file_size”: 7676565,
            “file_content”: file_content,
            }
      • 我要通过计算机A给计算机B发送数据,只要知道对方的IP地址和端口(mac地址会通过ARP协议自动获取)

      • IP地址+端口就可以定位世界上任意一台计算机上的目标软件

  • 传输层的两个协议TCP,UDP协议

    1. UDP协议它是不可靠的无连接协议,面相数据报,相对不安全,但是他的传输效率高,尽最大努力服务,无拥塞控制

      • 一般用于即时通信:qq聊天,微信,在线视频,网络语音电话,对数据准确性和丢包要求比较低,但是速度必须快。
    2. ”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

      以太网头 ip头 udp头 数据
    3. TCP协议

      • 它是可靠的面相连接的流式协议。相对安全,但是传输效率相对低,一般用于文件传输,发送或者接受邮件,远程登录等等

      • 以太网头 ip头 TCP头 数据
      • *IP数据报就是一个抽象概念,是对数据包的结构进行分析,由首部和数据两部分组成,总长度不超过65535个字节。*

    4. TCP协议的三次握手、四次挥手

      • 当客户端与服务端第一次建立链接时,他先要建立最优路线的专属管道,管道建立完毕之后,我的客户端想要给服务端发送消息了,直接将数据向管道一丢,数据就会顺着管道传输到服务端上,非常的快速方便
      • 服务端要想与客户端回消息,也一定要先建立最优路线的专属管道,消息顺着管道就会快速的到达客户端,这样省去了每次发送数据不必要的操作,重复的工作,提高了效率。
      1. TCP协议的三次握手

        • 但是这里的2、3次握手是可以整合到一起的,服务端可以发送一个回应既包含

          同意客户端与我建立链接,又包含我也向客户端建立链接的申请。

          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E5u7qEdA-1576151634534)(https://s2.ax1x.com/2019/11/10/MuHqlF.png)]

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5sSBZaDX-1576151634535)(https://s2.ax1x.com/2019/11/10/Mub4je.png)]

      2. TCP协议的四次挥手

        • 当客户端向服务端消息发送完毕,应该将通道关闭(通道一直开启会占用资源),此时就涉及到了TCP协议断开链接的四次挥手。

          • 客户端向服务端发起断开链接的请求时,证明客户端已经向服务端数据发送完毕了,所以我请求断开链接,但是此时服务端向客户端端发送的数据完成与否不确定,服务端需要等待向客户端发送的数据全部完成之后,才可以发起断开链接的请求,所以不能整合到一起。
        • socket屏蔽了各个协议的通信细节,使得程序员无需关注协议本身,直接使用socket提供的接口来进行互联的不同主机间的进程的通信

        • socket其实也是一样的东西,就是提供了tcp/ip协议的抽象,对外提供了一套接口,同过这个接口就可以统一、方便的使用tcp/ip协议的功能了

        • *基于文件类型的套接字家族*

          套接字家族的名字:AF_UNIX

          *基于网络类型的套接字家族*

          套接字家族的名字:AF_INET
          主机间的进程的通信

        • socket其实也是一样的东西,就是提供了tcp/ip协议的抽象,对外提供了一套接口,同过这个接口就可以统一、方便的使用tcp/ip协议的功能了

        • *基于文件类型的套接字家族*

          套接字家族的名字:AF_UNIX

          *基于网络类型的套接字家族*

          套接字家族的名字:AF_INET

猜你喜欢

转载自blog.csdn.net/CSDNzhaojiale/article/details/103515319