欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python修炼——网络通信!

程序员文章站 2022-05-29 16:48:48
...

今日内容概述:
tcp、ip协议,网络通信中几个名词解释

今日内容以概念为主,没有代码

tcp/ip 协议族

互联网协议包含了上百种协议标准, 但是最重要的两个协议是 TCP 和 IP 协议,所以,大家把互联网协议简称为 TCP/IP 协议

网络四层、七层模型

网络四层 (TCP/IP) :应用层、传输层、网络层、链路层

网络七层:应用层、表示层、会话层、传输层、网络层、数据链路层、网络接口层

七层是美国强行制定的(OSI)

wireshark 抓包工具

网络通信常用名词解释

MAC地址:在设备与设备之间数据通信时用来标记收发双方(网卡的***)

MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,
    用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。
    因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址。

    在一个稳定的网络中,IP地址和MAC地址是成对出现的。
    如果一台计算机要和网络中另一外计算机通信,那么要配置这两台计算机的IP地址,
    MAC地址是网卡出厂时设定的,这样配置的IP地址就和MAC地址形成了一种对应关系。
    在数据通信时,IP地址负责表示计算机的网络层地址,网络层设备(如路由器)根据IP地址来进行操作;
    MAC地址负责表示计算机的数据链路层地址,数据链路层设备(如交换机)根据MAC地址来进行操作。
    IP和MAC地址这种映射关系由ARP(Address Resolution Protocol,地址解析协议)协议完成。

IP地址:在逻辑上标记一台电脑,用来指引数据包的收发方向(相当于电脑的***)

IP地址(Internet Protocol Address)是一种在Internet上的给主机编址的方式,也称为网络协议地址。常见的IP地址,分为IPv4与IPv6两大类。

网络掩码:用来区分ip地址的网络号和主机号

子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。
    子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
    子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。

    通过计算机的子网掩码判断两台计算机是否属于同一网段的方法是,将计算机十进制的IP地址和子网掩码转换为二进制的形式,
    然后进行二进制“与”(AND)计算(全1则得1,不全1则得0),如果得出的结果是相同的,那么这两台计算机就属于同一网段。

    A类IP地址对应的子网掩码:255.0.0.0
    B类IP地址对应的子网掩码:255.255.0.0
    C类IP地址对应的子网掩码:255.255.255.0

默认网关:当需要发送的数据包的目的ip不在本网段内时,就会发送给 默认的一台电脑,成为网关

网关实质上是一个网络通向其他网络的IP地址。
    比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;
    网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。
    在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,
    即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。
    而要实现这两个网络之间的通信,则必须通过网关。
    如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。
    网络B向网络A转发数据包的过程也是如此。所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。
    那么这个IP地址是哪台机器的IP地址呢?
    网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。

集线器:已过时,用来连接多态电脑,缺点:每次收发数据都进行广播,网络会变的拥堵

        集线器(hub)属于纯硬件网络底层设备,基本上不具有类似于交换机的"智能记忆"能力和"学习"能力。
        它也不具备交换机所具有的MAC地址表,所以它发送数据时都是没有针对性的,而是采用广播方式发送。
        也就是说当它要向某节点发送数据时,不是直接把数据发送到目的节点,而是把数据包发送到与集线器相连的所有节点。

交换机:集线器的升级版,有学习功能知道需要发送给哪台设备,根据需要进行单播、广播

交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。

    交换机工作于OSI参考模型的第二层,即数据链路层。
    交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。
    在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。
    因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。

路由器:连接多个不同的网段,让他们之间可以进行收发数据,每次收到数据后,ip不变,但是MAC地址会变化

路由器(Router)是一种多端口设备,它可以连接不同传输速率并运行于各种环境的局域网和广域网,也可以采用不同的协议。
    路由器属于OSI模型的第三层--网络层。
    指导从一个网段到另一个网段的数据传输,也能指导从一种网络向另一种网络的数据传输。

DNS: 用来解析出IP(类似于电话簿)

DNS(Domain Name System)域名系统,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)

http服务器:提供浏览器能够访问到的数据

HTTP协议

1.HTTP请求
    步骤1:浏览器首先向服务器发送HTTP请求,请求包括:

        方法:GET还是POST,GET仅请求资源,POST会附带用户数据;

        路径:/full/url/path;

        域名:由Host头指定:Host: www.sina.com

        以及其他相关的Header;

        如果是POST,那么请求还包括一个Body,包含用户数据

    步骤2:服务器向浏览器返回HTTP响应,响应包括:

        响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务器端处理时发生了错误;

        响应类型:由Content-Type指定;

        以及其他相关的Header;

        通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。

    步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤12。

        Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。
        当我们编写一个页面时,我们只需要在HTTP请求中把HTML发送出去,不需要考虑如何附带图片、视频等,
        浏览器如果需要请求图片和视频,它会发送另一个HTTP请求,
        因此,一个HTTP请求只处理一个资源(此时就可以理解为TCP协议中的短连接,每个链接只获取一个资源,如需要多个就需要建立多个链接)

    2.HTTP格式

        每个HTTP请求和响应都遵循相同的格式,一个HTTP包含Header和Body两部分,其中Body是可选的。

        HTTP协议是一种文本协议,所以,它的格式也非常简单。

    2.1 HTTP GET请求的格式:

            GET /path HTTP/1.1
            Header1: Value1
            Header2: Value2
            Header3: Value3

            每个Header一行一个,换行符是\r\n。

    2.2 HTTP POST请求的格式:

        POST /path HTTP/1.1
        Header1: Value1
        Header2: Value2
        Header3: Value3

        body data goes here...
        当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body2.3 HTTP响应的格式:

        HTTP/1.1 200 OK
        Header1: Value1
        Header2: Value2
        Header3: Value3

        body data goes here...

        HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。
    Body的数据类型由Content-Type头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据。

    当存在Content-Encoding时,Body数据是被压缩的,最常见的压缩方式是gzip,
    所以,看到Content-Encoding: gzip时,需要将Body数据先解压缩,才能得到真正的数据。压缩的目的在于减少Body的大小,加快网络传输。

ARP:可以在cmd中输入命令 arp -a 来查看本地缓存中的 IP 地址和 MAC 地址的关系

地址解析协议(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
    主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;
    收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

    地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,
    其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;
    由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
    ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
    相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

    OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。
    在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,'
    但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。
    使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行