zoukankan      html  css  js  c++  java
  • python3 网络编程

    1、C/S架构

      C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。

      这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。

    2、B/S架构

      B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。

      Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。

    3、OSI七层模型

         

       

      应用层:Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。

          FTP是文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议。

          SMTP是简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是在Internet传输email的事实标准。

          DNS是域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

          HTTP是超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

      传输层:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

          UDP 中文名是用户数据报协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。

          TCP和UDP的区别:

          1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

          2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。

          3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

          4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

          5、TCP对系统资源要求较多,UDP对系统资源要求较少。

      网络层:IP地址是互联网协议地址的缩写,是分配给用户上网使用的网际协议的设备的数字标签。

          ARP是地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。

          RARP是反向地址转换协议,他允许局域网的物理机器从网关服务器的ARP表或者缓存上请求其IP地址。

          ICMP,Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。

    4、socket      

                               

      Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。    

      当我们使用不同的协议进行通信时就得使用不同的接口,还得处理不同协议的各种细节,这就增加了开发的难度,软件也不易于扩展。于是UNIX BSD就发明了socket这种东西,socket屏蔽了各个协议的通信细节,使得程序员无需关注协议本身,直接使用socket提供的接口来进行互联的不同主机间的进程的通信。

    5、三次握手,四次挥手  

      工作原理图示: 

                

               

      注:   ACK :确认号是否有效,一般置为1。

         PSH :提示接收端应用程序立即从TCP缓冲区把数据读走。
         RST :对方要求重新建立连接,复位。
         SYN :请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1
         FIN   :希望断开连接。

         URG :紧急指针是否有效。为1,表示某一位需要被优先处理

      通俗的讲,三次握手的过程就是请求链接,确认是否能连,确认能连!我们链接吧!四次挥手就是我们断开连接吧,确认是否断开,好!我们断开吧!成功断开。

    6、黏包

      黏包有两种:

      一种是因为发送数据包时,每次发送的包小,因为系统进行优化算法,就将两次的包放在一起发送,减少了资源的重复占用。多次发送会经历多次网络延迟,一起发送会减少网络延迟的次数。因此在发送小数据时会将两次数据一起发送,而客户端接收时,则会一并接收。#即出现多次send会出现黏包

      第二种是因为接收数据时,又多次接收,第一次接收的数据量小,导致数据还没接收完,就停下了,剩余的数据会缓存在内存中,然后等到下次接收时和下一波数据一起接收。

      黏包的解决方法:  

      1、问题的根源在于,接收端不知道发送端将要传送的字节流的长度,所以解决粘包的方法就是围绕,如何让发送端在发送数据前,把自己将要发送的字节流总大小让接收端知晓,然后接收端来一个死循环接收完所有数据。

      此处使用struct解决黏包 

      

                

      2、使用time模块,在每次send的时候加入一个time.sleep(0.01),这种方法可以有效地隔开两次send,断开系统的优化,此种方法虽然可以解决黏包问题,但是会造成发送数据时间长

      3、先读取文件的大小,然后将文件的大小发送给接收端,这样接收端就可以以文件大小来写入数据。  

      为什么会出现黏包问题?

      首先只有在TCP协议中才会出现黏包现象,是因为TCP协议是面向流的协议,在发送的数据传输的过程中海油缓存机制来避免数据丢失,因为在连续发送小数据的时候、以及接收大小不符的时候都容易出现黏包现象,本质还是因为我们在接收数据的时候不知道发送的数据的长短。

      

  • 相关阅读:
    linux异常处理体系结构
    网站、架构、集群相关资源
    (转)分布式Web服务器架构的演变与技术需求
    B树、B树、B+树、B*树详解(转)
    (转)事件和路由事件概述
    LCID及Culture Name列表
    触摸键盘概述
    MySQL远端连接设置
    C#实现平衡多路查找树(B树) (转)
    CentOS6.3 LAMP运营环境安装
  • 原文地址:https://www.cnblogs.com/490144243msq/p/11108233.html
Copyright © 2011-2022 走看看