python网络通信分析

手动设置IP地址:

  
Ubuntu:sudo ifconfig ens33 192.168.33.xxx

Windows:网络共享中心-->本地连接-->属性-->Internet协议版本4(TCP/IPv4)-->使用下面的IP地址-->192.168.36.xxx-->子网掩码255.255.255.0

TCP/IP协议四个层:应用层、传输层、网络层、链路层

简单记忆:

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

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

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

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

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

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

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

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

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

访问百度过程(重点):

  
1. 需要知道www.baidu.com的ip,但是不知道,
2. 需要通过dns来解析出 www.baidu.com对应的ip,但是不知道网关的mac地址
3. 真的情况是 先发送arp广播,得到默认网关的mac地址,
4. 然后向dns服务器发送查询 www.baidu.com对应的ip的请求
5. 假如 dns服务器找到了 www.baidu.com对应的ip,那么就会将这个ip地址返回到 请求方
6. 到现在为止,咱们的电脑才知道了 www.baidu.com对应的ip
7. 接下来会通过tcp的3次握手,链接http服务器
8. 链接成功后,会发送真正的http请求,来得到www.baidu.com的主页内容
9. http服务器接收到请求后,组织主页的内容数据,将其返回到这个 请求方的电脑上
10. 电脑接收到http的数据应答后,传递给浏览器,浏览器负责将其进行显示

DNS: DNS(Domain Name System)域名系统,因特网上作为域名和IP地址相互映射的一个分布式数据库, 能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 通过主机名,最终得到该主机名对应的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地址(Internet Protocol Address)是一种在Internet上的给主机编址的方式,也称为网络协议地址。 常见的IP地址,分为IPv4与IPv6两大类。 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地址和MAC地址相同点是它们都唯一,不同的特点主要有:

  
1.对于网络上的某一设备,如一台计算机或一台路由器,其IP地址是基于网络拓扑设计出的,
同一台设备或计算机上,改动IP地址是很容易的(但必须唯一),而MAC则是生产厂商烧录好的,一般不能改动。
我们可以根据需要给一台主机指定任意的IP地址,如我们可以给局域网上的某台计算机分配IP地址为192.168.0.112 ,也可以将它改成192.168.0.200。
而任一网络设备(如网卡,路由器)一旦生产出来以后,其MAC地址不可由本地连接内的配置进行修改。
如果一个计算机的网卡坏了,在更换网卡之后,该计算机的MAC地址就变了。

2.长度不同。IP地址为32位,MAC地址为48位。

3.分配依据不同。IP地址的分配是基于网络拓扑,MAC地址的分配是基于制造商。

4.寻址协议层不同。IP地址应用于OSI第三层,即网络层,而MAC地址应用在OSI第二层,即数据链路层。
数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过MAC地址),
而网络层协议使数据可以从一个网络传递到另一个网络上
(ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络)。

网关: 网关实质上是一个网络通向其他网络的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地址的数据包将仅送往其对应的端口,而不是所有的端口。
因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。

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

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请求,重复步骤1、2。

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部分结束,后面的数据全部是Body。

2.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: 地址解析协议(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地址)信息,以保证通信的顺利进行。

以下为了解内容: ICMP: Internet控制报文协议(Internet Control Message Protocol)Internet控制报文协议。 它是TCP/IP协议族的一个子协议,属于网络层协议, 主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。 当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

  
用途:
我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),
这个“Ping”的过程实际上就是ICMP协议工作的过程。
还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

IGMP: Internet 组管理协议称为IGMP协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。 该协议运行在主机和组播路由器之间。 主机IP软件需要进行组播扩展,才能使主机能够在本地玩了过上收发组播分组。 但仅靠这一点是不够的,因为跨越多个网络的组播转发必须依赖于路由器。 路由器为建立组播转发路由必需了解每个组员在Internet中的分布,这要求主机必须能将其所在的组播组通知给本地路由器,这也是建立组播转发路由的基础。 主机与本地路由器之间使用Internet组管理协议(IGMP,Internet Group Management Protocol)来进行组播组成员信息的交互。 在此基础上,本地路由器再你信息与她组播路由器通信,传播组播组的成员信息,并建立组播路由。 这个过程与路由器之间的常规单播路由。这个过程与路由器之间的常规单播路由的传播十分相似 。 IGMP是TCP/IP中重要标准之一,所有IP组播系统(包括主机和路由器)都需要支持IGMP协议。

  
组播协议包括组成员管理协议和组播路由协议。组成员管理协议用于管理组播组成员的加入和离开,组播路由协议负责在路由器之间交互信息来建立组播树。
IGMP属于前者,是组播路由器用来维护组播组成员信息的协议,运行于主机和和组播路由器之间。
IGMP 信息封装在IP报文中,其IP的协议号为2。

若一个主机想要接收发送到一个特定组的组播数据包,它需要监听发往那个特定组的所有数据包。
为解决Internet上组播数据包的路径选择,主机需通过通知其子网上的组播路由器来加入或离开一个组,组播中采用IGMP来完成这一任务。
这样,组播路由器就可以知道网络上组播组的成员,并由此决定是否向它们的网络转发组播数据包。
当一个组播路由器收到一个组播分组时,它检查数据包的组播目的地址,仅当接口上有那个组的成员时才向其转发。
IGMP提供了在转发组播数据包到目的地的最后阶段所需的信息,实现如下双向的功能:

1.主机通过IGMP通知路由器希望接收或离开某个特定组播组的信息。
2.路由器通过IGMP周期性地查询局域网内的组播组成员是否处于活动状态,实现所连网段组成员关系的收集与维护。

IGMP共有三个版本,即IGMP v1、v2 和 v3。

RARP: 反向地址转换协议(Reverse Address Resolution Protocol) 反向地址转换协议(RARP)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。 网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的 IP 地址。 当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。 假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。 RARP 可以使用于以太网、光纤分布式数据接口及令牌环 LAN。

  
ARP(地址解析协议)是设备通过自己知道的IP地址来获得自己不知道的物理地址的协议。
假如一个设备不知道它自己的IP地址,但是知道自己的物理地址,网络上的无盘工作站就是这种情况,设备知道的只是网络接口卡上的物理地址。
这种情况下应该怎么办呢?RARP(逆地址解析协议)正是针对这种情况的一种协议。

RARP以与ARP相反的方式工作。
RARP发出要反向解析的物理地址并希望返回其对应的IP地址,应答包括由能够提供所需信息的RARP服务器发出的IP地址。
虽然发送方发出的是广播信息,RARP规定只有RARP服务器能产生应答。
许多网络指定多个RARP服务器,这样做既是为了平衡负载也是为了作为出现问题时的备份。

DHCP: 动态主机配置协议(Dynamic Host Configuration Protocol) 是一个局域网的网络协议,使用UDP协议工作。

posted @ 2018-05-30 22:41  江小凡的博客  阅读(209)  评论(0)    收藏  举报