• 网络编程


    网络编程

    什么是网络编程?

    编写基于网络的应用程序的过程称之为网络编程

    一.CS构架

    C/S构架 服务器和客户端之间用网线连接 提供数据的计算机称为服务器,访问数据的计算机称为客户端

    二.网络通讯的基本要素

    两台计算机想要通讯,必须具备两个基本要素

    1.物理连接介质,包括网线,无线电,光纤等

    2.通讯协议

    三.网络通讯协议

    OSI七层模型

    1.什么是OSI?

    开放式系统互联网通讯参考模型

    OSI把整个通讯过程划分为七层,简称OSI七层模型

    ①应用层②表示层③会话层④传输层⑤网络层⑥数据链路层⑦物理层

    ①②③统称为应用层

     物理层

    物理连接介质
    物理层的功能:基于电子器件发送电流信号,根据电流的高低可以对应到数字0和1,也就是二进制数据

    数据链路层

    单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思

    以太网协议:

    一组电信号构成一个数据包,叫做帧

    每一数据帧分成:报头head 和 data数据两部分

    head包含:发送者/源地址(6字节),接受者/目的地址(6字节),数据类型(标签+以太类型)(6字节)

    data包含:数据包的具体内容(56-1500字节)

    MAC地址:源地址和目标地址

    每个电脑必须由mac地址,它是全球唯一的

    广播:有了mac地址同一网络内的两台主机就可以通讯了

    广播太多会造成广播风暴 交换机会自动学习 会降低广播的次数

    数据帧:head:源mac地址,目标mac地址 data:01001010

    网络层

    IP协议:规定网络地址的协议叫IP协议,它定义的地址称为IP地址 范围:0.0.0.0-255.255.255.255

    一个IP地址通常写成四段十进制

    子网掩码:任意两个IP地址是否属于同一子网络

    ARP协议:通讯是基于mac的广播方式实现的.计算机在发包时,获取自身的mac是容易的,如何获取目标主机mac,就需要通过ARP协议.

    数据报: 同一子网 :源IP 源MAC 目标的MAC 目标的IP 数据

        不同子网 :源IP 源MAC 目标MAC 对方的网关地址 数据

    传输层

    工作在传输层的两个协议 TCP/UDP

    网络层的IP帮我们区分了子网,以太网的mac帮我们找到了主机,如何识别主机上的应用程序,这就需要端口,端口即应用程序与网卡关联的编号.
    传输层功能:建立端口与端口的通讯 端口范围:0-65535,0-1023为系统的占用端口
    端口号在同一层计算机中不能重复
    注意:不要使用常见的程序已经占用的端口 比如:apache 是8080,mysql是3306,FTP是21

    这一堆网络协议 本质就是做两件事情:
    1.如何找到对方
    2.数据如何发送

    Ip用来标识一个局域网中的一台电脑 端口用于标识某个应用程序 这样我们就可以准确定位到某个计算机中的某个程序

    TCP是一种可靠的传输协议,可以保证数据传输是完整的

    如何保证数据传输是完整的?
    TCP在传输数据前 会经过一个三次握手的过程 来验证数据传输是否可靠
    TCP三次握手解释:①客户端(client)先发一个数据syn=1 ②服务器(server)返回一个确认信息确信我收到了ack=2,然后给客户端发送一个数据syn=1 ③客户端返回一个确认信息 ack=2
    连接是虚拟概念不实际存在

    TCP四次挥手 断开连接:①客户端先发一个结束请求fin=1 ②服务器返回一个确认的信息表示我收到了ack=2 ③服务器思考了一段时间确认结束,给客户端发送一个结束请求fin=1 ③客户端返回一个确认信息表示我收到了ack=2
    四次分手也是保证数据传输是完整的

    在三次握手时,的确保证了数据传输是可靠,但是后续有可能由于种种原因例如网络中断,丢包等等,导致数据不完整
    TCP的解决方案
      每次发送数据报,都需要对方返回一个确认信息,如果一段时间后,对方没有返回,就重复发送,直到重试的次数超过某个指定的值,就判断连接已经丢失
    TCP的优点: 可以保证数据完整性
        缺点:由于需要接收确认信息,所以整体传输效率较低

    四.socket

    什么是socket?
    socket是Python提供的一个模块,当然其他任何语言都有
    用来处理网络传输相关的操作,其实就是封装了底层复杂,丑陋的TCP和UDP协议,对外提供简单优雅的使用接口
    socket的作用:减少网络编程的工作量
    如何使用?
    默认使用的是TCP协议
    cs构架的程序必然有客户端程序和服务端程序
    为了同一方法,服务器和客户端使用的都是socket

    socket服务器
    import socket
    #创建socket对象
    server=socket.socket()
    #作为服务器必须为socket指定ip和端口
    server.bind(('192.168.12.207',4554))#明确饭店地址
    server.listen() #监听端口,饭店们开了
    #接受顾客的连接请求
    client,address =server.accept()
    #接受
    data=client.recv(1024)
    print(data.decode('utf-8'))
    #发送
    client.send('我是你的服务器'.encode('utf-8'))
    #收发数据都是bytes类型,收发数据都是客户端的socket完成的,服务端的socket只做数据处理

    #关闭socket 回收资源
    server.close()

    socket客户端
    import socket
    #创建socket对象
    client=socket.socket()
    #连接服务器 就是在做三次握手
    client.connect(('192.168.12.207',4554))
    #收发数据
    client.send('你好'.encode('utf-8'))
    data=client.recv(1024)
    print(data.decode('utf-8'))
    #关闭连接 就是在做四次挥手
    client.close()

  • 相关阅读:
    C# 文件过滤器Filter
    C#实现打印功能
    Entity Framework 批量插入很慢
    C#关于日期月天数和一年有多少周及某年某周时间段的计算
    lc.exe 已退出 代码为 1
    oracle获取本月第一天和最后一天及Oracle trunc()函数的用法
    [ASP.NET AJAX]How to register javascript functions after UpdatePanel updated
    PPC调用webservice精要
    Oracle的思维(4)Oracle的万能分页并不万能2
    Microsoft Tech ED 2006
  • 原文地址:https://www.cnblogs.com/lizeqian1994/p/10158514.html
Copyright © 2020-2023  润新知