Python网络编程入门概念(一)

1. OSI 7层模型:

    应用层:提供用户服务;相关协议:HTTP,FTP,POP3,SMTP等
    表示层:数据的压缩,加密,差错控制等
    会话层:建立应用连接,'选择传输层服务'
    ------------------------------------------->前端应用工程师
    传输层:提供不同的传输服务,流量控制;相关协议:TCP,UDP'[数据段]'
    ------------------------------------------->网络后端工程师
    网络层:路由选择,网络互连'[数据包]'
    数据链路层:提供链路交换,具体消息以帧发送'[数据帧]'
    ------------------------------------------>通信工程师
    物理层:物理硬件,接口,网卡,线路'[比特流]'
    ------------------------------------------>大唐,华为

    优点:功能分开,各司其职,降低了网络传输中的耦合度。

2. TCP/IP协议实际使用的是4层:
    应用层(OSI前3层)
    传输层
    网络层
    物理层(OSI后2层)

3. 高内聚,低耦合:
    高内聚:单个模块功能尽量单一
    低耦合:模块之间尽量减少关联和影响

4. 网络协议:
    在网络通信中,各方必须遵守的规定,包括建立什么样的连接,消息结构等
    应用层协议:TFTP "HTTP" DNS SMTP
    传输层:"TCP" "UDP"
    网络层:IP
    物理层:IEEE

5. IP地址,端口号,域名:
    ①IP地址分为公网IP和内网IP:
        内网IP是在规划IPV4协议时,考虑到IP地址可能不够用的情况,为局域网设计的私有IP。
        计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。
        socket.gethostbyname('域名或主机名') #获取主机IP
        常见的IP地址:
            1)私有IP(内网IP): 10.*.*.*, 172.16-31.*.*, 192.168.*.*
            2)127.0.0.0/8: 预留给本机的IP地址段,所有发往该类地址的数据包都被loop back。其中,127.0.0.1被广泛使用。
            3)0.0.0.0/32: 真正表示“本网络中的本机
            4)0.0.0.0/8: 本网络中的所有主机
            5).255: "广播数据包"的目标地址
    ②端口号是网络地址的一部分,每个网络应用都有一个唯一的端口号,用来区别其它应用,接收发往这个端口的消息;
        socket.getservbyname('mysql') #获取应用的端口号
    ③域名可以认为是主机在公网环境中的标识,在公网下,对应一个唯一的IP:
        主机名是机器本身的名字,域名是方便记录IP地址做的一种IP映射;主机名用于局域网,而域名用于公网。小编觉得有必要通过下图进一步区分一下域名,网站名及URL的概念:

Python网络编程入门概念(一)

6. 传输层服务:
    1)面向连接的传输服务(TCP协议)
        ①提供可靠的传输服务:无失序,无差错,无重复,无丢失
        ②传输过程中有建立和断开连接的过程
            三次握手:建立数据传输两端的持续连接

Python网络编程入门概念(一)

            四次挥手:断开连接的两端,保证数据的传输完整

Python网络编程入门概念(一)
        备注:适用于网络情况良好,需要保证可靠性的情况。如:信息聊天,文件上传/下载,邮件,网页获取
    2)面向无连接的传输服务(UDP协议)
        ①不保证传输的可靠性
        ②无需建立三次握手和四次挥手的连接断开过程
        ③消息的收发比较自由,不受其它约束
        备注:适用于网络情况较差,对可靠性要求不高,收发消息的两端不适合建立固定连接。如:网络视频,群聊,发送广播

7. socket套接字:
    socket称为套接字,应用程序通过套接字向网络发出请求或者应答网络的请求,使得主机间或者一台计算机上的进程间可以通讯。
    套接字的类型可以分为:
        ①流式套接字(SOCK_STREAM):传输层基于"TCP"的协议进行通信
        ②数据报套接字(SOCK_DGRAM):传输层基于"UDP"的协议进行通信
        ③底层套接字(SOCK_RAM):访问底层协议的套接字