• 网络编程部分详解


    一、网络结构

    1、网络结构分为两种如下:

    C/S:client---基于网络通信------server

    B/S:browser---基于网络通信----server

    server端必须满足的条件如下:

        1、1:保持server端能够稳定运行

        1、2:server端必须有一个固定的ip地址

        1、3:server端必须支持并发

    2、什么是互联网?

    互联网其本质就是由一系列协议(统一的标准)组成,其总称为‘互联网协议’。

    互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

    互联网必须满足的两大要素:

        1、有着良好的物理底层连接介质保持网络间的通信

        2、必须有着一个统一的标准

    补充:互联网协议可以相比着理解为其就像计算机界的英语

    3、osi七层协议(我们只需掌握五层协议就行)

    osi协议可以理解为是对互联网协议的划分,且osi协议可以划分为七层或五层或四层。

    osi协议分层详情如下:

    关于osi五层协议的详解:

    物理层:指的是两台计算机通过某种连接介质连接到inter网

    物理层的功能:通过高低电平来表示0/1,高电平代表1、低电平代表0

    数据链路层:单纯的定义0和1没有任何意义所以必须通过数据链路层中的协议将0和1组合成一个有着意义的信息

    数据链路层功能:定义了0和1的分组方式

    数据链路层中包含的协议如下:

    以太网协议Ethernet:

    以太网协议:是一个被公认的统一的标准且以太网协议中数据是由一组0和1组成的数据包也叫帧,

    每一个帧都包括报头head和数据data;每一个报头都有着固定的长度(18个字节)

    报头包含有(源地址与目标地址)

    Mac地址:

    简述:Mac地址是由48位2进制数组成或者由12位16进制数组成,且每一个Mac地址在电脑硬件中代表的是网卡,

    每一个网卡在出场的时候就已经以(前六位表示厂商编号,后六位便是流水线号)被烧制好了。

    广播:

    广播:有了Mac地址并处于统一连接的一台主机可以通过ARP协议获取另外一台计算机的Mac地址从而达到通信,且以广播的形式

    进行通信即计算机通信基本靠吼。

    网络层:是由一个个局域网组成的且局域网是以广播的形式进行通信的

    网络层功能:(为了区分两台主机是否处于同一个局域网)引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址。

    网络层的协议如下:

    ip协议:

    • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
    • 范围0.0.0.0-255.255.255.255
    • 一个ip地址通常写成四段十进制数,例:172.16.10.1

    子网掩码:所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,比如ip172.16.10.1其对应的二进制码是:10101100.00010000.00001010.000000001

    了解:有了ip地址与子网掩码就可以判断两台计算机是否在同一个子网(局域网),如果两台计算机有着共同的子网掩码,就可以用子网掩码与ip的二进制码进行比较(都是1是为1,否则为0)的结果如果相同就表示它们在同一个子网。

    ARP协议

    arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送。

    ARP协议功能:以广播的方式发送数据包从而获取对方的Mac地址。

    ARP功能具体实现如下:

    传输层:

    传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序所以可以通过ip+mac地址去找一个特定主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。

    传输层功能:建立端口到端口的通信

    补充:端口范围0-65535,0-1023为系统占用端口

    tcp协议:

    可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

    udp协议:

    不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

    三次握手和四次挥手图示如下:

    应用层:规定应用程序的数据格式且其协议可以自定义

    4、socket 套接字

    socket层图如下:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    4.1 socket套接字的演变史

    基于文件类型的套接字家族:AF_UNIX

    基于网络通信类型的套接字家族:AF_IENT(我们常用的)

    4.2基于tcp协议与udp协议通信的套接字

    服务端tcp:

    import socket
    ip_dic=('127.0.0.1',2206)
    base_lient=1024
    server1=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    server1.bind(ip_dic)
    while True:
        msg,adder=server1.recvfrom(base_lient)
        print(msg,adder)
        server1.sendto(msg,adder)
    View Code

    客户端tcp:

    import socket
    ip_list=('127.0.0.1',2206)
    base_lient=1024
    phone=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    while True:
        mag=input('>>>:').strip()
        if not mag:
            continue
        phone.sendto(mag.encode('utf-8'),ip_list)
        mag,adder=phone.recvfrom(base_lient)
        print(mag.decode('utf-8'),adder)
    View Code

    服务端 udp:

    from socket import *
    ip_port=('127.0.0.1',8080)
    ip_base=1024
    server=socket(AF_INET,SOCK_DGRAM)
    server.bind(ip_port)
    while True:
        try:
            data,sock=server.recvfrom(ip_base)
            server.sendto(data,sock)
        except ConnectionResetError:
            break
    server.close()
    View Code

    客户端 udp:

    from socket import *
    ip_port=('127.0.0.1',8080)
    ip_base=1024
    client=socket(AF_INET,SOCK_DGRAM)
    while True:
         msg=input('>>>:').strip()
         if len(msg)==0:
             continue
         client.sendto(msg.encode('utf-8'),ip_port)
         data,sock=client.recvfrom(ip_base)
         print(data)
    client.close()
    View Code
  • 相关阅读:
    mysql索引
    struts升级2.3.12到2.5.13
    springboot使用servlet
    springboot拦截器
    开发复制内容
    Linux常用命令
    Eclipse中文语言包安装和设置中文
    eclipse编写代码所遇到的问题
    permission denied (publickey)问题的解决和向github添加ssh key
    工具
  • 原文地址:https://www.cnblogs.com/ageliu/p/9600902.html
Copyright © 2020-2023  润新知