网 络 通 信

数据流

一条流就是一个会话,就是一次连接的开始到该连接的关闭。一个连接会发送N个数据包,多少不定,大小不定

SrcIPsrcPortdstIPdstPortAPPVLAN
源IP源端口目的IP目的端口应用虚拟局域网

1:前五个只要一个变了就不再是同一条流。

2:一条流的存在不与时间相关。

3:一条流中可以有多个数据包。

4:端口与应用的区别。


并发流:通信管道上快速的切出一个横截面

新增流:

老化流:心跳检测没通过


在这里插入图片描述

OSI(Open Systems Interconnection)七层协议与TCP/IP四层协议。

在这里插入图片描述

通信硬件

网络拓扑图

在这里插入图片描述

PC向外发包:

1、首先判断目标IP地址与自己是否在同一网段。

2、如在同一网段,则直接通过发出去,而不找网关 。

3、如不在同一网段,则直接发包给网关。

PC如果要连接外网,需要IP地址、子网掩码、网关、DNS四大参数。

注:DNS可以根据地域,运营商去查询最近的DNS服务器,可以加快DNS解析,更快的连接到目的服务器。

用户在网站上输入www.baidu.com后,DNS请求是如何的。

1:本地DNS缓存。

2:本地hosts文件。

3:找DNS服务器。

网络,互联网与因特网

中文英文特点
网络network结点(node)与链路(link)构成。
结点可以是计算机,集线器,交换机或者路由器。
(node)只能称为结点不能叫为节点,网络把许多计算机连接起来。
局域网LAN局域网基本构成有交换机,网线,PC终端。
以太网Ethernet最广泛的局域网。是一种计算机局域网组网技术。
虚拟局域网VLAN
无线局域网WLAN(Wireless Local Area Networks )Wi-Fi无线相容性认证(wireless fidelity)是WLAN使用最广泛的一种无线技术;WAPI是中国特有的无线技术。
广域网WANinternet互联网是世界上最大的广域网。
互联网internet不同的网络通过路由器互连起来。
因特网Internet世界上最大的互联网。
采用TCP/IP协议族作为通信的规则。
WWW(world wide web)万维网应用到因特网上提升了因特网的用户数目。
个人区域网PAN
虚拟专用网络VPN
网络服务提供商ISP例如中国电信,中国移动,中国联通。ISP从因特网管理机构申请IP地址。
因特网交换点IXP允许两个网络直接相连并交换分组,而不需要再通过第三个网络来转发分组。
使得因特网上的流量分布更加合理,同时减少分组转发需要的延时。
一个典型的IXP由一到多个工作在数据链路层的网络交换机组成
(这些网络交换机都用局域网互联起来)许多的ISP再连接到网络交换机的端口上。
文档RCF因特网标准制定的请求讨论文档。
虚链路IP/IP组——IP/IP组
内网穿透NAT(Network Address Translation)进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的
数据包不被 NAT 设备屏蔽而正确路由到内网主机。
端口映射其实就是常说的网络地址转换
(Network Address Translation,NAT)地址转换的一种,
其功能就是把在公网的地址转翻译成私有地址,
采用路由方式的ADSL宽带路由器拥有一个动态或固定的公网IP,
ADSL直接接在HUB或交换机上,所有的电脑共享上网。
在局域网内部的任一PC或服务器上运行到内网穿透客户端,
此时域名解析到的IP地址是局域网网关出口处的公网IP地址,
再在网关处做端口映射指向监控设备即可。
动态主机DHCP
桥连Bridge
https://www.baidu.com/index.html
http://mail.163.com/index.html

一.域名(Domain Name):域名是IP地址的“面具” (DNS)。域名不包括www,如baidu.com才是域名

一.网站:是由服务器名+域名组成。如www.baidu.com;mail.163.com等。

一.根目录: /:通过网站名找到服务器,然后在服务器存放网页的根目录

一.URL:统一资源定位符。全球性地址,用于定位网上的资源。如http://mail.163.com/index.html

一.URI:统一资源标识符。路由,网址。URI=URL+URN。个人的身份证号就是URN,个人的家庭地址就是URL。
用定位的方式或者用编号的方式,我们都可以唯一确定一个人,这是URI的一种实现,而URL就是用定位的方式实现的。

在这里插入图片描述

集线器 HUB - 物理层

“Hub”是“中心”的意思,用于对信号整形、放大,以扩大传输距离。集线器与网卡、网线等传输介质一样,属于局域网中的基础设备,采用介质访问控制机制,收到1就转发1,收到0就转发0,不进行碰撞检测。

中继器 RP - 物理层

中继器(RP )。适用于完全相同的两个网络的互连,主要功能是通过对数据信号的重新发送或者转发,来扩大网络传输的距离。 中继器是对信号进行再生和还原的网络设备。

交换机 Switch - 链路层

交换机:用来组建内网的局域网的设备。不能连上外网,外网需要通过路由器。

“Switch”是“开关”的意思,用于电(光)信号转发的网络设备,可以为任意两个网络节点提供独享的电信号通路。包括网络、语音、光纤交换机等,最常见的是以太网交换机。

交换机会将MAC地址和端口对应,形成一张MAC地址表,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。

网卡

网卡英文全称
NICNetwork Interface Card网卡
NANetwork Adapter网络适配器

网桥

网关 Gateway/GW - 传输层

网关:网络的出口,网关一般在路由器上。

网关IP:局域网中可用IP的第一个或者最后一个。

网关又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。

打个比方,网关就象两个房间当中的那扇门,两个房间之间要走动就必须要通过这扇门才行,所以说网关起的作用就是让两个不在同一网段之内的机子能够互访

网关:你所在的子网的一个路由器,就如同一个看门的,把属于该子网的消息包接收过来,不属于的就过滤掉。网关地址就是分配给路由器对应接口的IP地址。对于网关来说,只要是除了网络地址,广播地址以外的可用主机地址都可以分配给它。通常情况下都是数字最小的为默认网关。网关可以理解为路由器的ip地址

交换机

路由器 Router - 网络层

路由器:可用连接内外网的设备

是网络的核心,实现分组交换(packet switching)。

分组交换才有的是存储转发技术。

分组(包):要发送的整段数据称为一个报文(message),在发送报文之前,把长报文划分成一个个小的数据段,在每段数据前面,加上一些必要的控制信息组成的首部header(包头),就构成了一个分组。

是互联网络的枢纽,“交通警察”,用于各局域网、广域网,它会以最佳路径,按前后顺序发送信号。

防火墙Firewall

位于两个(或多个)网络间。一般是在在内外网的节点进行数据包过滤。

可用于关闭不使用的端口。

RFC 请求意见稿

英文名:Request For Comments

RFC 是由互联网工程任务组(IETF)发布的一系列备忘录,用来记录互联网规范、协议、过程等的标准文件。基本的互联网通信协议都有在RFC文件内详细说明。RFC文件还额外加入许多的论题在标准内,例如对于互联网新开发的协议及发展中所有的记录。

常见互联网协议的RFC编号:

IP: 791

TCP: 793

SMTP:2821 5321

POP3:1957

IMAP:2060

第一层:物理层 Physical

数据单位: 比特位 bit

主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

信道:表示向某一个方向传送信息的媒体。

单向通信(半工通信):只能有一个方向的通信而没有反方向的交互。

双向交替通信(半双工通信):通信双方都可以发送与接收信息,但不能同时发送与接收。

双向同时通信(全双工通信):通信双方都可以同时发送与接收。

调制器(Modulator):把要传输的数字信号调制到载波上。

解调器(Demodulator):把载波上把数字信号分离出来。

IEEE电气和电子工程师协会

Ethernet以太网

第二层:链路层 Data Link

数据单位:帧 Frame

主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。 

点对点信道:

广播信道:

地址解析协议

ARP地址解析协议

ip地址–>物理板卡地址FF:FF:FF:FF:FF:FF或者FF-FF-FF-FF-FF-FF

RARP逆向地址解析协议

物理板卡地址–>ip地址

MAC:网卡地址/物理地址/以太网地址/硬件地址。

IP地址专注于网络层,将数据包从一个网络转发到另外一个网络;而MAC地址专注于数据链路层,将一个数据帧从一个节点传送到相同链路的另一个节点。
ip分类分为ABCDE类
A 类: 1.0.0.0~126.255.255.255 对应的默认子网掩码为:255.0.0.0
B类: 128.0.0.0~191.255.255.255 对应的默认子网掩码为:255.255.0.0
C类: 192.0.0.0~223.255.255.255 对应的默认子网掩码为:255.255.255.0
子网掩码:IP地址位数=网络位数+主机位数=32位。子网掩码的位数就是网络的位数。
广播地址,即首尾去掉,因为主机号不能全是“0”或全是“1”。这里说的全0,全1,是上面的ip 转换成二进制数后主机位数的全0,全1
网络广播:广播原理:
A(135.24.25.23)和同一网段内的主机B(135.24.25.32)通信
查找arp 表没有32 IP的MAC地址
判断A 和B 是在同一局域网内,A向局域网发送ARP广播,B收到广播后 会把自己的MAC地址以广播的形式发送给A,A获取到B的MAC 保存到自己的ARP缓存中,通讯开始
A(135.24.25.23)和不同同一网段内的主机B(135.24.25.32)通信
A判断B和自己不在同一局域网
A发送一个广播获取网关的MAC地址,网关收到广播后向A返回自己的MAC
A按照网关的MAC地址开始通信,网关收到这个数据包后向下一跳路由网关获取MAC,把这个数据包发到下一个网关

单播,广播,组播

Cisco思科协议

隧道协议

第三层:网络层 Network

数据单位:报文包 Packet

主要将从下层接收到的数据进行IP地址的封装与解封装。在这一层工作的设备是路由器,常把这一层的数据叫做数据包。 

IP互联网协议

局域网通讯规则:在同一个局域网内,所有的IP必须在同一网段中才可以互相通信。

IP=网络位+主机位。网络位相同的IP地址才是同一网段。

用现实生活举例"我是来自中国的马云",其中中国是网络位,马云是主机位。其中主机位可以进一步细分,从中国到浙江到杭州。例如1.2.3.4,其中网络位可以为:

1.2.

1.2.3.

子网掩码:用来确定IP地址的网络位。

子网掩码确定:255对应的是网络位,0对应的是主机位。例如:

255.0.0.0

255.255.0.0

255.255.255.0

举例:

问题1.IP地址为10.1.1.1 子网掩码为255.255.255.0。

	网段为10.1.1.0,主机位为1。

	网段范围为10.1.1.0~10.1.1.255,

	可用地址范围为10.1.1.1~10.1.1.254(主机位不全为0且不全为255),

	广播地址为10.1.1.255。

问题2.IP地址为10.1.1.1 子网掩码为255.255.0.0。

	网段为10.1.0.0,主机位为1.1。

	网段范围为10.1.0.0~10.1.255.255,

	可用地址范围为10.1.0.1~10.1.255.254(主机位不全为0且不全为255),

	广播地址为10.1.255.255。

问题3.IP地址为10.1.1.1 子网掩码为255.0.0.0。

	网段为10.0.0.0,主机位为1.1.1。

	网段范围为10.0.0.0~10.255.255.255,

	可用地址范围为10.0.0.1~10.255.255.254(主机位不全为0且不全为255),

	广播地址为10.255.255.255。

一个IP地址必须配置一个子网掩码。

IPV4

IPV4地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。

IP分为ABCDE类。目前可以使用的只有A、B、C3类,ABC3类的子网掩码可以修改。

在这里插入图片描述

类型IP 范围掩码用途
A1~126255.0.0.0学校
127回环地址,代表自己。
B128~191255.255.0.0
C192~223255.255.255.0
D224~239组播地址
E240~254科研保留

IPV6

255.255.255.255/FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

https://blog.csdn.net/weixin_41955327/article/details/85557630

https://blog.csdn.net/chao199512/article/details/86139714

ICMP互联网控制信息协议

用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

IGMP互联网组管协议

组播协议

路由协议

RTP

IGRP内部路由协议

安全协议

第四层:传输层 Transport

数据单位:数据段 segment

定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。 

TCP传输控制协议

TCP报文

在这里插入图片描述

TCP报文首部

源端口和目的端口,各占2个字节,分别写入源端口和目的端口;

序号,占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始;

确认号,占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。例如,B收到了A发送过来的报文,其序列号字段是501,而数据长度是200字节,这表明B正确的收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701;

数据偏移,占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远;

保留,占6位,保留今后使用,但目前应都位0;

紧急URG,当URG=1,表明紧急指针字段有效。告诉系统此报文段中有紧急数据;

确认ACK,仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1;

推送PSH,当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这时候就将PSH=1;

复位RST,当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;

同步SYN,在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1;

终止FIN,用来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放;

窗口,占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受;

检验和,占2字节,校验首部和数据这两部分;

紧急指针,占2字节,指出本报文段中的紧急数据的字节数;

选项,长度可变,定义一些其他的可选的参数。

暂时需要的信息有:

ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。

FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

三次握手,四次挥手

在这里插入图片描述

三次握手的过程

在这里插入图片描述

step1:第一次握手
建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认。(其中,SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x)。

step2:第二次握手
服务器收到请求后,必须确认客户的数据包。同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含服务端的初始序号seq(服务器)=y,以及服务器对客户端初始序号的确认号ack(服务器)=seq(客户端)+1=x+1)。

step3:第三次握手
客户端收到服务器的SYN+ACK包,向服务器发送一个序列号(seq=x+1),确认号为ack(客户端)=y+1,此包发送完毕,客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手。

未连接队列

在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包时,删除该条目,服务器进入ESTAB_LISHED状态。

在这里插入图片描述

TCP使用4次挥手拆除一条连接,为何需要4次呢?因为TCP是一个全双工协议,必须单独拆除每一条信道。注意,4次挥手和3次握手的意义是不同的,很多人都会问为何建立连接是3次握手,而拆除连接是4次挥手。3次握手的目的很简单,就是分配资源,初始化序列号,这时还不涉及数据传输,3次就足够做到这个了,而4次挥手的目的是终止数据传输,并回收资源,此时两个端点两个方向的序列号已经没有了任何关系,必须等待两方向都没有数据传输时才能拆除虚链路,不像初始化时那么简单,发现SYN标志就初始化一个序列号并确认SYN的序列号。因此必须单独分别在一个方向上终止该方向的数据传输。

UDP用户数据报协议

面向连接和非面向连接的服务的特点是:

面向连接的服务,通信双方在进行通信之前,要先在双方建立起一个完整的可以彼此沟通的通道,在通信过程中,整个连接的情况一直可以被实时地监控和管理。

非面向连接的服务,不需要预先建立一个联络两个通信节点的连接,需要通信的时候,发送节点就可以往网络上发送信息,让信息自主地在网络上去传,一般在传输的过程中不再加以监控。

  1. 可靠性

TCP提供交付保证,这意味着一个使用TCP协议发送的消息是保证交付给客户端的。如果消息在传输过程中丢失,那么它将重发,这是由TCP协议本身控制的。另一方面,UDP是不可靠的,它不提供任何交付的保证。一个数据报包在运输途中可能会丢失。这就是为什么UDP是不适合保证交付的项目。

3.有序性

除了提供交付保证,为TCP也保证了消息的有序性。该消息将以从服务器端发出的同样的顺序发送到客户端,尽管这些消息到网络的另一端时可能是无序的。TCP协议将会为你排好序。UDP不提供任何有序性或序列性的保证。数据包将以任何可能的顺序到达。这就是为什么TCP是适合需要顺序交付方式的应用,尽管有基于UDP的协议通过使用序列号和重传来提供有序和可靠性的应用,如TIBCO Rendezvous,他实际上就是一个基于UDP的应用。

4.数据边界

TCP不保存数据的边界,而UDP保证。在传输控制协议,数据以字节流的形式发送,并没有明显的标志表明传输信号消息(段)的边界。在UDP中,数据包单独发送的,只有当他们到达时,才会再次集成。包有明确的界限来哪些包已经收到,这意味着在消息发送后,在接收器接口将会有一个读操作,来生成一个完整的消息。虽然TCP也将在收集所有字节之后生成一个完整的消息,但是这些信息在传给传输给接受端之前将储存在TCP缓冲区,以确保更好的使用网络带宽

5.速度

总而言之,TCP速度比较慢,而UDP速度比较快,因为TCP必须创建连接,以保证消息的可靠交付和有序性,他需要做比UDP多的多的事。这就是为什么UDP更适用于对速度比较敏感的应用,例如:在线视频媒体,电视广播和多人在线游戏。

6.重量级

由于上述的开销,TCP被认为是重量级的协议,而与之相比,UDP协议则是一个轻量级的协议。因为UDP传输的信息中不承担任何间接创造连接,保证交货或秩序的的信息。这也反映在用于承载元数据的头的大小。

  1. 头大小

TCP具有比UDP更大的头。一个TCP数据包报头的大小是20字节,UDP数据报报头是8个字节。TCP报头中包含序列号,ACK号,数据偏移量,保留,控制位,窗口,紧急指针,可选项,填充项,校验位,源端口和目的端口。而UDP报头只包含长度,源端口号,目的端口,和校验和。下图是TCP和UDP头:

图2:TCP包格式(TCP Packet Format)

图3:UDP包格式(UDP Packet format)

8. 拥塞或流控制

TCP有流量控制。在任何用户数据可以被发送之前,TCP需要三数据包来设置一个套接字连接。TCP处理的可靠性和拥塞控制。另一方面,UDP不能进行流量控制。

9. 用法和应用

在互联网中,TCP和UDP都运行在哪些环境中了?在了解了TCP和UDP之间的关键差异之后,我们可以很容易地得出结论,哪种情况适合他们。由于TCP提供可靠交付和有序性的保证,它是最适合需要高可靠并且对传输时间要求不高的应用。UDP是更适合的应用程序需要快速,高效的传输的应用,如游戏。UDP是无状态的性质,在服务器端需要对大量客户端产生的少量请求进行应答的应用中是非常有用的。在实践中,TCP被用于金融领域,如FIX协议是一种基于TCP的协议,而UDP是大量使用在游戏和娱乐场所。

对应的应用层协议

TCP对应的协议:

(1) FTP:定义了文件传输协议,使用21端口。

(2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。

(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。

(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。

(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。

UDP对应的协议:

(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。工作原理是:当DNS客户机 需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53. 该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。

(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。

(3) TFTP(Trival File Tran敏感词er Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

第五层:会话层 Session

数据单位:数据 Data

通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名) 

安全协议

SSL安全套接字协议

默认端口443

SSL的简介:
SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了DH,ADH,ECDHE 、MD5 以及RSA等加密算法,使用40 位的密钥,适用于商业信息的加密。HTTPS实际上就是SSL over HTTP,HTTPS协议使用SSL在发送方把原始数据进行加密,然 后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。 然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十 分之一。假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而 且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别,所以,我们只需对那些涉及机密数据的交互处理使用HTTPS协议,这样就做到鱼与熊掌兼得。总之不需要用https 的地方,就尽量不要用。

随着加密方式的不断推新,有可能会出现新的加密方式导致使用私钥无法解密的情况。这时候就需要弄清楚到底客户端和服务器端协商成哪种加密方式,使用wireshark抓包,注意其中的server hello包里面的cipher字段,知晓加密方式后将其加入到SSLCipherSuite的配置里去。

TSL传输层安全协议

SSL/TSL三次握手:https://www.jianshu.com/p/7158568e4867
client --> server

server --> client
服务器通过Hash算法生成摘要,使用私钥加密摘要生成数字签名给客户端。
客户端使用公钥解密出摘要;确定是目标服务器发出的。
然后通过相同的Hash算法生成摘要,生成的摘要与服务器发送过来的摘要对比是否一样。如果两者一致,就证明这封信未被修改过。
去CA证书认证中心认证,数字证书记载的网址与当前浏览的网址不一致;或者这张数字证书不是由受信任的机构颁发的去CA证书认证中心认证,数字证书记载的网址与当前浏览的网址不一致;或者这张数字证书不是由受信任的机构颁发的
client --> server

没有服务器私钥怎么解析HTTPS的内容:中间代理人
在用户和目标服务器间,搭了个中间服务器,充当代理中间人的角色
加密算法:
哈希算法:将任意长度的二进制值映射为较短的固定长度的二进制哈希值。
单向性。即给定一个输入数,容易计算出它的哈希值,但是已知一个哈希值根据同样的算法不能得到原输入数。
弱抗碰撞性。即给定一个输入数,要找到另一个得到给定数的哈希值,在使用同一种方法时,在计算上不可行。
强抗碰撞性。即对于任意两个不同的输入数,根据同样的算法计算出相同的哈希值,在计算上不可行。
典型的哈希算法:包括 MD2、MD4、MD5 和 SHA-1。

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

目录访问协议

第六层:表示层 Presentation

数据单位:数据 Data

主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等)。 

第七层:应用层 Application

数据单位:数据 Data

 主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类的(可以把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用)。

WEB协议

HTTP 超文本传输协议

默认端口:80/3128/8080/8081/9098

设计目的:客户端(浏览器)与服务器之间的通信(数据交互,请求应答)。

特点:

1.无连接。一个请求响应对后,客户端和服务器之间的连接就会断开(短连接机制)。HTTP1.0后支持可持续连接。

2.无状态。所有的HTTP请求都独立于之前的请求,也就是说他只识别你这次请求头中包含的信息,然后做出对应的响应。但是我们在使用网页浏览的时候,发现还会有上次请求的信息。意味着客户端或服务器端将上下文信息记录了下来。其中,在浏览器(客户端)一端使用cookie,服务器一端使用session。

3.可以传输任意对象类型;由Content-Type标识。

4.支持B/S与C/S架构。

5.数据格式:K-V

交互流程:

在这里插入图片描述

1.建立连接:TCP传输层的三次握手。

C->S:sys

S->C:ack+sys

C->S:ack

2.发送请求request

3.返回响应response

4.关闭连接:TCP传输层的四次挥手。

C->S:断开连接的请求

S->C:服务端返回可以断开连接的请求,客户端断开连接并且释放资源

S->C:发送断开连接的信息

C->S:客户端发送同意断开连接的信息,服务器端断开连接释放资源。

请求报文格式request:请求行(request line)、请求头部(header)、请求体。

在这里插入图片描述

响应报文格式response格式:状态行、消息报头、响应正文

在这里插入图片描述

GET /igd.xml HTTP/1.1
#请求方式 URL HTTP版本
Cache-Control: no-cache
#缓存控制:不缓存
Connection: Close
#连接:Close关闭,keep-alive常连接
Pragma: no-cache
#值:不缓存
Accept: text/xml, application/xml
#Accept: 客户端允许接收到的数据格式
Accept-encoding: gzip
#Accept-encoding: 客户端允许接收到的解码格式
Accept-language: zh-CN,zh;q=0.9
#Accept-language: 客户端的语言
Host: 192.168.2.1:1900
#Host: 域名
User-Agent: Microsoft-Windows/10.0 UPnP/1.0
#User-Agent:客户端浏览器类型
Referer: http://www.java1234.com/
#Referer: 来源
cookie:DA22SFDSF$AD@DD$DAS@
#cookie:

HTTP/1.1 200 OK
#状态码
Content-Type: text/xml;charset=UTF-8
#Content-Type: 内容类型
Content-Length: 2659
#Content-Length: 内容长度
Connection: close
#连接:Close关闭,keep-alive常连接
Cache-control: no-cache
#缓存控制:不缓存

#响应内容
<?xml version="1.0"?>
请求方式

客户端与服务器进行交互的方法,最基本的有查,改,增,删 4种。按HTTP规范分别对应GET,POST,PUT,DELETE四种方法。但是对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE。

请求方式描述
GET请求获取由Request-URL所标识的资源。浏览器会缓存请求信息和Cookie。
POST在Request-URL所标识的资源后附带型的数据。浏览器不会进行缓存。
HEAD请求获取由Request-URL所标识的资源的响应消息报文头。
PUT请求服务器存储一个资源,并用Request-URL作为其标识x。
DELETE请求服务器删除由Request-URL所标识的资源。
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS请求服务器的性能。
TRACE回显服务器收到的请求,主要用于测试或诊断。
GET方式

Get是HTTP最常用的方法,通常用于从指定的资源请求数据。而且是安全的和幂等的。

安全:这里安全的含义仅仅是指是非修改信息。指该操作用于获取信息而非修改信息,换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改和增加数据,不会影响资源的状态。

幂等:指对同一个URL的多个请求应该返回同样的结果。

GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   new AsyncTask<String, Void, Void>() {  
       //网络加载是耗时操作,放在异步任务中
       @Override
       protected Void doInBackground(String... params) {  
           //相当于线程中的run方法,执行后台操作
           try {
               URL u = new URL(params[0]);
               //获取URL的互联网连接
               URLConnection conn = u.openConnection();  
               InputStream is = conn.getInputStream();
               InputStreamReader isr = new InputStreamReader(is);
               //包裹到BufferedReader中
               BufferedReader br = new BufferedReader(isr);  
               String line;
               while ((line = br.readLine()) != null) {
                   System.out.println(line);
               }
               br.close();
               isr.close();
               is.close();     
             } catch (IOException e) {
                  e.printStackTrace();
             }
           return null;
        }
    }.execute("http://apis.juhe.cn/oil/region?key=3f73d0ea9d7c33d288fdc16f5257c1a5&format=2&city=%E5%8C%97%E4%BA%AC%E5%B8%82"); 
    
    //execte(URL)使用GET方法时,填入的URL是带有信息的,例子中使用的是聚合数据提供的加油站数据
}
POST方式

提交要被处理的数据(如FORM 表单)给指定的资源。

把提交的数据放置在HTTP包的包体中。所以POST的安全性要比GET的安全性高。

注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义。

比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为:(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击(CSRF,跨站请求伪造,也被称为:one click attack/session riding)。

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   new AsyncTask<String, Void, Void>() {
      @Override
      protected Void doInBackground(String... params) {  //相当于线程中的run方法,执行后台操作
        try {
          URL u = new URL(params[0]);
          HttpURLConnection conn = (HttpURLConnection) u.openConnection(); 
          //使用POST,需将URLConnection转换成HttpURLConnection

          //使用之前,需要先对conn进行配置     
          conn.setDoInput(true);
          //设置成true,conn才能向服务器输出数据
          conn.setDoOutput(true);  
          //请求方式设置为POST
          conn.setRequestMethod("POST");  

          OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream()); 			//把数据传到服务器
          BufferedWriter bw = new BufferedWriter(osw);                             
          //要传递的数据	 
bw.write("key=3f73d0ea9d7c33d288fdc16f5257c1a5&format=2&city=%E5%8C%97%E4%BA%AC%E5%B8%82");
          bw.flush();

          InputStream is = conn.getInputStream();
          InputStreamReader isr = new InputStreamReader(is);
          BufferedReader br = new BufferedReader(isr);
          String line;
          while ((line = br.readLine()) != null) {
                System.out.println(line);
          }
          br.close();
          isr.close();
          is.close();     
        } catch (IOException e) {
              e.printStackTrace();
        }
              return null;
     }
   }.execute("http://apis.juhe.cn/oil/region");
 }

GET与POST对比

TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

GETPOST
请求参数请求参数显示在 URL 地址栏中。请求参数不显示在 URL地址栏 中。
安全性安全性较差,因为所发送的数据是 URL 显示。并且参数与cookie会保留在浏览器历史中。安全
请求参数长度向 URL 添加数据;而URL 的长度是受限制的,URL 的最大长度是 2048 个字符。无限制。
书签可收藏为书签不可收藏为书签
缓存能被缓存不能缓存
编码类型application/x-www-form-urlencodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
后退/刷新无害数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
对数据类型的限制只允许 ASCII 字符。没有限制。也允许二进制数据。
PUT方式

是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档;如果那个文档存在的话,就用这个主体来代替它。

创建和更新某个URL代表的资源的时候,是用HTTP的PUT还是POST:

DELETE方式

就是请求服务器删除指定URL所对应的资源。但是,客户端无法保证删除操作一定会被执行,因为HTTP规范允许服务器在不通知客户端的情况下撤销请求。

HEAD方式

与GET方法的行为很类似,但服务器在响应中只返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查,

使用HEAD,我们可以更高效的完成以下工作:
在不获取资源的情况下,了解资源的一些信息,比如资源类型;
通过查看响应中的状态码,可以确定资源是否存在;
通过查看首部,测试资源是否被修改。

TRACE方式

会在目的服务器端发起一个“回环”诊断,我们都知道,客户端在发起一个请求时,这个请求可能要穿过防火墙、代理、网关、或者其它的一些应用程序。这中间的每个节点都可能会修改原始的HTTP请求,TRACE方法允许客户端在最终将请求发送服务器时,它变成了什么样子。由于有一个“回环”诊断,在请求最终到达服务器时,服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文的最终模样。这样客户端就可以查看HTTP请求报文在发送的途中,是否被修改过了。

OPTIONS方式

用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

响应状态码
状态码状态含义
1xx信息,服务器收到请求,需要请求者继续执行操作
2xx成功,操作被成功接收并处理
3xx重定向,需要进一步的操作以完成请求
4xx客户端错误,请求包含语法错误或无法完成请求
5xx服务器错误,服务器在处理请求的过程中发生了错误

常见状态码

状态码英文名称中文含义
200OK客户端请求成功。
400Bad Request客户端请求的语法错误,不能被服务器所理解
401Unauthorized请求未经授权,这个状态码必须和WWW-Authenticate报文域一起使用
403Forbidden服务器收到请求,但是拒绝提供服务
404Not Found请求资源不存在。
通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性化页面
500Internal Server Error服务器内部错误
503Service Unavailable服务器暂时的无法处理客户端的请求(可能是超载或系统维护)。延时的长度可包含在服务器的Retry-After头信息中

HTTPS

默认端口:443

HTTPS=HTTP+SSL/TSL

HTTP效率更高;OSI 网络模型中工作于应用层

超文本传输协议,是无状态的,信息是明文传输。

使用端口80来和TCP/IP进行通信

HTTPS安全更高;OSI 网络模型中工作于传输层

HTTPS协议是由SSL加密+HTTP协议构建的可进行加密传输、身份认证的网络协议;

Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。

安全超文本传输协议 它是一个安全通信通道。使用端口443和安全套接字层(SSL)–HTTP应用层的子层 进行信息交换;

需要CA机构wosign(网景公司)的颁发的SSL证书

TLS/SSL中使用了非对称加密,对称加密以及HASH算法

非对称加密算法:RSA,DSA/DSS 对称加密算法:AES,RC4,3DES HASH算法:MD5,SHA1,SHA256

HTTPS协议的主要作用一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

客户端C服务端S
1:支持的加密套件
2:SSL版本信息
3:Random1
4:SessionID
1:确定加密套件
2:Random2
3:下发证书,带有公钥
1:CA机构验证证书合法性
2:取出公钥
3:Random3
4:Random3+公钥=私钥
私钥解出

SSL/TLS 握手是为了安全地协商出一份的秘钥

在这里插入图片描述

1、Client Hello:随机数1
2、Server Hello:随机数2
3、Certificate:公钥
4、公钥加密的随机数3
5、双方利用3个随机数生成临时密钥进行数据加密、解密。

HTTPS解决的问题:
1 . 信任主机的问题. 采用https 的server 必须从CA 申请一个用于证明服务器用途类型的证书. 该证书只有用于对应的server 的时候,客户端才信任这次主机. 所以目前所有的银行系统网站,关键部分应用都是https 的. 客户通过信任该证书,从而信任了该主机.
2 . 通讯过程中的数据的泄密和被窜改
一般意义上的https, 就是 server 有一个证书.
a) 主要目的是保证server 就是他声称的server. 这个跟第一点一样.
b) 服务端和客户端之间的所有通讯,都是加密的.

i. 具体讲,是客户端产生一个对称的密钥,通过server 的证书来交换密钥. 一般意义上的握手过程.

加下来所有的信息往来就都是加密的. 第三方即使截获,也没有任何意义.因为他没有密钥. 当然窜改也就没有什么意义了.
少许对客户端有要求的情况下,会要求客户端也必须有一个证书.
a) 这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码, 还有一个CA 认证过的身份. 因为个人证书一般来说上别人无法模拟的,所有这样能够更深的确认自己的身份.
b) 目前少数个人银行的专业版是这种做法,具体证书可能是拿U盘作为一个备份的载体.像我用的交通银行网上银行就是采取的这种方式。 HTTPS 一定是繁琐的. 本来简单的http协议,一个get一个response. 由于https 要还密钥和确认加密算法的需要.单握手就需要6/7 个往返.任何应用中,过多的round trip 肯定影响性能.

c)每一次响应或者请求, 都要求客户端和服务端对会话的内容做加密/解密. 尽管对称加密/解密效率比较高,可是仍然要消耗过多的CPU,为此有专门的SSL 芯片. 如果CPU性能比较低的话,肯定会降低性能,从而不能serve 更多的请求.

客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。

(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

(5)Web服务器利用自己的私钥解密出会话密钥。

(6)Web服务器利用会话密钥加密与客户端之间的通信。

解密HTTPS
Man-in-the-middle(中间人)

Man-in-the-middle(中间人,简称为 MITM),能够与网络通讯两端分别创建连接,交换其收到的数据,使得通讯两端都认为自己直接与对方对话,事实上整个会话都被中间人所控制。简而言之,在真正的服务端看来,中间人是客户端;而真正的客户端会认为中间人是服务端。

SSLKEYLOGFILE(用临时密钥解密)

Firefox 和 Chrome 都会在系统环境变量存在 SSLKEYLOGFILE 文件路径时,将每个 HTTPS 连接产生的 Premaster Secret 或 Master Secret 存下来。有了这个文件,Wireshark 就可以轻松解密 HTTPS 流量,即使是使用了 ECDHE 这种具有前向安全性的密钥交换SSLKEYLOGFILE 文件记录的是 HTTPS 数据传输中最重要的加密信息,如果不是出于调试目的,一般也没人会主动配置这个环境变量,所以这个方案基本不会对 HTTPS 安全性产生影响。
局限性:只能解密某一客户端与服务器传输的信息

RSA Private Key (用服务器的私钥解密)

局限性:对HTTPS网站服务器端配置的密码套件(cipher suite)有要求,仅支持使用RSA密钥协商算法的密码套件(不支持DH、EDH、ECDH密钥协商算法)
我们的系统采用这种方法

邮件协议

电子邮件(e-mail)是最流行的应用程序之一。所有TCP连接中大约一半是用于简单邮件传送协议SMTP的(以比特计算为基础),FTP连接传送更多的数据。

流程图

电子邮件收发流程图

在这里插入图片描述

六个步骤说明:
①、用户A的电子邮箱为:xx@qq.com,通过邮件客户端软件写好一封邮件,交到QQ的邮件服务器,这一步使用的协议是SMTP。
②、QQ邮箱会根据用户A发送的邮件进行解析,也就是根据收件地址判断是否是自己管辖的账户,如果收件地址也是QQ邮箱,那么会直接存放到自己的存储空间。这里我们假设收件地址不是QQ邮箱,而是163邮箱,那么QQ邮箱就会将邮件转发到163邮箱服务器,转发使用的协议也是SMTP。
③、163邮箱服务器接收到QQ邮箱转发过来的邮件,也会判断收件地址是否是自己,发现是自己的账户,那么就会将QQ邮箱转发过来的邮件存放到自己的内部存储空间。
④、用户A将邮件发送了之后,就会通知用户B去指定的邮箱收取邮件。用户B会通过邮件客户端软件先向163邮箱服务器请求,要求收取自己的邮件。
⑤、163邮箱服务器收到用户B的请求后,会从自己的存储空间中取出B未收取的邮件。
⑥、163邮箱服务器取出用户B未收取的邮件后,将邮件发给用户B;最后三步用户B收取邮件的过程,使用的协议是POP3/IMAP;

邮件客户端:用于帮助用户将邮件发送给SMTP邮件服务器,从POP3/IMAP邮件服务器读取用户的电子邮件。常见的有FoxMail,Outlook Express。

邮箱服务器:例如QQ,新浪,163等,可以假想为现实生活中的 邮局。

SMTP服务器:可以假想为现实生活中的 邮局的邮件接收部门(可接收普通用户要投出的邮件和其他邮局投递进来的邮件)。

POP/IMAP服务器:可以假想为现实生活中的 专门为前来取包裹的用户提供服务的部门。

邮件传输流程图

在这里插入图片描述

MUA(Mail User Agent):邮件用户代理

邮件需要代理,这是由于通常Client端的计算机无法直接寄信,所以需要通过MUA帮我们传递信件(送信/收信),可以看成是邮件客户端软件FoxMail,Outlook Express等。

MTA(Mail Transfer Agent):邮件传送代理
接收外部主机寄来的信件:既然是邮件主机,接收信件自然是主要功能,只要这个信件里有MTA内部账号,这封信就会被MTA收下来;
帮用户发(寄出)信:既然可以收信,自然也可以发信,只要用户具有合法的使用MTA的权力,就可以利用这台MTA主机把信传送出去!不过要注意,MTA会将信件送给目的地的MTA而不是目的地的MUA。
用户收自己的信:用户可以将放置在邮件主机的信件收到自己的个人计算机上。

MDA(Mail Delivery Agent):邮件投递代理

将MTA接收的信件依照信件的流向(送到哪里)将该信件放置到本机账户下的邮件文件中(收件箱),或者再经由MTA将信件送到下个MTA。如果信件的流向是到本机,这个邮件代理的功能就不只是将由MTA传来的邮件放置到每个用户的收件箱,它还可以具有邮件过滤(filtering)与其他相关功能。举两个例子:
如果你知道某个广告信件的主题都是固定的,例如“房价冲销量大降价XXX”,你想将这种信件直接丢进垃圾箱,可以通过MDA邮件分析功能,将信件丢弃。
如果有一天你要出差,可能一个星期碰不到电子邮件,但是你又想自动回复一封让寄件人知道你在忙碌中,这时你可以利用MDA的功能,让邮件主机在别人给你发信时自动回复一封。

邮件格式

书信的格式会因为地区习惯等具有差距性,如美国与中国的书信格式肯定是不一样的,所以需要邮件格式来指导邮件的规范性。

电子邮件组成

一封e-mail 由三个部分组成:信封,首部,正文。

信封:

信封包括发信人的邮件地址和接收人的邮件地址。

RFC 821指明了信封的内容及其解释,以及在一个TCP连接上用于交换邮件的协议。

信封的发展:ESMTP(RFC 1425),支持该特性的客户端将发送EHLO命令启动一个与服务器的对话。而不是HELO。

EHLO DESKTOP-KC0QQNF

MAIL FROM:<发信人的地址>,告诉SMTP服务器发信人的地址。

RCPT TO:<收信人的地址>,告诉SMTP服务器收信人地址,包含密送的收件人。

信封上最重要的是收信人的地址。邮件服务器用这个地址将邮件发送到收信人所在的邮件服务器上。

首部:

FROM 发送方

To 接收方

Cc 抄送方

Subject: =?页面编码格式?邮件编码方式(B代表Base64;Q代表quoted-printable)?邮件主题 

X-Mailer:客户端软件

RFC 822指明了首部字段的格式的解释(以X-开始的首部字段是用户定义的字段,其他是由RFC 822定义的)

SMTP服务器在传递邮件时,会把一些相关信息增加到邮件的邮件头中,这种情况有点类似于现实生活中的邮局在处理邮件时,通常都会在信封上加盖邮戳一样,表示这封邮件在什么时候经过了哪个邮局和由哪个工作人员经手处理。POP3服务器或者IMAP服务器也会在邮件头中增加一些头字段。如Reply-To、X-Phone、X-Mailer

正文:

RFC 822指定正文为NVT ASCII文字行。

正文的发展:MIME(Multipurpose Internet Mail Extension)通用互联网邮件扩展(RCF 1521)。

Mime-Version: MIME版本,当前是1.0
Content-Type: 内容类型
Content-Transfer-Encoding: 编码方式
Content-ID: 内容ID
Content-Description: 内容说明

有一些邮件的传播病毒的原理就是去修改邮件的类型和实际类型,让一个.exe类型的文件伪装成其他文件,当用户点击就运行了病毒。

Content-Type类型/子类型文件扩展名
multipart/mixed附件(类型范围最大)
multipart/related内嵌资源(类型范围居中)
multipart/alternative纯文本与超文本共存(类型范围最小)
application/msworddoc
application/octet-streambin,exe,class,md
application/pdfpdf
application/vnd.ms-powerpointppt
application/x-javascriptjs
application/x-shsh
application/x-tartar
application/zipzip
audio/mpegmp3
image/gifgif
image/jpegjpe,jpg,jpeg
image/x-iconico
image/x-rgbrgb
text/csscss
text/htmlhtml
text/plaintxt,c
video/quicktimemov
video/x-msvideoavi
message/rfc822RFC822邮件
MIME 多用途互联网邮件扩展

英文名:Multipurpose Internet Mail Extension

MIME邮件在RFC文档中定义了邮件头字段的基础上,通过新增一些邮件首部字段、邮件内容格式和传送编码,使得其成为一种应用很广泛的可以传输多媒体的电子邮件规范。MIME邮件和普通的RFC邮件的关系犹如Java编程语言中的子类和父类的关系。

邮件内容的具体细节:文本、图像、音频、视频以及其他应用程序专用的数据。

multipart类型,是MIME邮件的精髓。邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔。常见的multipart类型有三种:multipart/mixed, multipart/related和multipart/alternative。它们之间的层次关系可归纳为下图所示:

在这里插入图片描述

邮件发送协议:SMTP协议

邮件读取协议:POP3、IMAP4协议

在这里插入图片描述

SMTP 简单邮件传输协议

英文全称:Simple Mail Transfer Protocol

主要用于发送和传输邮件,定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则。

MUA使用SMTP协议将邮件发送到MTA服务器中,如果需要传输给其他的MTA服务器,同样也使用SMTP协议。

SMTP 采用的是C/S通信模型,请求/应答都是基于ASCII文本,并以CR和LF符结束。应答包括一个3位数字的应答码(如下表2),常用的SMTP 命令如下表:

在这里插入图片描述

SMTP 应答码:以2开头的表示成功,以3开头的表示未完成(进行中),以4和5开头的表示失败。

在这里插入图片描述

SMTP 协议中一共定义了18条命令,但是发送一封电子邮件的过程通常只需要6条命令,我将这6调命令/响应的语法格式总结如下:

在这里插入图片描述

工作机制:

  1. 客户端使用TCP协议连接SMTP服务器的25端口;
  2. 客户端发送HELO报文将自己的域地址告诉给SMTP服务器;
  3. SMTP服务器接受连接请求,向客户端发送请求账号密码的报文(AUTH LOGIN);
  4. 客户端向SMTP服务器传送账号和密码,如果验证成功,向客户端发送一个OK命令,表示可以开始报文传输;
  5. 客户端使用MAIL命令将邮件发送者的名称发送给SMTP服务器;
  6. SMTP服务器发送OK命令做出响应;
  7. 客户端使用RCPT命令发送邮件接收者地址,如果SMTP服务器能识别这个地址,就向客户端发送OK命令,否则拒绝这个请求;
  8. 收到SMTP服务器的OK命令后,客户端使用DATA命令发送邮件的数据。
  9. 客户端发送QUIT命令终止连接。

在这里插入图片描述

工作机制概括:

1、客户端使用TCP协议连接SMTP服务器的25端口

SMTP服务器在收到邮件请求后,判断收件方的邮箱服务器是否为本地的邮箱服务器,是则直接投入用户的邮箱服务器中。

2、若收件方的邮箱服务器不是本地的邮箱服务器,则建立SMTP的双向通道,转发邮件到指定的邮箱服务器。

3、SMTP发送者发送命令指明接受者,如果接受者可以接收邮件就返回OK应答,SMTP发送者再发送命令确认邮件是否收到,接收回答,反复对话,直到接受者收到全部的邮件(会收到一个特别的序列),返回OK应答,邮件传输完成。

Wireshark抓包分析:

在这里插入图片描述

展示数据SMTP 命令
用户名AUTH LOGIN解码=页面编码方式+邮件编码方式
密码AUTH LOGIN解码=页面编码方式+邮件编码方式
发送者邮箱(一个)MAIL FROM
接受者邮箱(一至多个)RCPT TO
MIME格式的邮件正文开始DATA

解码网站:https://www.hitoy.org/tool/file_base64.php

追踪TCP流分析数据

为了个人的信息安全,删除了一些内容。

220 163.com Anti-spam GT for Coremail System (163com[20141201])
EHLO DESKTOP-KC0QQNF
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr
250-STARTTLS
250 8BITMIME
AUTH LOGIN
334 dXN
bGl1Ym8x==
334 UG6
c3MjM=
235 Authentication successful
MAIL FROM: <liubo@163.com>
250 Mail OK
RCPT TO: <liubo@liubo.com>
250 Mail OK
RCPT TO: <11111@qq.com>
250 Mail OK
RCPT TO: <liubo@liubo.com>
250 Mail OK
RCPT TO: <11111@qq.com>
250 Mail OK
DATA
354 End data with <CR><LF>.<CR><LF>
Date: Thu, 30 May 2019 17:06:45 +0800
From: "liubo@163.com" <liubo@163.com>
To: liubo <liubo@liubo.com>, 
	11111 <11111@qq.com>
Cc: liubo <liubo@liubo.com>
Subject: =?GB2312?B?suLK1NPKvGl1Yg==?=
X-Priority: 3
X-Has-Attach: yes
X-Mailer: Foxmail 7.2.10.151[cn]
Mime-Version: 1.0
Message-ID: <201905301706448774722@163.com>
Content-Type: multipart/mixed;
	boundary="----=_001_NextPart108157812512_=----"

This is a multi-part message in MIME format.

------=_001_NextPart108157812512_=----
Content-Type: multipart/alternative;
	boundary="----=_002_NextPart537360337123_=----"


------=_002_NextPart537360337123_=----
Content-Type: text/plain;
	charset="GB2312"
Content-Transfer-Encoding: base64

suLK1NPKvP7E2sjdo7o

------=_002_NextPart537360337123_=----
Content-Type: text/html;
	charset="GB2312"
Content-Transfer-Encoding: quoted-printable

<html><head><meta http-equiv=3D"content-type" content=3D"text/html; charse=
t=3DGB2312"><style>body { line-height: 1.5; }body { font-size: 10.5pt; fon=
t-family: 'Microsoft YaHei UI'; color: rgb(0, 0, 0); line-height: 1.5; }</=
style></head><body>=0A<div><span></span>=B2=E2=CA=D4=D3=CA=BC=FE=C4=DA=C8=
=DD=A3=BA163-qq-liub</div>=0A<div><br></div><hr style=3D"width: 210px; hei=
ght: 1px;" color=3D"#b5c4df" size=3D"1" align=3D"left">=0A<div><span><div =
style=3D"MARGIN: 10px; FONT-FAMILY: verdana; FONT-SIZE: 10pt"><div>liubo19=
0527@163.com</div></div></span></div>=0A</body></html>
------=_002_NextPart537360337123_=------

------=_001_NextPart108157812512_=----
Content-Type: application/octet-stream;
	name="liubo.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="liubo.txt"

suLK1Li9vP6jusH1MwDQo=

------=_001_NextPart108157812512_=------

------=_002_NextPart257202332037_=----
Content-Type: image/png;
	name="InsertPic_B479.png"
Content-Transfer-Encoding: base64
Content-ID: <_Foxmail.1@c2675204-e6b2-8691-d29b-7d131734688d>

图片编码内容太长了,就不复制上来了

------=_002_NextPart257202332037_=----
.
250 Mail OK queued as smtp12,EMCowAC3vS4fne9cJcVBIQ--.35779S2 1559207199
QUIT
221 Bye

POP3 邮局协议

英文全称:Post Office Protocol Version 3

主要用于从邮件服务器收取邮件,定义了邮件客户端软件和POP3邮件服务器的通信规则。支持“离线”邮件处理 ,适合于那些总是在同一台电脑上阅读邮件的用户。

POP3离线访问模式是一种存储转发服务,是单向邮件访问协议。POP3邮件服务器把邮件发送给客户,自己并不在服务器上保存副本。 在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上。

使用POP协议的服务器看成是一个存储转发服务器 。邮件发送到服务器上,电子邮件客户端连接到服务器,下载所有未阅读的电子邮件,同时删除保存在邮件服务器上的邮件 。 使用户不必长时间和邮件服务器连接,减少了开销。但是在用户下载信件的过程中,用户无法知道信件的内容。一旦碰到邮件轰炸或者较大的邮件,用户没有控制权,不能通过发件人和内容来决定是否下载或删除。

允许用户从服务器上把邮件下载到本地主机上,同时删除保存在邮件服务器上的邮件【现在的邮件服务商都可以设置是否同时删除】,从而使用户不必长时间地与邮件服务器连接,很大程度上减少了服务器和网络的整体开销。

但POP3有其天生的缺陷,即当用户接收电子邮件时,所有的信件都从服务器上清除并下载到客户机。在整个收信过程中,用户无法知道邮件的具体信息,只有照单全收入硬盘后,才能慢慢浏览和删除。这使用户几乎没有对邮件接收的控制决定权。一旦碰上邮箱被轰炸,或有比较大的邮件,用户不能通过分析邮件的内容及发信人地址来决定是否下载或删除,从而造成系统资源的浪费。

POP3采用的是C/S通信模型,请求/应答都是基于ASCII文本,并以CR和LF符结束。应答一般为:“+OK”表示成功,“-ERR”表示失败。常用的POP3命令如下表:

在这里插入图片描述

工作机制:

  1.    客户端使用TCP协议连接邮件服务器的110端口;
    
  2.    客户端使用USER命令将邮箱的账号传给POP3服务器;
    
  3.    客户端使用PASS命令将邮箱的账号传给POP3服务器;
    
  4.    完成用户认证后,客户端使用STAT命令请求服务器返回邮箱的统计资料;
    
  5.    客户端使用LIST命令列出服务器里邮件数量;
    
  6.    客户端使用RETR命令接收邮件,接收一封后便使用DELE命令将邮件服务器中的邮件置为删除状态;
    
  7.    客户端发送QUIT命令,邮件服务器将将置为删除标志的邮件删除,连接结束
    

在这里插入图片描述

IMAP4 交互式邮件存取协议

英文全称:Internet Mail Access Protocol

是对POP3协议的一种扩展,也是定义了邮件客户端软件和IMAP邮件服务器的通信规则。.

IMAP采用的是Request/Response通信模型。

IMAP提供“在线浏览”和“离线查看”访问方式。支持了从多个不同设备中随时访问邮件。客户端可以跟踪邮件的状态,搜索邮件。使用IMAP4协议的服务器看成是一个远程文件服务器 。

双向邮件访问协议:IMAP4提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

IMAP4改进了POP3的不足,用户可以通过浏览信件头来决定是否收取、删除和检索邮件的特定部分,还可以在服务器上创建或更改文件夹或邮箱。它除了支持POP3协议的脱机操作模式外,还支持联机操作和断连接操作。

在这里插入图片描述

IMAP状态图

在这里插入图片描述

(1)未预认证的连接(OK欢迎)

(2)预认证的连接(PREAUTH欢迎)

(3)被拒绝的连接(BYE欢迎)

(4)成功LOGIN或者AUTHENTICATE命令

(5)成功的SELECT或者EXAMINE命令

(6)CLOSE命令,或者失败的SELECT、EXAMINE命令

(7)LOGOUT命令,服务器关闭,或者连接已关闭

常用的IMAP4命令如下表:

在这里插入图片描述

在这里插入图片描述

追踪TCP流分析数据

为了个人的信息安全,删除了一些内容。

C112 NOOP
C112 OK NOOP Completed
C113 STATUS "INBOX" (MESSAGES RECENT UIDVALIDITY)
* STATUS "INBOX" (MESSAGES 2 RECENT 0 UIDVALIDITY 1559024775)
C113 OK STATUS completed
C114 NOOP
C114 OK NOOP Completed
C115 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 XLIST MOVE IDLE XAPPLEPUSHSERVICE NAMESPACE CHILDREN ID UIDPLUS
C115 OK CAPABILITY Completed
C116 ID ("name" "com.tencent.foxmail" "version" "7.2.10.151" "os" "windows" "os-version" "6.2" "vendor" "tencent limited" "contact" "foxmail@foxmail.com")
* ID NIL
C116 OK ID completed
C117 SELECT "INBOX"
* 2 EXISTS
* 0 RECENT
* OK [UNSEEN 1]
* OK [UIDVALIDITY 1559024775] UID validity status
* OK [UIDNEXT 62] Predicted next UID
* FLAGS (\Answered \Flagged \Deleted \Draft \Seen)
* OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)] Permanent flags
C117 OK [READ-WRITE] SELECT complete
C118 FETCH 1:2 (UID)
* 1 FETCH (UID 60)
* 2 FETCH (UID 61)
C118 OK FETCH Completed
...内容信息不展示
C159 FETCH 1:29 (UID)
* 1 FETCH (UID 1)
* 2 FETCH (UID 2)
* 3 FETCH (UID 3)
* 4 FETCH (UID 4)
* 5 FETCH (UID 5)
* 6 FETCH (UID 6)
* 7 FETCH (UID 7)
* 8 FETCH (UID 8)
* 9 FETCH (UID 9)
* 10 FETCH (UID 10)
* 11 FETCH (UID 11)
* 12 FETCH (UID 12)
* 13 FETCH (UID 13)
* 14 FETCH (UID 14)
* 15 FETCH (UID 15)
* 16 FETCH (UID 16)
* 17 FETCH (UID 17)
* 18 FETCH (UID 18)
* 19 FETCH (UID 19)
* 20 FETCH (UID 20)
* 21 FETCH (UID 21)
* 22 FETCH (UID 22)
* 23 FETCH (UID 23)
* 24 FETCH (UID 24)
* 25 FETCH (UID 25)
* 26 FETCH (UID 26)
* 27 FETCH (UID 27)
* 28 FETCH (UID 28)
* 29 FETCH (UID 29)
C159 OK FETCH Completed
C160 NOOP
C160 OK NOOP Completed
C161 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 XLIST MOVE IDLE XAPPLEPUSHSERVICE NAMESPACE CHILDREN ID UIDPLUS
C161 OK CAPABILITY Completed
C162 ID ("name" "com.tencent.foxmail" "version" "7.2.10.151" "os" "windows" "os-version" "6.2" "vendor" "tencent limited" "contact" "foxmail@foxmail.com")
* ID NIL
C162 OK ID completed
C163 SELECT "Junk"
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1559024775] UID validity status
* OK [UIDNEXT 1] Predicted next UID
* FLAGS (\Answered \Flagged \Deleted \Draft \Seen)
* OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)] Permanent flags
C163 OK [READ-WRITE] SELECT complete
C164 NOOP
C164 OK NOOP Completed
C165 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 XLIST MOVE IDLE XAPPLEPUSHSERVICE NAMESPACE CHILDREN ID UIDPLUS
C165 OK CAPABILITY Completed
C166 ID ("name" "com.tencent.foxmail" "version" "7.2.10.151" "os" "windows" "os-version" "6.2" "vendor" "tencent limited" "contact" "foxmail@foxmail.com")
* ID NIL
C166 OK ID completed
C167 SELECT "&UXZO1mWHTvQ-/QQ&k9ouilgU-"
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1559024775] UID validity status
* OK [UIDNEXT 1] Predicted next UID
* FLAGS (\Answered \Flagged \Deleted \Draft \Seen)
* OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)] Permanent flags
C167 OK [READ-WRITE] SELECT complete
C168 NOOP
C168 OK NOOP Completed
C169 CAPABILITY
* CAPABILITY IMAP4 IMAP4rev1 XLIST MOVE IDLE XAPPLEPUSHSERVICE NAMESPACE CHILDREN ID UIDPLUS
C169 OK CAPABILITY Completed
C170 ID ("name" "com.tencent.foxmail" "version" "7.2.10.151" "os" "windows" "os-version" "6.2" "vendor" "tencent limited" "contact" "foxmail@foxmail.com")
* ID NIL
C170 OK ID completed
C171 SELECT "&UXZO1mWHTvZZOQ-/&kK5O9l9SaGM-"
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1559024775] UID validity status
* OK [UIDNEXT 24] Predicted next UID
* FLAGS (\Answered \Flagged \Deleted \Draft \Seen)
* OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)] Permanent flags
C171 OK [READ-WRITE] SELECT complete

文件协议

FTP 文件传输协议

默认端口21

TFTP 文件传输协议

默认端口69

音视频协议

SIP 会话发起协议

英文全称:Session Initiation Protocol

应用:网络电话通信

SIP协议是一个Client/Sever协议,

常用的SIP请求消息如下:

SIP请求消息含义
INVITE表示主叫用户发起会话请求,邀请其他用户加入一个会话。也可以用在呼叫建立后用于更新会话(此时该INVITE又称为Re-invite)。
ACK客户端向服务器端证实它已经收到了对INVITE请求的最终响应。
PRACK表示对1xx响应消息的确认请求消息。
BYE表示终止一个已经建立的呼叫。
CANCEL表示在收到对请求的最终响应之前取消该请求,对于已完成的请求则无影响。
REGISTER表示客户端向SIP服务器端注册列在To字段中的地址信息。
OPTIONS表示查询被叫的相关信息和功能。

SIP协议中的响应消息用于对请求消息进行响应,指示呼叫的成功或失败状态。常用的一些响应消息:
100试呼叫(Trying)
180振铃(Ringing)
181呼叫正在前转(Call is Being Forwarded)
200成功响应(OK)
302临时迁移(Moved Temporarily)
400错误请求(Bad Request)
401未授权(Unauthorized)
403禁止(Forbidden)
404用户不存在(Not Found)
408请求超时(Request Timeout)
480暂时无人接听(Temporarily Unavailable)
486线路忙(Busy Here)
504服务器超时(Server Time-out)
600全忙(Busy Everywhere)

http://www.5icall.cn/wangluodianhua/html/1614.html

H.323

RTMP 实时消息传输协议

英文全称:Real Time Messaging Protocol

https://www.cnblogs.com/lidabo/p/7233154.html

https://www.cnblogs.com/lidabo/p/7232594.html

流媒体协议

工具VLC media player

流媒体是指Internet上使用流式传输技术的连续时基媒体。当前在Internet上传输音频和视频等信息主要有两种方式:下载流式传输两种方式。

下载情况下,用户需要先下载整个媒体文件到本地,然后才能播放媒体文件。在视频直播等应用场合,由于生成整个媒体文件要等直播结束,也就是用户至少要在直播结束后才能看到直播节目,所以用下载方式不能实现直播。

流式传输是实现流媒体的关键技术。使用流式传输可以边下载边观看流媒体节目。由于Internet是基于分组传输的,所以接收端收到的数据包往往有延迟和乱序(流式传输构建在UDP上)。要实现流式传输,就是要从降低延迟和恢复数据包时序入手。在发送端,为降低延迟,往往对传输数据进行预处理(降低质量和高效压缩)。在接收端为了恢复时序,采用了接收缓冲;而为了实现媒体的流畅播放,则采用了播放缓冲

使用接收缓冲,可以将接收到的数据包缓存起来,然后根据数据包的封装信息(如包序号和时戳等),将乱序的包重新排序,最后将重新排序了的数据包放入播放缓冲播放。

为什么需要播放缓冲呢?容易想到,由于网络不可能很理想,并且对数据包排序需要处理时耗,我们得到排序好的数据包的时间间隔是不等的。如果不用播放缓冲,那么播放节目会很卡,这叫时延抖动。相反,使用播放缓冲,在开始播放时,花费几十秒钟先将播放缓冲填满(例如PPLIVE),可以有效地消除时延抖动,从而在不太损失实时性的前提下实现流媒体的顺畅播放。

到目前为止,Internet 上使用较多的流式视频格式主要有以下三种:RealNetworks 公司的RealMedia ,Apple 公司的QuickTime 以及Microsoft 公司的Advanced Streaming Format (ASF) 。

RTP 实时传输协议

https://blog.csdn.net/bripengandre/article/details/2238818

英文全称:Real-time Transport Protocol

RTP建立在UDP上,介于应用层与传输层之间。

语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。RTPInternet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。

RTP用于在单播或多播网络中传送实时数据。它们典型的应用场合有如下几个。

1 ) 简单的多播音频会议。语音通信通过一个多播地址和一对端口来实现。一个用于音频数据(RTP),另一个用于控制包(RTCP)。

2 ) 音频和视频会议。如果在一次会议中同时使用了音频和视频会议,这两种媒体将分别在不同的RTP会话中传送,每一个会话使用不同的传输地址(IP地址+端口)。如果一个用户同时使用了两个会话,则每个会话对应的RTCP包都使用规范化名字CNAME(Canonical Name)。与会者可以根据RTCP包中的CNAME来获取相关联的音频和视频,然后根据RTCP包中的计时信息(Network time protocol)来实现音频和视频的同步。

3 ) 翻译器和混合器。翻译器和混合器都是RTP级的中继系统。翻译器用在通过IP多播不能直接到达的用户区,例如发送者和接收者之间存在防火墙。当与会者能接收的音频编码格式不一样,比如有一个与会者通过一条低速链路接入到高速会议,这时就要使用混合器。在进入音频数据格式需要变化的网络前,混合器将来自一个源或多个源的音频包进行重构,并把重构后的多个音频合并,采用另一种音频编码进行编码后,再转发这个新的RTP包。从一个混合器出来的所有数据包要用混合器作为它们的同步源(SSRC,见RTP的封装)来识别,可以通过贡献源列表(CSRC表,见RTP的封装)可以确认谈话者。

RTP封装

在这里插入图片描述

版本号(V):2比特,用来标志使用的RTP版本。

填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。

扩展位(X):1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。

CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。

标记位(M):1比特,该位的解释由配置文档(Profile)来承担.

载荷类型(PT):7比特,标识了RTP载荷的类型。

序列号(SN):16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。

时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的。

同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。

贡献源列表(CSRC List):0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。

多个参与者能做到自身音视频同步就可以了,没必要做参与者之间的同步。
在一些特殊情况下可能需要做参与者之间的同步,例如多个主机从不同视角同时采集一个三维场景的视频,这时需要主机之间做时间同步,然后通过SR中的NTP做流间同步。

RTP的会话过程

当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成,有两个端口:一个给RTP包,一个给RTCP包,使得RTP/RTCP数据能够正确发送。RTP数据发向偶数的UDP端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端口+1),这样就构成一个UDP端口对。 RTP的发送过程如下,接收过程则相反。

1)RTP协议从上层接收流媒体信息码流(如H.263),封装成RTP数据包;RTCP从上层接收控制信息,封装成RTCP控制包。

  1. RTP将RTP 数据包发往UDP端口对中偶数端口;RTCP将RTCP控制包发往UDP端口对中的接收端口。

根据RTP包的序列号来重组乱序的数据包。
根据RTP包的时间戳来获得数据包的时序。
根据声音流和图像流的相对时间(即RTP包的时间戳),以及它们的绝对时间(即对应的RTCP包中的RTCP),实现声音和图像的同步。
接收缓冲用来排序乱序了的数据包;播放缓冲用来消除播放的抖动,实现等时播放。

要获取RTP音频包中的音频信息很容易,直接将RTP包的包头去掉即可。当然,要成功地播放解码获取到的音频流,需要知道其编码,这可从RTP包包头的有效载荷类型字段(PT)获得。

RTCP 实时传输控制协议

英文全称:Real-time Transport Control Protocol

RTCP的主要功能是:服务质量的监视与反馈、媒体间的同步,以及多播组中成员的标识。在RTP会话期 间,各参与者周期性地传送RTCP包。RTCP包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,各参与者可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。RTP和RTCP配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。

RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP有如下五种分组类型。

在这里插入图片描述

发送端报告分组SR(Sender Report)用来使发送端以多播方式向所有接收端报告发送情况。SR分组的主要内容有:相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。SR包的封装如下图所示。

在这里插入图片描述

版本(V):同RTP包头域。

填充(P):同RTP包头域。

接收报告计数器(RC):5比特,该SR包中的接收报告块的数目,可以为零。

包类型(PT):8比特,SR包是200。

长度域(Length):16比特,其中存放的是该SR包以32比特为单位的总长度减一。

同步源(SSRC):SR包发送者的同步源标识符。与对应RTP包中的SSRC一样。

NTP Timestamp(Network time protocol)SR包发送时的绝对时间值。NTP的作用是同步不同的RTP媒体流。

RTP Timestamp:与NTP时间戳对应,与RTP数据包中的RTP时间戳具有相同的单位和随机初始值。

Sender’s packet count:从开始发送包到产生这个SR包这段时间里,发送者发送的RTP数据包的总数. SSRC改变时,这个域清零。

Sender`s octet count:从开始发送包到产生这个SR包这段时间里,发送者发送的净荷数据的总字节数(不包括头部和填充)。发送者改变其SSRC时,这个域要清零。

同步源n的SSRC标识符:该报告块中包含的是从该源接收到的包的统计信息。

丢失率(Fraction Lost):表明从上一个SR或RR包发出以来从同步源n(SSRC_n)来的RTP数据包的丢失率。

累计的包丢失数目:从开始接收到SSRC_n的包到发送SR,从SSRC_n传过来的RTP数据包的丢失总数。

收到的扩展最大序列号:从SSRC_n收到的RTP数据包中最大的序列号,

接收抖动(Interarrival jitter):RTP数据包接受时间的统计方差估计

上次SR时间戳(Last SR,LSR):取最近从SSRC_n收到的SR包中的NTP时间戳的中间32比特。如果目前还没收到SR包,则该域清零。

上次SR以来的延时(Delay since last SR,DLSR):上次从SSRC_n收到SR包到发送本报告的延时。

RTSP 实时流传输协议

英文全称:Real Time Streaming Protocol

RTSP是一个应用层协议(TCP/IP网络体系中)。它以C/S模式工作,它是一个多媒体播放控制协议,主要用来使用户在播放流媒体时可以像操作本地的影碟机一样进行控制,即可以对流媒体进行暂停*/*继续、后退和前进等控制。

RTMP 实时消息传输协议

英文全称:Real Time Messaging Protocol

RSVP资源预定协议

英文全称:Resource Reservation Protocol

RSVP工作在IP层之上传输层之下,是一个网络控制协议。RSVP通过在路由器上预留一定的带宽,能在一定程度上为流媒体的传输提供服务质量。在某些试验性的系统如网络视频会议工具vic中就集成了RSVP

MMS 微软媒体服务器协议

英文全称:Microsoft Media Server Protocol

HLS 基于HTTP流媒体传输协议

英文全称:HTTP Live Streaming

应用:

优点:自适应码率流播,客户端会根据网络状况自动选择不同码率的视频流,条件允许的情况下使用高码率,网络繁忙的时候使用低码率,并且自动在二者间随意切换。

缺点:实时性相对较差,直播时延迟比较高。

WebRTC web端实现流媒体的协议

Telnet 远程登陆服务

英文全称:Telecommunication Network

RFC文档:RFC 854

端口:23

Telnet协议可以工作在任何主机(任何操作系统)或任何终端之间。Telnet协议为用户提供了双向的,面向字符(以8bit为数据单位)的通信方式。

Telnet协议有三个基本概念:网络虚拟端NVT,选项协商和对称性。

两台主机可以看出两个人,這两个人可能是说不同的语言,他们之间要是想交流,首先必须得知道对方语言的词语(网络虚拟端NVT),这样子就能进行简单的交流了,其次两个人要想流畅的交流,那得懂对方的一些俚语,比如汉语中的萝卜青菜各有所爱,用英文直译过去外国人可能就不懂其真正含义,所以得知道语法语境(选项协商),到此为止两个人就可以流畅无误的交流了。下图是客户-服务器模式的telnet简图。

在这里插入图片描述

环境搭建

CentOS搭建Telnet服务器
1、安装telnet服务器端及xinetd服务:
rpm -qa | grep telnet-server		//查询是否有telnet服务端包,如果没有就进行下面的安装
yum install -y telnet-server
rpm -qa | grep xinetd		//查询是否有xinetd服务包,如果没有就进行下面的安装
yum install -y xinetd

2、配置telnet文件,开启服务
vim /etc/xinetd.d/telnet
Service telnet
{
    flags      = REUSE
    socket_type   = stream    
    wait       = no
    user       = root
    server     = /usr/sbin/in.telnetd
    log_on_failure    += USERID
    disable       = no  //这个默认是yes,只有改成no才可以启动telnet
}

//默认情况下,linux不允许root用户以telnet方式登录linux主机,若要允许root用户登录,有以下两种方式
第一种:vim /etc/pam.d/login  (#account    required     pam_nologin.so)注销掉
第二种:tail /var/log/secure查看登录的失败信息。根据pam_securetty提示 access denied:tty pts/3 is not secure;意思就是终端 pts/9 不安全,接下来进行第二步vim /etc/securetty,在文件中加入pts/9。
但是最好是用其他用户登录,不用root用户去操作。

3、修改端口(为了防止被攻击,一般都不会使用23端口。)
vim /etc/services
telnet          23/tcp  
telnet          23/udp 

4、修改防火墙
vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 23 -j ACCEPT
service iptables save  //保存   
service iptables restart //重启防火墙  

5、启动telnet
service xinetd restart        //telnet依赖xinetd
Windows设置Telnet客户端

1)控制面板/程序/启动或关闭Windows功能 勾选Telnet客户端选项。如下图

在这里插入图片描述

2)打开Telnet

Win+R快捷键打开,输入CMD运行命令行程序。

telnet IP 端口。

例如telnet 192.168.1.111 23

3)退出telnet

CTRL+] ,然后quit。

我们可以根据传送的请求结尾,推断用户的系统。

DOS/Windows系统采用CR LF(即回车+换行) 表示下一行\r\n。
Linux/UNIX系统采用LF表示下一行 \n。
MAC系统采用CR表示下一行 \r。

网络虚拟终端NVT

英文全称:Network Virtual Terminal

NVT是通用字符终端,是虚拟设备,客户端与服务器必须把它们的物理终端和NVT虚拟设备进行相互转换,也就是说,不管客户进程终端是什么类型,操作系统必须把它转换为NVT格式。同时,不管服务器进程的终端是什么类型,操作系统必须能够把NVT格式转换为终端所能够支持的格式。

NVT是带有键盘和打印机(显示器)的字符设备。用户击键产生的数据被发送到服务器进程,服务器进程回送的响应则输出到打印机(显示器)上。

NVT ASSII代表7bit的ASCII字符集,而在NVT上传输的数据采用8bit格式发送(1bit+7bit),其中最高位是0的为一般数据;最高位是1的为NVT命令。

Telnet命令

Telnet通信的两个方向都采用带内信令方式,即最高位为 1 ,每条命令以字节 IAC(interpret as command,意思是“作为命令来解释”)开始。原理如下:

只要客户机或服务器要发送命令序列而不是数据流,它就在数据流中插入一个特殊的保留字符(IAC ),当接收方在一个入数据流中发现 IAC 字符时,它就把后继的字节处理为一个命令序列。

下面列出了所有的 Telnet NVT 命令。

名称编码说明
EOF236文件结束符
SUSP237挂起当前进程
ABORT238中止进程
EOR239记录结束符
SE240子选项结束
NOP241空操作
DM242数据标记(同步信号)
当一方收到对方已经进入紧急方式的通知后,它一边读取数据一边丢弃所读的,直到读到telnet命令为止。
BRK243终止符(break)
IP244终止进程
AO245终止输出
AYT246请求应答
EC247终止符
EL248擦除一行
GA249继续
SB250子选项开始
WILL251选项协商
WONT252选项协商
DO253选项协商
DONT254选项协商
IAC255字符0XFF

选项协商

当定义了网络虚拟终端设备后,通信的双方就可以在一个较低的层次上实现数据通信,但基本的 NVT 设备所具有的特性是十分有限的,它只能接收和显示 7 位的 ASCII 码,没有最基本的编辑能力,所以简单的 NVT 设备是没有实际应用意义的;为此 TELNET 协议定义了一族协议用于扩展基本 NVT 的功能,目的是使 NVT 能够最大限度地达到用户终端所具有的功能。

其中常用的TELNET选项协商如下:

  1. WILL:发送方本身将激活(enable)选项。
  2. DO:发送方想叫接收端激活选项。
  3. WONT:发送方本身想禁止选项。
  4. DONT:发送方想让接收端去禁止选项。

由于telnet规则规定,对于激活选项WILL的请求,有权同意或者不同意,而对于使选项失效(WONT与DONT)请求,则必须同意,这样子4种请求就会组合出6种情况。

发送者接收者说明
WILLDO发送者想激活某选项,接受者接收该选项请求
WILLDONT发送者想激活某选项,接受者拒绝该选项请求
DOWILL发送者希望接收者激活某选项,接受者接受该请求
DODONT发送者希望接收者激活某选项,接受者拒绝该请求
WONTDONT发送者希望使某选项无效,接受者必须接受该请求
DONTWONT发送者希望对方使某选项无效,接受者必须接受该请求

选项协商需要 3 个字节:IAC,然后是 WILL、DO、WONT 或 DONT;最后一个标识字节用来指明操作的选项(激活或禁止)。常用的选项代码如下:

选项标识名称RFC
1回显(echo)857
3抑制继续进行(传送一次一个字符方式可以选择这个选项)858
5状态859
6时钟标识860
24终端类型1,091
31窗口大小1,073
32终端速率1,079
33远端流量控制1,372
34行模式1,184
36环境变量1,408

子选项协商

最后一个标识字节用来指明激活或禁止选项,但是有些选项不是仅仅用“激活”或“禁止”就能够表达的。例如对于指明终端类型来说,客户必须发送一个字符串来标识终端类型,所以要定义子选项协商。

例如:

用户端–>服务器

<IAC,WILL,选项标识>

服务器–>用户端

<IAC,DO,选项标识>

服务器–>用户端

<IAC,SB,选项标识,子选项标识,1,IAC,SE>、

SB 是子选项开始命令,下一个字节表示该子选项标识。

第四个字节1 的含义是 你。

用户端–>服务器

<IAC,SB,选项标识,子选项标识,0,子选项响应,IAC,SE>

第四个字节 0 的含义是 我。

Telnet选项协商命令格式:IAC 命令码 选项码

Telnet子选项协商命令格式:IAC SB 选项码 参数 IAC SE

telnet进程操作方式

半双工模式

进入方式:GO AHEAD

单字符(一次一字符)模式 char

进入方式:SUPPRESS GO AHEAD 与 ECHO 都成功

准行(一次一行)模式 kludge

进入方式:SUPPRESS GO AHEAD 与 ECHO 其中之一失效

实行(行)模式 linemode

进入方式:当客户端与服务器进程都是BSD/386或4.4BSD的时候才支持实行方式。

在这里插入图片描述

特性Telnent
运输方式一个TCP连接,使用紧急方式
分组方式半双工GO AHEAD
Will Suppress Go Ahead
Do Echo
两个都成功为单字符方式,其中之一失效为准行方式
流量控制Remote Flow Control
终端类型Terminal Type
有VT100,VT200,ANSI彩色等
意义在于不同的终端键盘键入的快捷键内容可能不一样
终端速度Terminal Speed
窗口大小Negotiate About Window Size
环境变量New Environment Option

抓包分析

Telnet请求应答交互图

在这里插入图片描述

交互报文解读:

1,2,3,4

TCP三次握手

4–>5 S–>C

Do New Environment Option 要求客户端激活环境变量

Do X Display Location 要求客户端激活X的显示位置

Do Terminal Speed 要求客户端激活终端速度

Do Terminal Type 要求客户端激活终端类型

5–>6 C–>S

Will Terminal Type 客户端将激活终端类型

**Will Negotiate About Window Size ** 客户端将激活协商窗口尺寸

7–>8 C–>S

Won’t Terminal Speed 客户端将禁止终端速度

Won’t X Display Location 客户端将禁止X的显示位置

Will New Environment Option 客户端将激活环境变量

8–>9 S–>C

Do Negotiate About Window Size 要求客户端激活协商窗口尺寸

9–>10 C–>S

Suboption Negotiate About Window Size 子选项 客户端窗口尺寸

Width: 120

Height: 30

10–>11 S–>C

Suboption Terminal Type 子选项 终端类型

Send your Terminal Type

Suboption New Environment Option 子选项 环境变量

Option data: 01

11–>12 C–>S

Suboption New Environment Option 子选项 环境变量

Option data: 00

13–>14 C–>S

Suboption Terminal Type 子选项 终端类型

Here’s my Terminal Type

Value: ANSI

14–>15 S–>C

Do Remote Flow Control 要求客户端激活流量控制

Will Status 服务端将激活状态理解程度应答

Do Echo 要求客户端回显(回显:显示正在执行的批处理命令及执行的结果)

Will Suppress Go Ahead 服务端将激活继续GA

15–>16 C–>S

Do Suppress Go Ahead 要求服务端激活继续GA

17–>18 C–>S

Will Echo 客户端将激活回显

Don’t Status 要求服务端禁止状态

Won’t Remote Flow Control 客户端将禁止流量控制

18–>19 S–>C

Don’t Echo 要求服务端禁止回显

Will Echo 服务端将激活回显

Data: \r\n 换行

Windows系统里面,每行结尾是 回车+换行(CR+LF),即“\r\n”;

Unix系统里,每行结尾只有 换行CR,即“\n”;

Mac系统里,每行结尾是 回车CR 即’\r’。

因此我们可以根据换行分析出来客户端使用的系统。

19–>20 C–>S

Won’t Echo 客户端将禁止回显

20之后

telnet数据交互

SNMP 网关监控协议

IT资产扫描发现。著名的有manage engine

在这里插入图片描述

GDP 网关发现协议

DHCP 动态主机配置协议

DNS 域名解析

全称:Domain Name Server

域名–>ip地址

SOCKS 安全套接字

默认端口1080

套接字socket:每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 而端口号为80,那么得到的套接字为192.3.4.16:80

Session

Cookie

网络攻击

被攻击后可能造成的威胁

1.在上面挖矿,消耗CPU、GPU、内存和网络带宽

2.被当作肉鸡去攻击外网的服务器

3.被当作肉鸡入侵内网的其他服务器和主机,造成一系列的横向威胁

4.系统破坏,数据丢失

黑客的反侦查意识

服务器历史登录记录last,历史命令和/var/log/messages都会被清空了。

使用lastb命令查看登陆失败的操作,发现有很多国外IP在尝试登录这台机器的ssh,应该是在暴力破解。

SYN伪srcIP无用IP消耗TCB资源
LAND伪srcIP服务器IP消耗TCB资源
DRDOS伪srcIP服务器IP,伪dest为广播地址占用带宽资源
PINGECHO报文是用于诊断网络的请求包,当计算机收到此报文是需要进行回应一个reply报文,需要消耗CPU,为了传送一个大的IP报文,IP协议栈根据MTU对该IP报文进行分片,计算机会缓存接受到的,等待后续。

DoS拒绝服务

英文全称:Denial of Service

利用协议:TCP三次握手。

攻击原理:黑客机器与被攻击的机器之间进行一对一单挑。

DDoS分布式拒绝服务

英文全称:Distributed Denial of Service

利用协议:TCP三次握手。

攻击原理:黑客机器找肉鸡与被攻击的机器之间进行多对一群殴。

通过来自众多来源的流量负载压倒在线服务,使网络资源或服务器对其用户不可用。
使目标站点的带宽饱和,以使站点无法使用。攻击的大小以每秒位数(Bps)为单位。包括:

UDP泛洪攻击:UDP泛洪会占用主机资源,导致站点无法访问。

ICMP泛滥:也称为“ping泛洪”。持续和传出的带宽受到该类型攻击影响,导致系统整体放缓。
占用服务器资源,或防火墙和负载平衡器的资源。它以每秒数据包为单位进行测量。包括:

SYN Flood:恶意占用资源,拒绝合法用户的服务。

死亡Ping:溢出内存缓冲区,从而导致崩溃、重启和拒绝合法用户的服务。

反射攻击:最具灾难性的攻击类型之一,攻击可能涉及数千台计算机,所有计算机都将数据ping回单个目标,导致大规模减速和服务拒绝。
模仿人类行为与用户界面交互。通过使用似乎合法的崩溃Web服务器的请求来针对OpenBSD、Windows、Apache和其他软件的漏洞。应用层攻击的大小以每秒请求数来衡量。包括:

Slowloris:使所有连接保持开启状态,这会使最大并发连接池超载,从而导致拒绝服务。

HTTP泛滥:利用貌似合法的HTTP GET或POST请求来攻击服务器或应用程序。这种攻击需要的带宽较少。

我们无法阻止DDoS攻击。但是,有各种缓解和保护技术可以限制DDoS攻击造成的损害。DDoS缓解技术有两大类:通用和过滤。
就本质而言,DDoS攻击是暴力攻击。这意味着使用无穷无尽的数据来不断砸向他们的目标,直到目标网站/应用崩溃并变得无用。因此,DDoS保护和缓解策略的工作原理是降低整体系统的敏感性,并采用过滤技术将合法请求与可能有害的请求分开。服务器接入高防线路,通过智能化的攻击检测平台,实时精准地识别DDoS各类变种攻击,再通过流量清洗中心,将被攻击站点的访客流量和请求进行清洗过滤,彻底阻截恶意流量,同时将正常合法流量返注回源站,最终达到保障网站始终可访问的目的。

DRDoS分布式反射拒绝服务

英文全称:Distributed Reflection Denial of Service

利用协议:TCP三次握手。

攻击原理:发送大量带有被害者IP地址的数据包给攻击主机,然后攻击主机对IP地址源做出大量回应,形成拒绝服务攻击。它是DDoS攻击的变形,它的唯一不同就是不用占领大量的“肉鸡”。和Smurf攻击原理相近,不过DRDoS是可以在广域网上进行的,而Smurf攻击是在局域网进行的。

它的作用原理是基于广播地址与回应请求的。一台计算机向另一台计算机发送一些特殊的数据包如ping请求时,会接到它的回应;如果向本网络的广播地址发送请求包,实际上会到达网络上所有的计算机,这时就会得到所有计算机的回应。这些回应是需要被接收的计算机处理的,每处理一个就要占用一份系统资源,如果同时接到网络上所有计算机的回应,接收方的系统是有可能吃不消的,就象遭到了DDoS攻击一样。不过是没有人笨到自己攻击自己,不过这种方法被黑客加以改进就具有很大的威力了。黑客向广播地址发送请求包,所有的计算机得到请求后,却不会把回应发到黑客那里,而是发到被攻击主机。这是因为黑客冒充了被攻击主机。黑客发送请求包所用的软件是可以伪造源地址的,接到伪造数据包的主机会根据源地址把回应发出去,这当然就是被攻击主机的地址。黑客同时还会把发送请求包的时间间隔减小,这样在短时间能发出大量的请求包,使被攻击主机接到从被欺骗计算机那里传来的洪水般的回应,就像遭到了DDoS攻击导致系统崩溃。骇客借助了网络中所有计算机来攻击受害者,而不需要事先去占领这些被欺骗的主机,这就是Smurf攻击。而DRDoS攻击正是这个原理,黑客同样利用特殊的发包工具,首先把伪造了源地址的SYN连接请求包发送到那些被欺骗的计算机上,根据TCP三次握手的规则,这些计算机会向源IP发出SYN+ACK或RST包来响应这个请求。同Smurf攻击一样,黑客所发送的请求包的源IP地址是被攻击主机的地址,这样受欺骗的主机就都会把回应发到被攻击主机处,造成被攻击主机忙于处理这些回应而瘫痪。

黑客往往会选择那些响应包远大于请求包的服务来利用,这样才可以以较小的流量换取更大的流量,获得几倍甚至几十倍的放大效果。一般来说,可以被利用来做放大反射攻击的服务包括DNS服务、NTP服务、SSDP服务、Chargen服务、Memcached等。

SYN Flood 拒绝服务攻击

利用协议:TCP三次握手。

一般情况下,一个 TCP 连接的建立需要经过三次握手的过程,即:
1、 建立发起者向目标计算机发送一个 TCP SYN 报文;
2、 目标计算机收到这个 SYN 报文后,在内存中创建 TCP 连接控制块(TCB ),然后向发起者回送一个 TCP ACK 报文,等待发起者的回应;
3、 发起者收到 TCP ACK 报文后,再回应一个 ACK 报文,这样 TCP 连接就建立起来了。
利用这个过程,一些恶意的攻击者可以进行所谓的 TCP SYN 拒绝服务攻击:
1、 攻击者向目标计算机发送一个 TCP SYN 报文;
2、 目标计算机收到这个报文后,建立 TCP 连接控制结构( TCB),并回应一个 ACK ,等待发起者的回应;
3、 而发起者则不向目标计算机回应 ACK 报文,这样导致目标计算机一致处于等待状态。
可以看出,目标计算机如果接收到大量的 TCP SYN 报文,而没有收到发起者的第三次 ACK 回应,会一直等待,处于这样尴尬状态的半连接如果很多,则会把目标计算机的资源( TCB 控制结构, TCB ,一般情况下是有限的)耗尽,而不能响应正常的 TCP 连接请求。
因而现在tcp三握手已经和原来有所不同,当第三次握手失败时的处理操作,服务器并不会重传ack报文,而是直接发送RTS报文段,进入CLOSED状态。这样做的目的是为了防止SYN洪泛攻击。

Smurf 攻击

ICMP ECHO 请求包用来对网络进行诊断,当一台计算机接收到这样一个报文后,会向报文的源地址回应一个 ICMP ECHO REPLY。一般情况下,计算机是不检查该 ECHO 请求的源地址的,因此,如果一个恶意的攻击者把 ECHO 的源地址设置为一个广播地址,这样计算机在恢复 REPLY 的时候,就会以广播地址为目的地址,这样本地网络上所有的计算机都必须处理这些广播报文。 如果攻击者发送的 ECHO 请求报文足够多,产生的 REPLY 广播报文就可能把整个网络淹没。这就是所谓的 smurf 攻击。
除了把 ECHO 报文的源地址设置为广播地址外,攻击者还可能把源地址设置为一个子网广播地址,这样,该子网所在的计算机就可能受影响。

ICMP 洪水

正常情况下,为了对网络进行诊断,一些诊断程序,比如 PING 等,会发出 ICMP 响应请求报文( ICMP ECHO ),接收计算机接收到 ICMP ECHO 后,会回应一个 ICMP ECHO Reply 报文。而这个过程是需要CPU 处理的,有的情况下还可能消耗掉大量的资源,比如处理分片的时候。这样如果攻击者向目标计算机发送大量的 ICMP ECHO 报文(产生 ICMP 洪水),则目标计算机会忙于处理这些 ECHO 报文,而无法继续处理其它的网络数据报文,这也是一种拒绝服务攻击( DOS )。

PING :利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少

对网络设备无限请求,从而造成设备瘫痪,不能正常响应请求。

UDP 洪水

原理与 ICMP 洪水类似,攻击者通过发送大量的 UDP 报文给目标计算机,导致目标计算机忙于处理这些UDP 报文而无法继续处理正常的报文。

端口扫描

根据 TCP 协议规范,当一台计算机收到一个 TCP 连接建立请求报文( TCP SYN )的时候,做这样的处理:

  1. 如果请求的 TCP 端口是开放的,则回应一个 TCP ACK 报文,并建立 TCP 连接控制结构( TCB)
  2. 如果请求的 TCP 端口没有开放,则回应一个 TCP RST (TCP 头部中的 RST 标志设为 1 )报文,告诉发起计算机,该端口没有开放

相应地,如果 IP 协议栈收到一个 UDP 报文,做如下处理:

  1. 如果该报文的目标端口开放,则把该 UDP 报文送上层协议( UDP )处理,不回应任何报文(上层协议根据处理结果而回应的报文例外)
  2. 如果该报文的目标端口没有开放,则向发起者回应一个 ICMP 不可达报文,告诉发起者计算机该 UDP 报文的端口不可达

利用这个原理,攻击者计算机便可以通过发送合适的报文,判断目标计算机哪些 TCP 或 UDP 端口是开放的,过程如下:

  1. 发出端口号从 0 开始依次递增的 TCP SYN 或 UDP 报文(端口号是一个 16 比特的数字,这样最大为65535 ,数量很有限)
  2. 如果收到了针对这个 TCP 报文的 RST 报文,或针对这个 UDP 报文的 ICMP 不可达报文,则说明这个端口没有开放
  3. 相反,如果收到了针对这个 TCP SYN 报文的 ACK 报文,或者没有接收到任何针对该 UDP 报文的 ICMP 报文,则说明该 TCP 端口是开放的, UDP 端口可能开放(因为有的实现中可能不回应 ICMP 不可达报文,即使该 UDP 端口没有开放)

这样继续下去,便可以很容易的判断出目标计算机开放了哪些 TCP 或 UDP 端口,然后针对端口的具体数字,进行下一步攻击,这就是所谓的端口扫描攻击。

NTP放大攻击

https://vpn.cnsunet.com.cn/use_case_ntp.html

分片 IP 报文攻击

为了传送一个大的 IP 报文, IP 协议栈需要根据链路接口的 MTU 对该 IP 报文进行分片,通过填充适当的IP 头中的分片指示字段,接收计算机可以很容易的把这些 IP 分片报文组装起来。
目标计算机在处理这些分片报文的时候,会把先到的分片报文缓存起来,然后一直等待后续的分片报文,这个过程会消耗掉一部分内存, 以及一些 IP 协议栈的数据结构。 如果攻击者给目标计算机只发送一片分片报文,而不发送所有的分片报文,这样攻击者计算机便会一直等待(直到一个内部计时器到时) ,如果攻击者发送了大量的分片报文,就会消耗掉目标计算机的资源,而导致不能响应正常的 IP 报文,这也是一种DOS 攻击。

SYN 比特和 FIN 比特同时设置

在 TCP 报文的报头中,有几个标志字段:

  1. SYN:连接建立标志, TCP SYN 报文就是把这个标志设置为 1 ,来请求建立连接;
  2. ACK :回应标志,在一个 TCP 连接中,除了第一个报文( TCP SYN )外,所有报文都设置该字段,作为对上一个报文的相应;
  3. FIN :结束标志,当一台计算机接收到一个设置了 FIN 标志的 TCP 报文后,会拆除这个 TCP 连接;
  4. RST:复位标志,当 IP 协议栈接收到一个目标端口不存在的 TCP 报文的时候,会回应一个 RST 标志设置的报文;
  5. PSH:通知协议栈尽快把 TCP 数据提交给上层程序处理。

正常情况下, SYN 标志(连接请求标志)和 FIN 标志(连接拆除标志)是不能同时出现在一个 TCP 报文中的。而且 RFC 也没有规定 IP 协议栈如何处理这样的畸形报文,因此,各个操作系统的协议栈在收到这样的报文后的处理方式也不同,攻击者就可以利用这个特征,通过发送 SYN 和 FIN 同时设置的报文,来判断操作系统的类型,然后针对该操作系统,进行进一步的攻击。

没有设置任何标志的 TCP 报文攻击

正常情况下,任何 TCP 报文都会设置 SYN,FIN ,ACK ,RST ,PSH 五个标志中的至少一个标志,第一个 TCP 报文( TCP 连接请求报文)设置 SYN 标志,后续报文都设置 ACK 标志。有的协议栈基于这样的假设,没有针对不设置任何标志的 TCP 报文的处理过程,因此,这样的协议栈如果收到了这样的报文,可能会崩溃。攻击者利用了这个特点,对目标计算机进行攻击。

设置了 FIN 标志却没有设置 ACK 标志的 TCP 报文攻击

正常情况下, ACK 标志在除了第一个报文( SYN 报文)外,所有的报文都设置,包括 TCP 连接拆除报文(FIN 标志设置的报文)。但有的攻击者却可能向目标计算机发送设置了 FIN 标志却没有设置 ACK 标志的TCP 报文,这样可能导致目标计算机崩溃。

死亡之 PING

TCP/IP 规范要求 IP 报文的长度在一定范围内(比如, 0-64K ),但有的攻击计算机可能向目标计算机发出大于 64K 长度的 PING 报文,导致目标计算机 IP 协议栈崩溃。

地址猜测攻击

跟端口扫描攻击类似,攻击者通过发送目标地址变化的大量的 ICMP ECHO 报文,来判断目标计算机是否存在。如果收到了对应的 ECMP ECHO REPLY 报文,则说明目标计算机是存在的,便可以针对该计算机进行下一步的攻击。

泪滴攻击

对于一些大的 IP 包,需要对其进行分片传送,这是为了迎合链路层的 MTU (最大传输单元)的要求。比如,一个 4500 字节的 IP 包,在 MTU 为 1500 的链路上传输的时候,就需要分成三个 IP 包。在 IP 报头中有一个偏移字段和一个分片标志( MF),如果 MF 标志设置为 1,则表面这个 IP 包是一个大 IP 包的片断,其中偏移字段指出了这个片断在整个 IP 包中的位置。

例如,对一个 4500 字节的 IP 包进行分片( MTU 为 1500 ),则三个片断中偏移字段的值依次为: 0 ,1500 ,3000 。这样接收端就可以根据这些信息成功的组装该 IP 包。如果一个攻击者打破这种正常情况,把偏移字段设置成不正确的值,即可能出现重合或断开的情况,就可能导致目标操作系统崩溃。比如,把上述偏移设置为 0,1300 ,3000 。这就是所谓的泪滴攻击。

带源路由选项的 IP 报文

为了实现一些附加功能, IP 协议规范在 IP 报头中增加了选项字段,这个字段可以有选择的携带一些数据,以指明中间设备(路由器)或最终目标计算机对这些 IP 报文进行额外的处理。
源路由选项便是其中一个,从名字中就可以看出,源路由选项的目的,是指导中间设备(路由器)如何转发该数据报文的,即明确指明了报文的传输路径。比如,让一个 IP 报文明确的经过三台路由器 R1 ,R2,R3 ,则可以在源路由选项中明确指明这三个路由器的接口地址,这样不论三台路由器上的路由表如何,这个 IP 报文就会依次经过 R1,R2,R3 。而且这些带源路由选项的 IP 报文在传输的过程中,其源地址不断改变,目标地址也不断改变,因此,通过合适的设置源路由选项,攻击者便可以伪造一些合法的 IP 地址,而蒙混进入网络。

带记录路由选项的 IP 报文

记录路由选项也是一个 IP 选项,携带了该选项的 IP 报文,每经过一台路由器,该路由器便把自己的接口地址填在选项字段里面。这样这些报文在到达目的地的时候,选项数据里面便记录了该报文经过的整个路径。通过这样的报文可以很容易的判断该报文经过的路径,从而使攻击者可以很容易的寻找其中的攻击弱点。

未知协议字段的 IP 报文

在 IP 报文头中,有一个协议字段, 这个字段指明了该 IP 报文承载了何种协议 ,比如,如果该字段值为 1,则表明该 IP 报文承载了 ICMP 报文,如果为 6,则是 TCP,等等。目前情况下,已经分配的该字段的值都是小于 100 的,因此,一个带大于 100 的协议字段的 IP 报文,可能就是不合法的,这样的报文可能对一些计算机操作系统的协议栈进行破坏。

IP 地址欺骗

一般情况下,路由器在转发报文的时候,只根据报文的目的地址查路由表,而不管报文的源地址是什么,因此,这样就 可能面临一种危险: 如果一个攻击者向一台目标计算机发出一个报文, 而把报文的源地址填写为第三方的一个 IP 地址,这样这个报文在到达目标计算机后, 目标计算机便可能向毫无知觉的第三方计算机回应。这便是所谓的 IP 地址欺骗攻击。
比较著名的 SQL Server 蠕虫病毒,就是采用了这种原理。该病毒(可以理解为一个攻击者)向一台运行SQL Server 解析服务的服务器发送一个解析服务的 UDP 报文,该报文的源地址填写为另外一台运行 SQL Server 解析程序( SQL Server 2000 以后版本)的服务器,这样由于 SQL Server 解析服务的一个漏洞,就可能使得该 UDP 报文在这两台服务器之间往复,最终导致服务器或网络瘫痪。

WinNuke 攻击

NetBIOS 作为一种基本的网络资源访问接口,广泛的应用于文件共享,打印共享,进程间通信( IPC ),以及不同操作系统之间的数据交换。 一般情况下, NetBIOS 是运行在 LLC2 链路协议之上的, 是一种基于组播的网络访问接口。为了在 TCP/IP 协议栈上实现 NetBIOS ,RFC 规定了一系列交互标准,以及几个常用的 TCP/UDP 端口:
139 :NetBIOS 会话服务的 TCP 端口;
137 :NetBIOS 名字服务的 UDP 端口;
136 :NetBIOS 数据报服务的 UDP 端口。

WINDOWS 操作系统的早期版本( WIN95/98/NT )的网络服务(文件共享等)都是建立在 NetBIOS 之上的,因此,这些操作系统都开放了 139 端口(最新版本的 WINDOWS 2000/XP/2003 等,为了兼容,也实现了 NetBIOS over TCP/IP 功能,开放了 139 端口)。WinNuke 攻击就是利用了 WINDOWS 操作系统的一个漏洞,向这个 139 端口发送一些携带 TCP 带外(OOB )数据报文,但这些攻击报文与正常携带 OOB 数据报文不同的是,其指针字段与数据的实际位置不符,即存在重合,这样 WINDOWS 操作系统在处理这些数据的时候,就会崩溃。

Land 攻击

LAND 攻击利用了 TCP 连接建立的三次握手过程,通过向一个目标计算机发送一个 TCP SYN 报文(连接建立请求报文)而完成对目标计算机的攻击。与正常的 TCP SYN 报文不同的是,LAND 攻击报文的源 IP 地址和目的 IP 地址是相同的,都是目标计算机的 IP 地址。这样目标计算机接收到这个 SYN 报文后,就会向该报文的源地址发送一个 ACK 报文,并建立一个 TCP 连接控制结构( TCB ),而该报文的源地址就是自己,因此,这个 ACK 报文就发给了自己。
这样如果攻击者发送了足够多的 SYN 报文,则目标计算机的 TCB 可能会耗尽,最终不能正常服务。这也是一种 DOS 攻击。

Script/ActiveX 攻击

Script 是一种可执行的脚本,它一般由一些脚本语言写成,比如常见的 JAVA SCRIPT ,VB SCRIPT 等。
这些脚本在执行的时候,需要一个专门的解释器来翻译,翻译成计算机指令后,在本地计算机上运行。这种脚本的好处是,可以通过少量的程序写作,而完成大量的功能。
这种 SCRIPT 的一个重要应用就是嵌入在 WEB 页面里面,执行一些静态 WEB 页面标记语言(HTML )无法完成的功能,比如本地计算,数据库查询和修改,以及系统信息的提取等。这些脚本在带来方便和强大功能的同时,也为攻击者提供了方便的攻击途径。如果攻击者写一些对系统有破坏的SCRIPT ,然后嵌入在 WEB 页面中,一旦这些页面被下载到本地,计算机便以当前用户的权限执行这些脚本,这样,当前用户所具有的任何权限, SCRIPT 都可以使用,可以想象这些恶意的 SCRIPT 的破坏程度有多强。这就是所谓的 SCRIPT 攻击。
ActiveX 是一种控件对象,它是建立在 MICROSOFT 的组件对象模型( COM )之上的,而 COM 则几乎是 Windows 操作系统的基础结构。可以简单的理解,这些控件对象是由方法和属性构成的,方法即一些操作,而属性则是一些特定的数据。这种控件对象可以被应用程序加载,然后访问其中的方法或属性,以完成一些特定的功能。可以说, COM 提供了一种二进制的兼容模型(所谓二进制兼容,指的是程序模块与调用的编译环境,甚至操作系统没有关系) 。但需要注意的是,这种对象控件不能自己执行,因为它没有自己的进程空间,而只能由其它进程加载,并调用其中的方法和属性,这时候,这些控件便在加载进程的进程空间运行,类似与操作系统的可加载模块,比如 DLL 库。
ActiveX 控件可以嵌入在 WEB 页面里面,当浏览器下载这些页面到本地后,相应地也下载了嵌入在其中的 ActiveX 控件,这样这些控件便可以在本地浏览器进程空间中运行 (ActiveX 空间没有自己的进程空间,只能由其它进程加载并调用) ,因此,当前用户的权限有多大, ActiveX 的破坏性便有多大。如果一个恶意的攻击者编写一个含有恶意代码的 ActiveX 控件,然后嵌入在 WEB 页面中,被一个浏览用户下载后执行,其破坏作用是非常大的。这便是所谓的 ActiveX 攻击。

虚拟终端耗尽攻击

( VTY )这是一种针对网络设备的攻击,比如路由器,交换机等。这些网络设备为了便于远程管理,一般设置了一些 TELNET 用户界面,即用户可以通过 TELNET 到该设备上,对这些设备进行管理。
一般情况下,这些设备的 TELNET 用户界面个数是有限制的,比如, 5 个或 10 个等。这样,如果一个攻击者同时同一台网络设备建立了 5 个或 10 个 TELNET 连接,这些设备的远程管理界面便被占尽,这样合法用户如果再对这些设备进行远程管理,则会因为 TELNET 连接资源被占用而失败。

路由协议攻击

网络设备之间为了交换路由信息,常常运行一些动态的路由协议,这些路由协议可以完成诸如路由表的建立,路由信息的分发等功能。常见的路由协议有 RIP ,OSPF ,IS-IS ,BGP 等。这些路由协议在方便路由信息管理和传递的同时,也存在一些缺陷,如果攻击者利用了路由协议的这些权限,对网络进行攻击,可能造成网络设备路由表紊乱(这足可以导致网络中断) ,网络设备资源大量消耗,甚至导致网络设备瘫痪。
下面列举一些常见路由协议的攻击方式及原理:

针对 RIP 协议的攻击

RIP ,即路由信息协议,是通过周期性(一般情况下为 30S )的路由更新报文来维护路由表的,一台运行RIP 路由协议的路由器, 如果从一个接口上接收到了一个路由更新报文, 它就会分析其中包含的路由信息,并与自己的路由表作出比较,如果该路由器认为这些路由信息比自己所掌握的要有效,它便把这些路由信息引入自己的路由表中。
这样如果一个攻击者向一台运行 RIP 协议的路由器发送了人为构造的带破坏性的路由更新报文,就很容易的把路由器的路由表搞紊乱,从而导致网络中断。如果运行 RIP 路由协议的路由器启用了路由更新信息的 HMAC 验证,则可从很大程度上避免这种攻击。

针对 OSPF 路由协议的攻击

OSPF ,即开放最短路径优先,是一种应用广泛的链路状态路由协议。该路由协议基于链路状态算法,具有收敛速度快,平稳,杜绝环路等优点,十分适合大型的计算机网络使用。 OSPF 路由协议通过建立邻接关系,来交换路由器的本地链路信息,然后形成一个整网的链路状态数据库,针对该数据库,路由器就可以很容易的计算出路由表。
可以看出,如果一个攻击者冒充一台合法路由器与网络中的一台路由器建立邻接关系,并向攻击路由器输入大量的链路状态广播( LSA ,组成链路状态数据库的数据单元) ,就会引导路由器形成错误的网络拓扑结构,从而导致整个网络的路由表紊乱,导致整个网络瘫痪。
当前版本的 WINDOWS 操作系统( WIN 2K/XP 等)都实现了 OSPF 路由协议功能,因此一个攻击者可以很容易的利用这些操作系统自带的路由功能模块进行攻击。跟 RIP 类似,如果 OSPF 启用了报文验证功能( HMAC 验证),则可以从很大程度上避免这种攻击。

针对 IS-IS 路由协议的攻击

IS-IS 路由协议,即中间系统到中间系统,是 ISO 提出来对 ISO 的 CLNS 网络服务进行路由的一种协议,这种协议也是基于链路状态的,原理与 OSPF 类似。 IS-IS 路由协议经过 扩展,可以运行在 IP 网络中,对 IP 报文进行选路。这种路由协议也是通过建立邻居关系, 收集路由器本地链路状态的手段来完成链路状态数据库同步的。该协议的邻居关系建立比 OSPF 简单,而且也省略了 OSPF 特有的一些特性,使该协议简单明了,伸缩性更强。
对该协议的攻击与 OSPF 类似,通过一种模拟软件与运行该协议的路由器建立邻居关系,然后传颂给攻击路由器大量的链路状态数据单元( LSP),可以导致整个网络路由器的链路状态数据库不一致(因为整个网络中所有路由器的链路状态数据库都需要同步到相同的状态) ,从而导致路由表与实际情况不符, 致使网络中断。与 OSPF 类似,如果运行该路由协议的路由器启用了 IS-IS 协议单元( PDU )HMAC 验证功能,则可以从很大程度上避免这种攻击。

针对设备转发表的攻击

为了合理有限的转发数据,网络设备上一般都建立一些寄存器表项,比如 MAC 地址表, ARP 表,路由表,快速转发表,以及一些基于更多报文头字段的表格,比如多层交换表,流项目表等。这些表结构都存储在设备本地的内存中,或者芯片的片上内存中,数量有限。如果一个攻击者通过发送合适的数据报,促使设备建立大量的此类表格,就会使设备的存储结构消耗尽,从而不能正常的转发数据或崩溃。
下面针对几种常见的表项,介绍其攻击原理:

针对 MAC 地址表的攻击

MAC 地址表一般存在于以太网交换机上,以太网通过分析接收到的数据幀的目的 MAC 地址,来查本地的MAC 地址表,然后作出合适的转发决定。
这些 MAC 地址表一般是通过学习获取的,交换机在接收到一个数据幀后,有一个学习的过程,该过程是这样的:
a) 提取数据幀的源 MAC 地址和接收到该数据幀的端口号;
b) 查 MAC 地址表,看该 MAC 地址是否存在,以及对应的端口是否符合;
c) 如果该 MAC 地址在本地 MAC 地址表中不存在,则创建一个 MAC 地址表项;
d) 如果存在,但对应的出端口跟接收到该数据幀的端口不符,则更新该表;
e) 如果存在,且端口符合,则进行下一步处理。

分析这个过程可以看出,如果一个攻击者向一台交换机发送大量源 MAC 地址不同的数据幀,则该交换机就可能把自己本地的 MAC 地址表学满。一旦 MAC 地址表溢出,则交换机就不能继续学习正确的 MAC 表项,结果是可能产生大量的网络冗余数据,甚至可能使交换机崩溃。
而构造一些源 MAC 地址不同的数据幀,是非常容易的事情。

针对 ARP 表的攻击

ARP 表是 IP 地址和 MAC 地址的映射关系表,任何实现了 IP 协议栈的设备,一般情况下都通过该表维护IP 地址和 MAC 地址的对应关系,这是为了避免 ARP 解析而造成的广播数据报文对网络造成冲击。 ARP 表的建立一般情况下是通过二个途径:

  1. 主动解析,如果一台计算机想与另外一台不知道 MAC 地址的计算机通信,则该计算机主动发 ARP 请求,通过 ARP 协议建立(前提是这两台计算机位于同一个 IP 子网上);
  2. 被动请求,如果一台计算机接收到了一台计算机的 ARP 请求,则首先在本地建立请求计算机的 IP 地址和 MAC 地址的对应表。

因此,如果一个攻击者通过变换不同的 IP 地址和 MAC 地址,向同一台设备,比如三层交换机发送大量的ARP 请求,则被攻击设备可能会因为 ARP 缓存溢出而崩溃。
针对 ARP 表项,还有一个可能的攻击就是误导计算机建立正确的 ARP 表。根据 ARP 协议,如果一台计算机接收到了一个 ARP 请求报文,在满足下列两个条件的情况下, 该计算机会用 ARP 请求报文中的源 IP 地址和源 MAC 地址更新自己的 ARP 缓存:

  1. 如果发起该 ARP 请求的 IP 地址在自己本地的 ARP 缓存中;
  2. 请求的目标 IP 地址不是自己的。

可以举一个例子说明这个过程, 假设有三台计算机 A,B,C,其中 B 已经正确建立了 A 和 C 计算机的 ARP 表项。假设 A 是攻击者,此时, A 发出一个 ARP 请求报文,该请求报文这样构造:

  1. 源 IP 地址是 C 的 IP 地址,源 MAC 地址是 A 的 MAC 地址;
  2. 请求的目标 IP 地址是 A 的 IP 地址。

这样计算机 B 在收到这个 ARP 请求报文后(ARP 请求是广播报文,网络上所有设备都能收到) ,发现 B 的 ARP 表项已经在自己的缓存中,但 MAC 地址与收到的请求的源 MAC 地址不符,于是根据 ARP 协议,使用 ARP 请求的源 MAC 地址(即 A 的 MAC 地址)更新自己的 ARP 表。
这样 B 的 ARP 混存中就存在这样的错误 ARP 表项: C 的 IP 地址跟 A 的 MAC 地址对应。这样的结果是,B 发给 C 的数据都被计算机 A 接收到。

针对流项目表的攻击

有的网络设备为了加快转发效率,建立了所谓的流缓存。所谓流,可以理解为一台计算机的一个进程到另外一台计算机的一个进程之间的数据流。如果表现在 TCP/IP 协议上,则是由(源 IP 地址,目的 IP 地址,协议号,源端口号,目的端口号)五元组共同确定的所有数据报文。
一个流缓存表一般由该五元组为索引,每当设备接收到一个 IP 报文后,会首先分析 IP 报头,把对应的五元组数据提取出来,进行一个 HASH 运算,然后根据运算结果查询流缓存,如果查找成功,则根据查找的结果进行处理,如果查找失败,则新建一个流缓存项,查路由表,根据路由表查询结果填完整这个流缓存,然后对数据报文进行转发(具体转发是在流项目创建前还是创建后并不重要) 。
可以看出,如果一个攻击者发出大量的源 IP 地址或者目的 IP 地址变化的数据报文,就可能导致设备创建大量的流项目,因为不同的源 IP 地址和不同的目标 IP 地址对应不同的流。这样可能导致流缓存溢出。

(一)三次握手
ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
发送序列号:Sequence Number
确认序列号:Acknowledgment Number

CLOSED: 初始状态。
LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处 于监听状态,可以接受连接了。
SYN_RCVD: 在收到和发送一个连接请求后等待对连接请求的确认
SYN_SENT: 在发送连接请求后等待匹配的连接请求
ESTABLISHED:建立连接了

服务器通过listen系统调用进入listen状态,被动打开,服务器一旦监听到某个连接请求,这个连接请求就是收到的同步报文段,之后就将该连接放入等待队列中。
客户端connect系统调用主动与服务器建立连接。发送一个同步报文段给服务器,连接转移为SYN_SENT。connect失败返回:
1.connect连接的目的端口不存在或被TIME_WAIT占用
2.在超时时间内未收到服务器的确认报文
connect失败立即返回CLOSED状态,成功进入ESTABLISHED状态。
第一次握手:客户端主动打开连接,发送带有SYN=1,ACK=0的TCP报文到服务器,初始序号X,保存在包头的序列号(Sequence Number)中,同时客户端进入SYN_SEND状态。
第二次握手:服务器收到SYN包,确认SYN(ack=x+1)将确认序号(Acknowledgement Number)设置为客户的ISN加1以.即X+1,自己发送一个SYN(seq=y),同时服务器进入SYN_RECV状态
第三次握手: 客户端收到服务器的SYN+ACK, 回复ACK=1, ack=y+1,在数据段放写seq+1(即ISN+1)。同时端和服务器进入ESTABLISHED状态,完成三次握手。

为什么是三次握手,而不是两次握手
客户端为A,服务器为B
当要进行连接时,A发送一个连接请求,如果连接请求报文丢失,A再会重新发送一个请求连接,等B收到请求确认连接后,建立起连接。
但如果A发出的第一个连接请求报文并没有丢失,而是被滞留在网络,延迟到A第二个连接请求建立后达到。如果没有第三次握手,B以为A有发出一个新的连接请求,B确认建立连接。A在这时却没有发出连接请求,不理B的确认,不发送数据,B却等待A发送数据,B的资源浪费。
采用三次握手,B确认后收不到A的确认,连接就建立不起来。

(二)攻击
在TCP三次握手时,攻击者故意不完成三次握手,导致服务器资源耗费,直到瘫痪

DoS(拒绝服务攻击 Denial Of Service)
就是“单挑”,比谁机器性能好,你发出每秒10个攻击数据包,而被攻击机器每秒能接受处理100个攻击数据包,那么你的攻击就没效果,你的服务器可能崩溃。

DDoS(分布式拒绝服务攻击Distributed Denial of Service)
就是“群殴”,多个机器发动DoS攻击去攻击一台机器,这是由一名黑客操作的,他是通过他的机器在网络上占领很多的“肉鸡”,并且控制这些“肉鸡”来发动DDoS攻击

DRDoS(分布反射式拒绝服务攻击Distributed Reflection Denial of Service)
它是DDoS攻击的变形,它与DDoS攻击不同在于在进行攻击前不需要占有大量的“肉鸡”。DRDos是可以在广域网上的,它的作用原理是基于广播地址与回应请求的。一台计算机向另一台计算机发送一些特殊的数据包如ping请求时,会接到它的回应;如果向本网络的广播地址发送请求包,实际上会到达网络上所有的计算机,这时就会得到所有计算机的回应。首先把伪造了源地址的SYN连接请求包发送到那些被欺骗的计算机上,这些回应是需要被接收的计算机处理的,每处理一个就要占用一份系统资源,如果同时接到网络上所有计算机的回应,接收方的系统是有可能吃不消的,就象遭到了DDoS攻击一样。根据TCP三次握手的规则,这些计算机会向源IP发出SYN+ACK或RST包来响应这个请求。黑客所发送的请求包的源IP地址是被攻击主机的地址,这样受欺骗的主机就都会把回应发到被攻击主机处,造成被攻击主机忙于处理这些回应而瘫痪

TCP协议栈的弱点:TCP连接的资源消耗,其中包括:数据包信息、条件状态、序列号等。通过故意不完成建立连接所需要的三次握手过程,造成连接一方的资源耗尽。

SYN洪水攻击(SYN-Flood)是DoS与DDoS方式之一
客户端和服务器在网络中使用TCP协议发起会话时,在服务器内存中会开辟一小块缓冲区来处理会话过程中消息的握手交换。

伪装虚拟IP地址发动攻击
拦截客户机应答报文
多客户端情况下,大量第二次握手确认报文发出,再拦截,再发出,导致服务器瘫痪。

防御措施:

缩短SYN Timeout时间 限制同时打开的SYN半连接数目
SYN Flood攻击效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度 x SYN Timeout,设置20秒以下可以成倍的降低服务器的负荷。

设置SYN Cookie
在TCP服务器接收到TCP SYN包并返回TCP SYN + ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。这个cookie作为将要返回的SYN ACK包的初始序列号。当客户端返回一个ACK包时,根据包头信息计算cookie,与返回的确认序列号(初始序列号 + 1)进行对比,如果相同,则是一个正常连接,然后,分配资源,建立连接,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃。

为防止TCP会话劫持,加密传输
防火墙

TCP握手协议
TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.

完成三次握手,客户端与服务器开始传送数据

A与B建立TCP连接时:首先A向B发SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了!

一、TCP报文格式

    TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:

图1 TCP报文格式

    上图中有几个字段需要重点介绍下:
    (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
    (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
    (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
            (A)URG:紧急指针(urgent pointer)有效。
            (B)ACK:确认序号有效。
            (C)PSH:接收方应该尽快将这个报文交给应用层。
            (D)RST:重置连接。
            (E)SYN:发起一个新连接。
            (F)FIN:释放一个连接。
    需要注意的是:
            (A)不要将确认序号Ack与标志位中的ACK搞混了。
            (B)确认方Ack=发起方Req+1,两端配对。 

二、三次握手
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:
图2 TCP三次握手

    (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
    (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
    (3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
    SYN攻击:
            在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
            #netstat -nap | grep SYN_RECV

三、四次挥手
三次握手耳熟能详,四次挥手估计就,所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:
图3 TCP四次挥手

    由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
    (1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
    (2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
    (3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
    (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
    上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,具体流程如下图:

图4 同时挥手

    流程和状态在上图中已经很明了了,在此不再赘述,可以参考前面的四次挥手解析步骤。

(1)三次握手是什么或者流程?四次握手呢?答案前面分析就是。
(2)为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

网络性能

TCP性能主要可供选择的指标如下:

平均网络时延:RTT 往返时间

传输字节

连接数

零窗口数

重传率:SYNACK重传丢包的次数

拥塞率 :拥塞窗口

重置率:发送或接收设置了RST重置标志的数据包

速率bit rate

速率:传送数据的速率,也叫数据率。速率的单位是bit/s,b/s,或者bps。

比特bit(binary digit)意思是一个二进制数字,计算机发送的数据都是0 1,是通信领域数据量的度量单位。

bit/s,kb/s,Mb/s,Gb/s,Tb/s;之间转换的单位是10的3次幂。

注:

1)在计算机领域中,数据量的度量单位是字节(Byte),1Byte=8bit。

2)B,KB,MB,GB,TB;之间转换的单位是2的10次幂(即1024)。

带宽bandwidth

带宽:频率的宽度(最高频率与最低频率之差);如上行频率是300Hz,下行频率是100Hz,那带宽可以看为200Hz。通常把频谱中幅值下降到最大幅值的1/10时所对应的频率作为信号的频宽,称1/10法则。在通信领域中带宽可以看为单位时间内通信链路能通过的最大数据量。意味着带宽的单位为

bit/s,kb/s,Mb/s,Gb/s,Tb/s;之间转换的单位是10的3次幂。

一条通信链路的带宽越宽,它所能传输最高速率也越高。

吞吐量throughput

带宽可以看为单位时间内通信链路实际能通过的数据量。意味着吞吐量的单位为

bit/s,kb/s,Mb/s,Gb/s,Tb/s;之间转换的单位是10的3次幂。

时延delay

发送时延(transmission delay):发送时延=数据帧长度(b)/发送速率(b/s)。

例如一个100M的数据包,在1Mb/s的宽带上,其发送时延为:
100 ∗ 1024 ∗ 1024 ∗ 8 / 1 ∗ 1000 ∗ 1000 = 838.9 s 100*1024*1024*8/1*1000*1000=838.9s 100102410248/110001000=838.9s
传播时延(propagetion delay):传播时延=信道长度(m)/电磁波在该信道上的传输速率(m/s)

处理时延:节点处理数据包,路由寻址需要的时间。

排队时延:数据在节点缓存队列中排队转发需要的时间。

时延=发送时延+传播时延+处理时延+排队时延。

时延带宽积

时延带宽积=时延*带宽。

例如:某段链路的延时为20ms,带宽为10Mb/s,时延带宽积为
20 ∗ 0.001 ∗ 10 ∗ 1000 ∗ 1000 = 20 万 b i t 20*0.001*10*1000*1000=20万bit 200.0011010001000=20bit

往返时间RTT

往返时间:从发送方发送数据开始,到发送方收到接收方的确定(接收方一收到数据后立马发送确认)所需要的时间。

RTT=2*时延。

例如:某段链路的延时为20ms,带宽为10Mb/s,那往返时间为40ms,如果接收方发现数据错误并告知发送方,发送方收到后立即停止传输,但发送方在这之间已经传送了2*20万bit了。

利用率

信道利用率:某信道有百分之几的时间是有数据通过的。

网络利用率:信道利用率的加权平均值。

网络利用率U=1-网络空闲时的时延/网络当前的时延。

网络空闲时的时延为固定值,而当信道利用率上升时,改信道引起的时延必定迅速增加。所以,提高网络利用率并不止是提高信道利用率就可以。一般当信道利用率超过50%的时候,就需要增加线路的带宽。

生存时间TTL

报文最大生存时间MSL

TTL与MSL是有关系的但不是简单的相等的关系,MSL要大于等于TTL。

网络安全

网络安全的本质就是人与人之间的对抗,机器或自动化很难与人抗衡,所谓的人工智能、机器学习,至少在目前还不具备能够对抗真实攻击的能力。把网络系统的高复杂度类似于人体呢,当发生问题时,各种验血、CT、核磁的仪器再先进,其检测的结果还是需要医生来解读和确诊的。

1.基于策略、特征

2.全流量基于行为

反制

反制方法就是通过一些机制,当服务器资源不足的时候,通过增加客户端的消耗,如增加报文的发送量,来达到客户端和服务端资源消耗的平衡,这样做有这样的好处

减少攻击行为。由于增加了客户端的消耗,因此,客户端需要大量的资源才能够获得相应的服务。对于攻击者来说,增大了攻击者攻击的成本。如果实施攻击就会使得代理主机消耗大量的资源难以进行攻击。

减轻了服务器的负担。由于提高了客户端的获得服务的成本,

网络抓包wireshark

wireshark的官方下载网站: http://www.wireshark.org/

Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

过滤表达式的规则

  1. 协议过滤

比如TCP,只显示TCP协议。

  1. IP 过滤

比如 ip.src ==192.168.1.102 显示源地址为192.168.1.102,

ip.dst==192.168.1.102, 目标地址为192.168.1.102

  1. 端口过滤

tcp.port ==80, 端口为80的

tcp.srcport == 80, 只显示TCP协议的愿端口为80的。

  1. Http模式过滤

http.request.method==“GET”, 只显示HTTP GET方法的。

  1. 逻辑运算符为 AND/ OR

封包列表(Packet List Pane)

封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。

绿色是TCP报文

深蓝色是DNS

浅蓝是UDP

黑色标识出有问题的TCP报文,比如乱序报文

封包详细信息 (Packet Details Pane)

这个面板是我们最重要的,用来查看协议中的每一个字段。

各行信息分别为

Frame: 物理层的数据帧概况

Ethernet II: 数据链路层以太网帧头部信息

Internet Protocol Version 4: 互联网层IP包头部信息

Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP

Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议

资料

https://www.dell.com/community/%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E8%AE%A8%E8%AE%BA%E5%8C%BA/%E7%BD%91%E7%BB%9C%E5%9F%BA%E6%9C%AC%E5%8A%9F%E7%B3%BB%E5%88%97-%E7%BB%86%E8%AF%B4%E7%BD%91%E7%BB%9C%E9%82%A3%E4%BA%9B%E4%BA%8B%E5%84%BF-3%E6%9C%8826%E6%97%A5%E6%9B%B4%E6%96%B0/td-p/7045185

https://www.cnblogs.com/doit8791/p/5730595.html

https://www.cnblogs.com/dragonir/p/6219541.html

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值