Python-web编程之网络基础

目录

TCP/IP

TCP和UDP

HTTP

HTTP流程

HTTP消息结构

HTTP请求方法

基于HTTP的网站开发

Socket

socket 原语

Socket UDP原语

扫描二维码关注公众号,回复: 4526226 查看本文章

TCP/IP

  1. TCP/IP:transmission Control Protocol/Internet Protocol 简写,中文:传输控制协议/互联网络协议。TCP/IP是一种网络通信协议,它规范了网络中所有的通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。tcp/ip是Internet的基础协议,也是一种计算机数据打包和寻址的标准方法。
    所以TCP/IP就是一种协议
  2. 什么是计算机网络?
    计算机网络是指将,地理位置不同、具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件以及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
  3. Internet就是一种计算机网络。是目前最大的计算机网络,主要由主机、线路、交换、路由、调制解调器等设备组成。
  4. 其中主机分为:服务器和客户端。
    在Internet中提供服务的主机叫做服务器,比如各大门户网站,社交平台等
    通过访问服务器从而获得有用信息的主机叫做客户端,不如各种PC机,手机终端等
  5. 计算机网络被纵向分割为不同的层,每一层表示不同的抽象程度和设计目的,每一层功能独立,
    Internet(前面说过是目前最大的计算机网络)是基于TCP/IP网络搭建的,TCP/IP将网络分为4层结构,分别是应用层、传输层、网络层、接口层。
  6. 表格:
    应用层 HTTP SMTP等,是网路应用开发的重点,为用户的进程直接提供服务。负责发送以及接受什么数据,如何解释数据,如何呈现数据,数据如何加密等
    传输层 TCP或者UDP,开发者需要了解其原理,为两个主机的不同端口之间的通信提供服务。端口port是一种在同一个主机内的不同通道之间进行寻址的方式。TCP/IP的传输层包括两种协议:TCP:提供可靠的有序传输,UDP:提供非可靠的传输。
    网路层 IP,开发者需要了解其原理;为两个主机之间提供通信服务。该层定义了数据如何被封装Wie传送包,定义了不同主机之间的寻址方式,主要使用的IP协议(一种路由协议)
    接口层 处理物理细节,开发者无需要关心。负责相邻物理设备之间的信息传输。
  7. 网络设备
    网络设备以及部件是连接到网络的物理实体。起网路传输及数据交换作用的设备有:集线器、交换机、网桥、路由器、网关、网络接口卡(NIC)、无线接入点(WAP)、调制解调器、光缆等。
        集线器:HUB:是接口层设备
        交换机:Switcher:是接口层设备,也是网络互联中常用设备之一。和HUB的区别是,HUB本身不能识别目的地址,但是叫交换机可以。例如:在同一个局域网内的主机A向主机B传输数据的时候,数据包在经过HUB的时候在网络上是以广播的方式传输的,由每一台终端通过地址信息来确定数据包是否属于自己;但是在经过交换机的时候,交换机会根据Frame(数据组装,接口层操作的)的目的地址直接发送给B主机所在的链路。所以叫交换机能够提供网络的整体性能。
        网桥:Bridge:是接口层设备,通常用于物理异构的网络之间的相互连接,(异构网络(Heterogeneous Network)是一种类型的网络,其是由不同制造商生产的计算机,网络设备和系统组成的,大部分情况下运行在不同的协议上支持不同的功能或应用。)
        路由器:Router:是网路层设备,它是互联网的主要结点设备,通过发送者、接受者的IP地址和路由算法决定数据的收发路径,这一个过程叫做Routing.
        网关:GateWay;网关是一个通用的概念,主要指不同的网络环境之间协议转换,一般为应用层设备,比如一个专用于数据存储转发的服务器。
        调试解调器:Modem俗称猫。是接口层设备。用于连接计算机网路与传统通信网。Modem将计算机的数字信号转义成能够在常规电话线中传输的模拟信息,因为模拟信号传输距离更长。
        无线接入点(WAP):wireless access Point 是接口层设备,将有线网络转为无线网路,最常用的就是wifi。
        防火墙: Firewall:是传输层以及应用层设备,位于不同网络的边界处,防止恶意程序以及数据进入内内部网络,防止信息泄密等。
  8. IP地址
    网络地址(Network Address)是一个网络层的概念,是互联网上的主机,在网络中具有的逻辑地址。
    Internet采用的IP地址表示网络地址,IPV4 和IPV6两种形式。
    IPV4地址是一个32位,二进制数的地址
    IPV6地址是一个128位的,二进制数,
     
  9. 域名
    域名(Domain Name)是一个应用层钙奶,是用来定义主机地址的一种表达方式。由一串用点分割的名字组成的Internet上某台计算机或者计算机租的名称,用于在数据传输时标识计算机的电子方位(地理位置)
    实际上,域名就是一个IP地址的“面具”,起了一个容易记忆的名称。比如百度:www.baidu.com 其IP地址是:http://119.75.217.109/,通过域名能访问,通过IP同样能访问百度首页。
  10. URL
    URL称为统一资源定位符,用来表示Internet上资源位置的标准,资源位置包括资源所在的主机及其主机内的访问路径,就是我们从Internet下载一个文件的时候,是从远端的的主机中,指定的位置进行现在的,下载链接就称为URL。
    格式: [协议]:// [主机]:[端口]/[路径]?][参数]
    其中协议可以是HTTP,也可以是FTP,主机是只域名或者IP地址,端口是传输层端口号,路径是主机内的路径,参数是以&分割的若干键值对。
     
  11. 下一个

TCP和UDP

  1. TCP/IP的传输层是网络中承上启下的关键一层,向上对应用层提供通信服务,向下将应用信息封装为网络信息。传输层连接主机之间的进程,同一主机中不同进程的网络通信通过端口(port)进行区分,所以传输层为主机提供的是端口到端口的服务。
    注:TCP/IP是一种网络通信协议,而TCP和UDP是该通信协议中,传输层的两个不同的传输协议
  2. 端口:Port:这里的端口不是计算机硬件的I/O端口,而是软件级别的概念,就像IP地址是网络层的寻址方式,端口就是传输层的寻址方式。
  3. 应用程序或者称为进程(被调入内存运行后),通过系统调用与某端口建立连接(binding绑定)后,传输层传给该端口的数据都被相应的进程所接收,同样,相应的进程发给传输层的数据都会从该端口中输出。TCP/IP传输层的TCP和UDP是两个完全独立的软件模块,因此各自的端口号也是独立的。
  4. TCP:transmission Control Protocol 传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
    当应用想TCP层发送用于网间传输的用8位字节表示的数据流时候,TCP则把数据分割成适当长度的报文段,最大传输大小MSS,受该计算机连接的网络的数据链路层的最大传输单元MTU限制。之后TCP把数据包传给网络层(IP层),由网络层通过网络将包传送给接收端实体的TCP层。
    TCP特性如下:
        有序性:为每个数据包编排序号,使得接收端能够判断先后到达的、最原始的次序,
        正确性:TCP 用一个checksum函数来检验数据是否有错误,在发送和接收的时候都要计算校验和,这样可以在接收端判断数据是否在传输过程中被损坏。
        可靠性:发送端采用超时重传,并有确认机制识别错误或丢失机数据,进行重发
        可控性:接收端和发送端的网络质量通常不同,TCP采用滑动窗口协议和拥塞控制算法使数据的发送速度达到合理的值。
  5. TCP采用面向连接的方式收发数据,在收发数据之前先建立连接,就是通常所说的三次握手,在数据传输之后释放连接。
    1. 建立三次握手:
          a、建立连接时,客户端发送SYN包到服务器,并进入SYN_SENT状态,等待服务器确认。
          b、服务器收到SYN包,反馈给客户端一个SYN+ACK包,此时服务器也进行SYN_RECV状态。
          c、客户端收到服务器的SYNC+ACK包,向服务器发送确认ACK包,客户端和服务器同时进入ESTABLISHED(TCP连接成功)状态,完成三次握手
    2. 关闭连接(双方都可以发送关闭连接消息)
          a、关闭请求方(比如客户端)向另一端(服务器)发送一个带有FIN附件标记的的报文段
          b、服务器在收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是向主机A发送一个确认号ACK,同时通知自己的相应的应用程序,对方要关闭连接,使应用程序做相应的清理工作
         c、服务器的应用程序的清理工作做完之后,向客户端发送一个FIN报文段
          d、客户端收到这个FIN报文段之后,向服务器发送一个ACK,表示连接彻底释放。
  6. UDP:user Datagram Protocol,是一种无连接的传输层协议,提供面向事物的、简单的、不可靠的信息传递服务;但是更快捷,轻量级。
  7. C/S   B/S架构
    C/S: Client/Server,客户端/服务器的架构是目前大多数网络编程使用到的架构模型;Client和Server分别处于想距离较远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序的返回结构以特定的形式显示给用户;Server程序的任务是接受客户程序提出的服务请求,进行相应的处理,再将结果返回给Client程序。
    B/S  Browser/Server  浏览器/服务器   是web兴起后的一中网络结构模式,它使用的是Web浏览器作为客户端的应用软件,所以BS可以看做是CS的一种特殊情况。就是将web作为客户端。
    python的网络框架中,Django、Tornado、Flask均是以BS架构为主要的开发目标框架。Twisted主要面向CS架构。
  8.  

HTTP

    http,即超文本传输协议,是Internet上最主要的Web应用层标准。是web浏览器和web服务器之间的通信协议标准。BS架构的应用系统,用HTTP在客户端与服务器之间传输数据。htttp可以传输任何格式的数据。

HTTP流程

  1. 基本交互流程
  2. 每个HTTP站点都有一个服务器进程监听TCP的HTTP端口,http端口默认值是80.。
    在第一http请求完成后不关闭连接,以便在第2次请求的时候复用该连接,此技术在HTTP中叫做keep-alive

HTTP消息结构

  1. HTTP有两种消息结构: Request   和Response。
  2. Request格式:

    结构格式由两部分组成:消息头(HTTP HEAD )(格式固定)和消息体(HTTP BODY)(HTML,XML,JSON等格式),中间用空行分割。
  3. Response 格式

    response是服务根据客户端的请求包做相应的处理后向客户端返回的结果。也是由两部分组成。
  4. 常用头字段
    HTTP字段以键值对的方式为服务器或者客户端提供对象的信息。
  5. 常见错误代码
    response的第一行整数状态码用来表示本次request的结果。

HTTP请求方法

  1. 就是Request包的第一个参数,用于告诉服务器客户端的真实目的:获取信息、上传数据、删除信息等操作

基于HTTP的网站开发

  1. 就是处理HTTP的web服务器
  2. 知名Web服务器: Apache\Nginx\IIS\Tomcat\JBoss
  3. 主流web服务器实现了主流语言的可调用接口标准
    CGI:Common gateway Inteface,
    ISAPI: Internet Server Aplicaiton Program Interface
    WSGI: Web Server Gateway Interface 专为Python语言指定的网络服务器标准接口。
  4. 服务端程序、Web服务器、客户端三者之间关系
  5. 简单的服务端程序就是直接读取文件或者返回网页的内容,稍微复杂的服务器端需要处理来自客户端通过HTTP,URLHTML传入的参数,动态执行逻辑代码,在数据库中或者缓存中读写数据等一系列操作,才能最终生成调用结果。

Socket

  1. 除了基于HTTP等标准协议的Web应用,Internet上还有很大一部分是基于非公有协议的。
  2. socket通常被称为套接字,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机之间或不同计算机之间的通信,也可以实现相同主机内的不同进程之间的通讯。Internet上的主机一般运行了多个 服务软件,同时提供多种服务,每种服务都打开了一socket,并绑定到一个端口上,不同的端口对应不同的服务。
  3. 在操作系统结构上,Socket为应用程序屏蔽了TCP/IP网络传输层以及以下的网路细节。

    socket为操作系统的用户空间提供网络抽象,开发者编写的网络程序都会直接或者间接的用到socket抽象。通过socket抽象可以控制传输层协议的TCP UDP等。
  4. Socket使用IP地址+ 端口+协议的三元组唯一标识一个通信链路,服务器端的一个通信链路可以对应于多个客户端,比如一个web服务器的80端口可以同时服务于大量的客户端。

socket 原语

  1. TCPSocket原语

    socket()建立Socket对象,类似打开。bind()绑定;recv()接受数据;
  2. sasdf

Socket UDP原语


      UDP中没有建立连接,断开连接等操作,所以基于UDP的socket通信过程也比TCP简单,在UDP中可以直接指定IP:Port进行数据收发,可以复用TCP的socket()和bind()原语;
另外独有的原语是:
recvfrom():从绑定的地址接收数据
sendto():向指定的地址发送数据,在调用的参数中应该传入通信对端的地址和端口。

猜你喜欢

转载自blog.csdn.net/q1138266752/article/details/84197872