python学习之路---day26

                            网络的基本知识点

一:网络通信原理

  连接两台计算机之间的Internet之间的协议一系列协议为互联网协议
    互联网协议的功能是:定义计算机如何接入Internet,以及Internet的计算机通信标准

二:osi七层协议
  互联网协议根据功能不同分为osi七层 或则 tcp/ip五层或则tcp/ip四层,我们写的程序属于应用层 各层的基本功能: 各层的功能简述:

【1】物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换),这一层的数据叫做比特。
【2】数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问,这一层通常还提供错误检测和纠正,以确保数据的可靠传输。
【3】网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择,Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
【4】传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的), 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组,常常把这一层数据叫做段。
【5】会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路,主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
【6】表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
【7】应用层: 是最靠近用户的OSI层,这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
    各层中涉及的协议的简单解释:
应用层
      ·DHCP(动态主机分配协议)
      · DNS (域名解析)
      · FTP(File Transfer Protocol)文件传输协议
      · Gopher (英文原义:The Internet Gopher Protocol 中文释义:(RFC-1436)网际Gopher协议)
      · HTTP (Hypertext Transfer Protocol)超文本传输协议
      · IMAP4 (Internet Message Access Protocol 4) 即 Internet信息访问协议的第4版本
      · IRC (Internet Relay Chat )网络聊天协议
      · NNTP (Network News Transport Protocol)RFC-977)网络新闻传输协议
      · XMPP 可扩展消息处理现场协议
      · POP3 (Post Office Protocol 3)即邮局协议的第3个版本
      · SIP 信令控制协议
      · SMTP (Simple Mail Transfer Protocol)即简单邮件传输协议
      · SNMP (Simple Network Management Protocol,简单网络管理协议)
      · SSH (Secure Shell)安全外壳协议
      · TELNET 远程登录协议
      · RPC (Remote Procedure Call Protocol)(RFC-1831)远程过程调用协议
      · RTCP (RTP Control Protocol)RTP 控制协议
      · RTSP (Real Time Streaming Protocol)实时流传输协议
      · TLS (Transport Layer Security Protocol)安全传输层协议
      · SDP( Session Description Protocol)会话描述协议
      · SOAP (Simple Object Access Protocol)简单对象访问协议
      · GTP 通用数据传输平台
      · STUN (Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议
      · NTP (Network Time Protocol)网络校时协议

传输层
      ·TCP(Transmission Control Protocol)传输控制协议
      · UDP (User Datagram Protocol)用户数据报协议
      · DCCP (Datagram Congestion Control Protocol)数据报拥塞控制协议
      · SCTP(STREAM CONTROL TRANSMISSION PROTOCOL)流控制传输协议
      · RTP(Real-time Transport Protocol或简写RTP)实时传送协议
      · RSVP (Resource ReSer Vation Protocol)资源预留协议
      · PPTP ( Point to Point Tunneling Protocol)点对点隧道协议

网络层
    IP(IPv4 · IPv6) Internet Protocol(网络之间互连的协议)
    ARP : Address Resolution Protocol即地址解析协议,实现通过IP地址得知其物理地址。
    RARP :Reverse Address Resolution Protocol 反向地址转换协议允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。
    ICMP :(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
    ICMPv6:
    IGMP :Internet 组管理协议(IGMP)是因特网协议家族中的一个组播协议,用于IP 主机向任一个直接相邻的路由器报告他们的组成员情况。
    RIP : 路由信息协议(RIP)是一种在网关与主机之间交换路由选择信息的标准。
    OSPF : (Open Shortest Path First开放式最短路径优先).
    BGP :(Border Gateway Protocol )边界网关协议,用来连接Internet上独立系统的路由选择协议
    IS-IS:(Intermediate System to Intermediate System Routing Protocol)中间系统到中间系统的路由选择协议.
    IPsec:“Internet 协议安全性”是一种开放标准的框架结构,通过使用加密的安全服务以确保在 Internet 协议 (IP) 网络上进行保密而安全的通讯。
数据链路层
      802.11 · 802.16 · Wi-Fi · WiMAX · ATM · DTM · 令牌环 · 以太网 · FDDI · 帧中继 · GPRS · EVDO · HSPA · HDLC · PPP · L2TP · ISDN
物理层
      以太网物理层 · 调制解调器 · PLC · SONET/SDH · G.709 · 光导纤维 · 同轴电缆 · 双绞线

三:TCP的三次握手和四次挥手

网络层;可以实现两个主机之间的通信,其实正真的通信的实体是在主机的进程,是一个
    是一个主机中的一个进程和另外一个主机中的一个进程在交换数据。IP协议虽然能把
    数据报文送到目的主机。但是并没有交付给主机的具体应用进程。而端到端的通信才应该是
    进程之间的通信。

    UDP:在传输数据的时候不需要建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。
    虽然UDP不提供可靠交付,因此使他的速度比较快。对应的应用层的协议主要有DNS,TFTP,DHCP,
    SNMP,NFS.

    TCP:提供面向连接的服务,在传送数据的时候必须先建立连接,数据传送完成后要释放连接。因此
    TCP是一种可靠的运输服务。但是,也造成了额外的开销,想确认和流量控制等。对应的应用层的协议
    主要有 SMTP,TELNET,HTTP,FTP 等。
001三次握手:#######
        01:TCP服务器进程先创建传输的TCB。时刻准备接收客户端的连接请求。此时服务器就进入监听状态

        02:TCP客户进程也是先创建传输控制块TCB.,然后向服务器发出连接请求报文,这是报文首部中的同步为
        SYN=1,同时选择一个初始序列号seq=x,此时TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。
        TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。

        03:TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号
        是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,
        但是同样要消耗一个序号。


        04:TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进
        入ESTABLISHED(已建立连接)
        状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。

        05:当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

拓展:为什么TCP客户端最后还要发送一次确认呢?
            一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。如果使用的是两次握手建立连接,假设有这样一种场景,
        客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务
        器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一
        次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必
        要的错误和资源的浪费。
        如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出
        确认。由于服务器收不到确认,就知道客户端并没有请求连接。
拓展
002:四次挥手:
        数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。服务端
        也可以主动关闭,一个流程。
        客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节
        的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
        服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态
        。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送
        数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
        客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器
        发送的最后的数据)。
        服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此
        时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
        客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等
        待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
        服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间
        要比客户端早一些。

四:socket

socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在
    网络中通信。
        我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,
    但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协
    议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。





原文地址:https://www.cnblogs.com/one-tom/p/10003691.html