概述
<<<<<<< HEAD
网络协议入门到精通
- TCP和UDP的区别?说一下他们的报文格式?
- TCP的流量控制和拥塞控制?TCP如何实现可靠性传输?
- 为什么连接是三次握手,关闭时四次挥手?
- 七层模型与四层模型的区别?每一层的作用是什么?
- 交换机与路由器的区别?
同轴电缆、集线器、网桥、交换机
- 同轴电缆:半双工通信、容易冲突、不安全、冲突域问题严重,故障容易波及整个网络
- 集线器:半双工通信、容易冲突、不安全,冲突域问题严重,单独某段线缆故障不会波及整个网络
- 网桥:同集线器,但可以通过自学习得知每个接口所连接的MAC地址,从而隔绝冲突域
- 交换机:相当于接口更多的网桥,全双工通信,比集线器更安全
- 路由器:可以在不同网段之间转发数据,隔绝广播域
MAC地址
MAC(Media Access Control Address)地址
- 每一个网卡都有一个6字节(48bit)的MAC地址
- 全球唯一,固化在了网卡的ROM中,由IEEE802标准规定
- 前3字节:OUI(Organizationally Unique Identifier),组织唯一标识符,由IEEE的注册管理机构分配给厂商
- 后3字节:网络接口标识符,由厂商自行分配
MAC地址的获取:ARP(Address Resolution Protocol)地址解析协议
- 当不知道对方主机的MAC地址时,可以通过发送ARP广播获取对方的MAC地址
- 获取成功后,会缓存IP地址、MAC地址的映射信息,俗称:ARP缓存
- 通过ARP广播获取的MAC地址,属于动态(dynamic)缓存
ICMP(Internet Control Message Protocol):互联网控制消息协议
- IPv4中的ICMP被称作ICMPv4,IPv6中的ICMP则被称作ICMPv6
- 通常用于放回错误信息或者ping信息包
- 比如TTL值过期、目的地不可达
- ICMP的错误信息总是包括了源数据并返回给发送者
IP地址
-
IP地址(Internet Protocol Address):互联网上的每一个主机都有一个IP地址
- 最初是IPv4版本,32bit(4字节),2019年11月25日,全球的IP地址已经用完
- 后面推出了IPv6版本,128bit(16字节)
-
IP地址由两部分组成:网络标识(网络ID)、主机标志(主机ID)
- 同一网段的计算机,网络ID相同
- 通过子网掩码可以计算出网络ID:子网掩码 & IP地址
-
计算机和其他计算机通信前,会先判断目标主机和自己是否在同一网段
- 同一网段:不需要由路由器进行转发
- 不同网段:交由路由器进行转发
-
网络地址分类:
-
A类地址:默认子网掩码是255.0.0.0
8bit 24bit 网络ID,从0001开始(1.0.0.0) 主机ID -
B类地址:默认子网掩码是255.255.0.0
8bit 24bit 网络ID,1000(128.0.0.0) 主机ID -
默认子网掩码是255.255.255.0
8bit 24bit 网络ID,从1100开始(192.0.0.0) 主机ID -
主机ID全为0,表示主机所在的网段
-
主机ID全为1,表示主机所在网段的全部主机(广播)
- 可以尝试用ping给某个网段的全部主机发数据
-
-
CIDR:无类别域间路由
- 子网掩码的CIDR表示方法
- 192.168.1.100/24,表示子网掩码有24个1,也就是255.255.255.0
- 123.210.100.200/16,表示子网掩码有16个1,也就是255.255.0.0
- 子网掩码的CIDR表示方法
-
子网划分:借用主机位做子网位,划分子网
- 等长子网划分:将一个网段等分成多个子网,每个子网的可用IP地址数相同
- 如果一个子网是原来网络的一半,子网掩码往后移动一位
- 变长子网划分:每个子网的可用IP地址数量可以不同
- 如果一个子网地址块的长度是原网段的(1/2)^n
- 子网的子网掩码,就是在原网段的子网掩码基础上增加n个1
- 不等长的子网,它们的子网掩码也不同
- 等长子网划分:将一个网段等分成多个子网,每个子网的可用IP地址数相同
-
超网:多网段合并成更大的网段
- 网段合并后子网掩码往前移动一位
- IP段中的主机位不能全为0或1
- 如果第一个网段的网络号能被n整除,那么由它开始连续的n个网段,能通过左移k位子网掩码进行合并
-
超网和子网的判断:
- 判断网段是三类网络中的哪一类
- 判断网段子网掩码位数比默认子网掩码的多少
物理层(Physical)
物理层定义了接口标准、线缆标准、传输速率、传输方式等
-
模拟信号(Analog Signal)
- 连续的新号,适合长距离传输
- 抗干扰能力差,收到干扰时波形变形很难纠正
-
数字新号(Digital Signal)
- 离散的信号,不适合长距离传输
- 抗干扰能力强,受到干扰时波形失真可以修复
-
局域网通信模型:
PC-通过网线传输数字信号-集线器/交换机-通过网线传输数字信号-PC
-
广域网通信模型(网线不能超过100m):
-
信道:信息传输的通道,一条传输介质上(比如网线)上可以存在多条信道
- 单工通信
- 信号只能往一个方向传输,任何时候都不能改变信号的传输方向
- 比如无线电广播、有线电视广播
- 半双工通信
- 信号可以双向传输,但是必须交替进行,同一时间只能往一个方向传输
- 比如对讲机
- 全双工通信
- 信号可以同时双向传输
- 比如手机
- 单工通信
数据链路层(Data Link)
-
链路:从一个节点到相邻节点的一段物理线路(无线或有线),中间没有其他交换节点
-
数据链路:在一条链路上传输数据时,需要有对应的数据协议来控制数据的传输
-
不同的数据链路,所用的通信协议可能时不同的
- 广播信道:CSMA/CD协议(比如同轴电缆、集线器等组成的网络)
- 点对点信道:PPP协议(比如两个路由器之间的信道)
-
数据链路层的三个基本问题
-
封装成帧
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kHfA7RSe-1672749383495)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210323104822731.png)]
- 使用SOH(Start Of Hearder)作为帧开始符
- 使用EOT(End Of Transmission)作为帧结束符
- 帧(Frame)的数据部分是网络层传递下来的数据包(IP数据包,Packet)
- 最大传输单元MTU(Maximum Transfer Unit)
- 每一种数据链路层协议都规定了所能够传输的帧的数据长度上限
- 以太网的MTU为1500个字节
-
透明传输
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8dcFjiWu-1672749383496)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210323104920699.png)]
- 数据部分一旦出现了SOH、EOT,就需要进行转义
- 发送方会用ESC进行字节填充
-
差错校验
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WTfmaacp-1672749383496)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210323104933868.png)]
- 发送方会在帧尾部添加一个FCS进行标记
- FCS是根据数据部分 + 首部计算得出的
- 接收方收到帧后会将重新进行FCS计算校对
- 校对通过接受并删除FCS,否则丢弃整个帧
-
CSMA/CD协议
- CSMA/CD(Carrier Sense Multiple Access with Collision Detection)
- 载波侦听 多路访问/冲突检测
- 使用了CSMA/CD协议的网络可以成为以太网(Ethernet),它传输的是以太网帧
- 以太网帧的格式有:Ethernet V2标准、IEEE的802.3标准
- 使用最多的是Ethernet V2标准
- 为了能够检测正在发送的帧是否产生了冲突(冲突检测机制),以太网的帧至少要64字节
- 用交换机组建的网络,已经支持全双工通信,不需要再使用CSMA/CD协议
- 但是因为传输的帧依然是以太网帧
- 所以用交换机组建的网络依然可以叫做以太网
-
Ethernet V2帧的格式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JfpxeAsG-1672749383496)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210323105010844.png)]
- 以太网使用曼彻斯特编码,接收端接收帧过程只要发现没有信号跳变,就认为帧结束
- 首部:目标MAC地址 + 源MAC地址 + 网络类型
- 以太网帧:首部 + 数据 + FCS
- 数据的长度至少是64 - 6 - 6 - 2 - 4= 46个字节
- 以太网帧的数据长度:46 - 1500字节
- 以太网帧的长度:64 - 1518字节
-
PPP协议(Point to Point Protocol)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fXhNDbLA-1672749383497)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210323111612755.png)]
- Flag字段:图中的值为0x7E,帧开始符、帧结束符
- Address字段:图中的值是0xFF,形同虚设,点到点通信不需要源MAC、目标MAC地址
- Control字段:图中的值为0x03,目前没有什么作用
- Protocol字段:内部用到的协议类型
-
网络层(Nerwork)
-
网络层数据包(IP数据包,Packet)由首部、数据两部分组成
- 数据:很多时候是由传输层传递下来的数据段(Segment)
-
版本(Version):IP版本
- 占4位
- 0x0100:IPv4
- 0x0110:IPv6
-
首部长度(Header Length):
- 占四位,二进制乘以4才是最终长度
- 0x0101:20(5 * 4)(最小值)
- 0x0111:60(15 * 4)(最大值)
-
区分服务(Differentiated Services Field):
- 占8位
- 可以用于提高网络的服务质量(QoS,Quality of Service)
-
总长度(Total Length):
- 占16位
- 首部 + 数据的长度之和,最大值是2^16-1 = 65535
-
由于帧的数据不能超过1500字节,所以过大的IP数据包需要分成片(Fragments)传输给数据链路层
- 每一片都由自己的网络层首部(IP首部)
-
标识(Identification):
- 占16位
- 数据包的ID,当数据包过大进行分片时,同一个数据包的所有片的标识都是一样的
- 有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1
- ID的最大值时65535,用完后会重新循环使用
-
标志(Flags):
- 占3位
- 第一位(Reserved Bit):保留,暂无作用
- 第二位(Don’t Fragment):1代表不允许分片,0代表允许分片
- 第三位(More Fragments):1代表不是最后一片,0代表是最后一片
-
片偏移(Fragment Offset):
-
占13位
-
片偏移乘以8:字节偏移
-
每一篇的长度一定是8的整数倍
-
生存时间(Time To Live,TTL)
- 占8位
- 每个路由器在转发前会将TTL减1,一旦发现TTL为0,路由器会返回错误报告
- 观察使用ping命令后的TTL,可以推测出对方的操作系统、中间经过了多少个路由器
-
协议(Protocol)
-
占8位
-
表明所封装的数据是使用了什么协议
协议 ICMP IGMP IP TCP EGP IGP UDP IPv6 ESP OSPF 值(OCT) 1 2 4 6 8 9 17 41 50 89
-
-
首部校验和(Header Checksum)
- 用于检查首部是否由错误
-
ping命令的几个用法
- ping /?
- 查看ping命令帮助
- ping ip地址 -l size
- 发送指定大小的数据包
- ping ip地址 -f
- 不允许网络层分片
- ping IP地址 -i TTL
- 设置TTL的值
- 通过tracert、pathping命令,可以追踪数据包经过了哪些路由器
传输层(Transport)
-
传输层由两个协议
- TCP(Transmission Control Protocol),传输控制协议
- UDP(User Datagram Protocol),用户数据报协议
TCP UDP 连接性 面向连接 无链接 可靠性 可靠传输,不丢包 不可靠传输,尽最大努力交付,可能丢包 首部占用空间 大 小 传输速率 慢 快 资源消耗 大 小 应用场景 浏览器、文件传输、邮件发送 音视频通话、直播 应用层协议 HTTP、HTTPS、FTP、SMTP、DNS DNS -
UDP(User Datagram Protocol)用户数据报协议——数据格式
-
UDP是无链接的,减少了建立和释放连接的开销
-
UDP尽最大能力交付,不保证可靠交付
-
因此不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)
16位源端口号 16位目的端口号 16位UDP长度 16位UDP校验和 数据(如有) -
16位UDP长度(Length):占16位两个字节,内容为首部的长度+数据的长度
-
检验和的计算内容:伪首部+首部+数据
-
伪首部:仅在计算检验和时起作用,并不会传递给网络层
-
-
UDP首部中端口时占用2字节(16位)
-
客户端的源端口时临时开启的随机端口
-
防火墙可以设置开启/关闭某些端口号来提高安全性
-
-
常用命令行:
- netstat -an:查看被占用的端口
- netstat -anb:查看被占用的端口、占用端口的应用程序
- telnet 主机 端口:查看是否可以访问主机的某个端口
-
TCP(Transmission Control Protocol)传输控制协议
-
数据偏移位:表示TCP头部长度,由此可以推出数据报开始的位置
- TCP报文中首部长度20-60字节
- 占4位,取值范围是0x0101-0x1111
- 乘以4:得到首部长度(Header Length)
-
保留位:
- 占6位,目前全为0
-
UDP的首部中有个16位的字段记录了整个UDP报文段的长度(首部+数据)
- TCP的首部中仅仅由各4位的字段记录了TCP报文段的首部长度,并没有字段记录TCP报文段的数据长度
- 实际上,UDP报文段首部中占16位的长度字段是冗余的,纯粹是为了保证首部是32bit对齐
- TCP/UDP报文段的数据长度,完全可以由IP数据报的首部推测出来
- 传输层的数据长度 = 网络层的总长度 - 网络层的首部长度 - 传输层的首部长度
-
检验和位(Checksum):跟UDP一样,TCP检验和的计算内容:伪首部 + 首部 + 数据
-
标志位(Flags):
- URG(Urgent):
- 当URG 位为1,紧急指针字段才有效。表明当前报文段中有紧急数据,应当优先传送
- ACK(Acknowledgment):
- 当ACK位位1,确认号字段才有效
- PSH(Push):
- RST(Reset):
- 当RST位为1,表明连接中出现严重差错,必须释放连接,重新建立连接
- SYN(Synchronization):
- 当SYN位为1,ACK位为1,表明这是一个建立连接的请求
- 若对方同意建立连接,则回复SYN = 1、ACK = 1
- FIN(Finish):
- 当FIN位为1,表明数据已经发送完毕,要求释放连接
- URG(Urgent):
-
序号(Sequence Number):
- 占4字节
- 在传输过程的每一个字节都有一个对应的编号
- 在建立连接后,序号代表:这一次传给对方的TCP数据部分的第一个字节的编号
-
确认号(Acknowledgment):
- 占4字节
- 在建立连接后,确认号代表:期望对方下一次传过来的TCP数据部分的第一个字节的编号
-
窗口(Window):
- 占2字节
- 这个字段有流量控制功能,用以告诉对方下一次允许发送的数据大小(字节为单位)
-
TCP的几个要点
- 可靠传输
- 停止等待ARQ协议
- ARQ(Automatic Repeat-reQuest),自动重传请求
- 无差错的情况下,每发送一次数据报都会接受一次确认
- 无差错情况
- 超时重传
- 确认丢失
- 确认迟到
- 若重传次数达到系统设置的次数,则发送Restet(RST)报文要求重连TCP连接
- 无差错的情况下,每发送一次数据报都会接受一次确认
- 连续ARQ协议 + 滑动窗口协议
- 发送窗口中的分组连续发送,发送完毕后,停止发送等待确认
- 初始的发送窗口数由建立连接时的报文确定,接收窗口数可变的
- 如果没有丢失数据报,则只回复最后收到的数据报的序号
- 如果丢失数据,一般情况下会回复丢失的数据报前的前一个包的序号
- 在TCP通信过程中,如果发送序列中间某个数据报丢失(如12345中丢了3)
- TCP会通过重传最后确认的分组后续的分组(最后确认的是2,会重传345)
- 这样原先已经正确传输的分组也可能重复发送(45),但是降低了TCP性能
- SACK(SelectIve acknowledgement):选择性确认技术
- 告诉发送方丢失了哪些数据,接收到了哪些数据
- 使得TCP只重新发送丢失的包(3),不用发送后续所有的分组(45)
- SACK信息会放在TCP首部的选项部分
- Kind部分:占1字节,值为5表示这是SACK信息
- Length:占1字节,表示SACK选项一共占用了多少字节
- Left Edge:占4字节,左边界,丢失包的左边界
- Right Edge:占4字节,右边界,丢失包的右边界
- 一对边界信息需要占用8字节,由于TCP首部的选项部分最多40字节
- SACK选项最多携带4组边界信息(40-2)// 8 = 4
- SACK选项最多占用字节数:4 * 8 + 2 = 34
- 为什么在传输层就将数据拆分成一个一个包,而不是等到网络层再分片传递给数据链路层
- 如果在传输层不分段,一旦出现数据丢失,整个传输层的数据都得重传
- 如果在传输层分了段,一段出现数据丢失,只需要重传丢失的那些数据即可
- 一般分段的标准是根据MTU - IP数据报首部长度 - TCP数据段首部长度
- 即 1500 - 20 - 20 = 1460
- 数据帧到达链路层后:MTU + 源MAC + 目的MAC + 协议类型 + FCS
- 即 1500 + 6 + 6+ 2 + 4 = 1518
- 流量控制
- 流量控制的目的是为了限制发送方的发送速率,从而避免出现接收方来不及处理数据包从而出现大量丢包这种极大浪费网络资源的现象
- 原理:
- 通过确认报文中窗口字段来控制发送方的发送速率
- 发送方的发送窗口大小不能超过接收方给出的窗口大小
- 当发送方收到接收窗口大小为0的报文时,就会停止发送数据
- 同时会启动一个定时器,隔一段时间会发送测试报文询问最新的窗口大小
- 如果新接收到的窗口大小还是0,则重置计时器
- 拥塞控制
- 拥塞控制的目的时防止过多的数据注入到网络中,避免网络中的路由器和链路过载
- 拥塞控制时一个全局性的过程
- 涉及网络中的所有主机、路由器,以及与降低网络传输性能有关的所有因素
- 相对于流量控制的点对点通信控制而言,拥塞控制是控制整个网络的
- 拥塞控制的方法:
- 慢开始(slow start)
- 在传输刚开始时,并不会直接就按照建立连接时确定的MSS来传输数据,而是从少到多增减增加数据包的数量(cwnd会成倍增长)
- 拥塞避免(congestion avoidance)
- ssthresh(slow start threshold):满开始阈值,cwnd达到阈值后,以线性方式增加
- 此时拥塞窗口会缓慢地线性增大,以防止网络过早出现拥塞
- 只要网络出现拥塞,把ssthresh减为拥塞峰值的一般,同时重新开始传输,cwnd会恢复初始值
- 快速重传(fast retransmit)
- 接收方:
- 没收到一个失序的分组后就立即发出重复确认
- 使发送方及时指导有分组没有到达
- 这样就不需要等到连续ARQ协议中的窗口传输时间结束再进行确认
- 发送发:
- 只要连续收到三个重复确认(总共四个相同的确认),就应当立即重传对方尚未收到的数据报
- 这样就不需要等待重传计时器到期后再重传
- 接收方:
- 快速回复(fast recovery)
- 当发送方连续收到三个重复确认,说明网络出现拥塞
- 这时可以执行乘法减小,把ssthresh减为拥塞峰值的一般
- 与慢开始不同之处在于不执行慢开始算法,即cwnd不会恢复到初始值
- 此时cwnd会被设置为新的ssthresh值,即减半之后的拥塞窗口阈值
- 开始执行加法增大,使拥塞窗口缓慢线性增大
- 发送窗口的最大值
- 发送窗口的最大值:swnd = min(cwnd,rwnd)
- 当rwnd < cwnd时,接收方的接受能力限制了发送窗口的最大值
- 当rwnd > cwnd时,网络环境传输能力限制了发送窗口的最大值
- 慢开始(slow start)
- 几个缩写:
- MSS(Maximum Segment Size):每个段最大的数据部分大小(在建立连接时确定)
- cwnd(congestion window):拥塞窗口
- rwnd(receive window):接收窗口
- swnd(send window):发送窗口
- swnd = min(cwnd,rwnd)
- 连接管理
- 建立连接
- 建立连接时将会在数据包头部的额外信息中确认彼此的传输的序号、确认号
- 之后将会在每次传输过程中根据确定的序号和确认号进行通讯
- 规律:
- 确认收到当前收到的数据包的最后一个序号+1(希望对方下一次发送的数据包的首个序号)
- 如果有数据需要发送,则发送对方确认的数据包序号
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LZ5v3S99-1672749383497)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210330125450161.png)]
- SYN = 1,ACK = 0,seq = x
- 表示此时处于CLOSED的某个端口希望与处于监听状态的服务器建立连接,发送连接请求后,端口转为SYN-SENT状态
- SYN = 1表示希望建立连接,ACK = 0再次无意义,seq = x表示客户端数据中当前的偏移序号是x
- SYN = 1,ACK = 1,seq = y,ack = x + 1
- 表示LISTEN状态的服务器端口已经收到了连接请求,并且服务器也希望与客户端建立连接,此时发送了一个连接请求确认,发送连接确认请求后,服务器进入SYN-RCVD
- SYN = 1表示希望建立连接,ACK = 1表示已经收到了连接请求,此时数据包头部中的ack字段有效,值为ack = x + 1,表示希望下一次收到的数据包中的数据的首个序号为x + 1,seq = y 表示当前服务器数据包当前的偏移序号是y
- ACK = 1,seq = x + 1,ack = y + 1
- 表示处于SYN-SENT状态的客户端已经收到了服务器的连接确认请求,同时进行最后的确认,并转入ESTABLISHED状态
- ACK = 1表示已经收到了服务器发来的连接确认请求,此时数据包头部中的ack字段有效,值为ack = y + 1,确认正式建立连接时发送的数据开始序号为seq = x + 1
- 服务器收到客户端的确认请求后,将会从转入ESTABLISHED状态
- 状态解读:
- CLOSED:client处于关闭状态
- LISTEN:server处于监听状态,等待client连接
- SYN-RCVD:表示server接收到了SYN报文,当接收到client的ACK报文后,它会进入到ESTABLISHED状态
- SYN-SENT:表示client已发送SYN报文,等待server的第二次握手
- ESTABLISHED:表示连接已经建立
- 前两次握手的特点:
- SYN都设置为1:双方都希望与对方建立连接
- 数据部分长度都为0:此时仍处于建立连接状态,不适合传输
- TCP头部的长度一般是32字节:
- 固定头部:20字节
- 选项部分:12字节
- 双方会交换确认一些信息
- MSS:Maximum Segment Size最大报文段长度,彼此支持的最大报文段长度
- SACK:Selective ACK选择性确认,彼此是否支持报文传输选择性确认功能
- Window scale:窗口缩放系数,系数乘以128后表示彼此当前窗口大小
- 这些数据都放在TCP头部的选项部分中
- 为什么建立连接的时候,要进行三次握手,两次不行吗?
- 主要目的:防止server端一直等待,浪费资源
- 避免出现因为网络延迟的情况而导致连接建立浪费资源的情况
- 第三次握手失败了,会怎么处理?
- 此时server的状态为SYN-RCVD,若等不到client的ACK,server会重新发送SYN + ACK包
- 如果server多次重发SYN +ACK都等不到client的ACK,就会发送RST包,强制关闭连接
- 释放连接
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tXwemwvY-1672749383498)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210330133307181.png)]
- FIN = 1,ACK = 1,seq = u,ack = v
- 处于ESTABLISHED状态的客户端发送一个连接释放请求给同样处于ESTABLISHED状态的服务器,然后转入FIN-WAIT-1状态
- FIN = 1表示此时客户端希望关闭当前连接,ACK = 1表示已经收到了服务器上一次发送的数据,同时数据包头部中的ack = v字段有效,表示已经收到了服务器上一次发送的数据包,希望对方下一次发送的数据包头部中的数据起始位置为v,seq = u表示当前发送的数据包中的序号为u
- ACK = 1,seq = v,ack = u + 1
- 处于ESTABLISHED状态的服务器收到客户端发送的连接释放请求后,回复连接释放请求确认,之后转入CLOSE-WAIT状态
- ACK = 1表示已经收到了该请求,同时数据包头部中的ack = u + 1字段有效,表示已经收到了服务器上一次发送的数据包,希望对方下一次发送的数据包头部中的数据起始位置为u + 1,seq = v表示当前发送给客户端的数据包中的首序号是v
- 处于FIN-WAIT-1状态的客户端收到确认释放连接请求后,转入FIN-WAIT-2状态,等待服务器发送连接释放请求,此时的客户端已经不能再发送数据给服务器,但是仍然可以接收来自服务器的数据
- FIN = 1,ACK = 1, seq = w,ack = u + 1
- 处于CLOSE-WAIT状态的服务器也已经发送完数据,准备开始释放连接
- FIN = 1表示服务器也已经准备释放连接,ACK = 1 表示已经收到客户端上一次发送的数据包,使得ack = u + 1字段有效,表示已经收到了客户端上一次发送的数据包,希望对方下一次发送的数据包头部中的数据起始位置为u + 1,seq = w表示当前发送给客户端的数据包中的首序号是w,之后服务器转入LAST-ACK状态
- ACK = 1,seq = u + 1,ack = w + 1
- 处于FIN-WAIT–2状态的客户端收到来自服务器的释放连接请求后,回复确认释放连接请求给服务器,并转入TIME-WAIT状态,服务器收到该请求后,关闭连接,并且正式关闭连接。此时双方皆不可发送数据给对方,并且也无法收到对方发送的数据
- ACK = 1表示已经收到对方的关闭连接请求,使得ack = u + 1字段有效,表示已经收到了客户端上一次发送的数据包,希望对方下一次发送的数据包头部中的数据起始位置为w + 1,当前的数据包的首序号是u + 1
- 状态 解读:
- FIN-WAIT-1:表示想主动关闭连接
- 向对方发送了FIN报文,此时进入FIN-WAIT-1状态
- CLOSE-WAIT:表示在等待关闭连接
- 当对方发送FIN给自己,自己会回应一个ACK报文给对方,此时则进入CLOSE-WAIT状态
- 在此状态下,需要考虑自己是否还有数据要发送给对方,如果没有,发送FIN报文给对方
- FIN-WAIT-2:只要对方发送ACK确认后,主动方就会处于FIN-WAIT-2状态,然后等待对方发送FIN报文
- CLOSING:一种比较罕见的状态
- 表示一方在发送FIN报文后,并没有收到对方的ACK报文,反而也收到了对方的FIN报文
- 如果双方几乎在同时准备关闭连接的话,那么就会出现双方同时发送FIN报文的情况,就会出现CLOSING状态
- 表示双方都正在关闭连接
- LAST-ACK:被动关闭乙方在发送FIN报文后,最后等待对方的ACK报文
- 当收到ACK报文后,即可进入CLOSED状态
- TIME-WAIT:表示收到了对方的FIN报文,并发送了ACK报文,就等2MSL后即可进入CLOSED状态
- 如果在FIN-WAIT-1状态下,收到了对方同时带FIN标志和ACK标志的报文时可以直接进入TIME-WAIT状态,而无需经过FIN-WAIT-2状态
- CLOSED:关闭状态
- FIN-WAIT-1:表示想主动关闭连接
- 释放连接细节
- TCP/IP协议栈在涉及上,允许任何一方先发起断开请求,上述讲解的是客户端主动要求断开连接
- 客户端在最后发送ACK报文后,需要有一个TIME-WAIT阶段,等待一段时间后,再真正关闭连接
- 一般是等待两倍的MSL(Maximum Segment Lifetime,最大分段生存期)
- MSL是TCP报文在Internet上的最长生存时间
- 每个具体的TCP实现都必须选择一个确定的MSL值,RFC 1122建议是两分钟
- 可以防止本次连接中产生的数据包误传到下一次连接中,因为本次连接中的数据包都会在2MSL时间内消失
- 如果客户端发送ACK后马上释放,如果出现因为网络原因导致服务器没有收到客户端的ACK报文,那么就会出现服务器多次重发FIN报文的情况
- 此时客户端没有任何响应,服务器会处于长期等待状态,甚至多次重发FIN,浪费资源
- 如果服务器恰好有应用分配到当前端口,则会刚建立连接就马上释放连接
- 连接释放疑惑
- 为什么释放连接的时候要进行四次挥手呢?
- TCP是全双工通信
- 第一次挥手:当主机1发送FIN报文段时
- 表示主机1告诉主机2,主机1已经没有数据要发送了,但是此时主机1还是可以接收到来自主机2的数据
- 第二次挥手:当主机2返回ACK报文段时
- 表示主机2已经指导主机1没有数据发送了,但是主机2还是可以发送数据到主机1
- 第三次挥手:当主机2也发送FIN报文段时
- 表示主机2告诉主机1,主机2已经没有数据要发送了
- 第四次挥手:当主机1返回ACK报文段时
- 表示主机1已经知道主机2没有数据发送了。随后正式断开整个TCP连接
- 有时候其实是只有三次挥手的情况的:
- 当服务器收到客户端的FIN,恰好此时服务器也已经没有数据发送给客户端时
- 这时候服务器就会将第二、第三次挥手合并,同时告诉客户端两件事
- 已经知道客户端没有数据要发送了
- 服务器也已经没有数据要发送了
- 为什么释放连接的时候要进行四次挥手呢?
- 建立连接
- 可靠传输
-
-
应用层(Application)
-
应用层常见的协议:
- 超文本传输协议:HTTP(Hyper Text Transfer Protocol)、HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer)
- 文件传输协议:FTP(File Transfer Protocol)
- 电子邮件:SMTP(Simple Mail Transfer Protocol)、POP3(Post Office Protocol 3)、IMAP(Internet Mail Access Protocol)
- 动态主机配置:DHCP(Dynamic Host Configuration Protocol)
- 域名系统:DNS(Domain Name System)
-
域名(Domain Name)
-
由于IP地址不方便记忆,并且不能表达组织的名称和性质,人们涉及除了域名
-
但是实际上,为了能够访问到具体的主机,最终还是得知道目标主机的IP地址
-
为什么不全程用域名?
- IP地址固定4个字节,域名随随便便都至少十几个字节,无疑会增加路由器的负担,浪费流量
-
根据级别不同,域名可以分为顶级域名、二级域名、三级域名等等
- 顶级域名:
- 通用顶级域名:com(公司)、net(网络机构)、org(组织机构)、edu(教育机构)、gov(政府部门)、int(国际组织)
- 国家及地区顶级域名:cn(中国)、jp(日本)、uk(英国)、us(美国)
- 新通用顶级域名:vip、xyz、top、club、shop
- 二级域名:
- 二级域名指的是顶级域名之下的域名
- 在通用顶级域名下,它一般是指域名注册人的名称,例如baidu、google等
- 在国家及地区顶级域名下,它一般指注册类别,例如com、edu、gov等
- mail.qq.com
- 顶级域名:
-
DNS(Domain Name System)域名系统:
-
DNS域名系统:
- 利用DNS协议,可以将域名解析成对应的IP地址
- DNS可以基于UDP协议,也可以基于TCP协议,服务器占用53端口
-
DNS服务器:
- 客户端首先会访问最近的一台DNS服务器,也就是客户端自己配置的DNS服务器
- 所有的DNS服务器都记录了DNS根域名服务器的IP地址
- 上级DNS服务器记录了下一级DNS服务器的IP地址
- 全球一共13台IPv4的DNS根域名服务器、25台IPv6的DNS根域名服务器
-
DNS常用命令
- ipconfig /displaydns:查看DNS缓存记录
- ipconfig /flushdns:清空DNS缓存记录
- ping 域名
- nslookup 域名:查询域名对应的IP
-
IP地址的分配
-
IP地址按照分配方式可以分为
- 静态IP地址
- 需要手动设置
- 使用场景:不怎么挪动的台式机、服务器
- 动态IP地址
- 从DHCP服务器自动获取IP地址
- 使用场景:移动设备、无线设备
- 静态IP地址
-
DHCP(Dynamic Host Configuration Protocol)动态主机配置协议
- DHCP协议基于UDP协议,服务器是67端口,客户端时68端口
- DHCP服务器会从IP地址池中,挑选一个IP地址出租给客户端一段时间
- 时间到期就会回收IP
- 平时家里上网的路由器就可以充当DHCP服务器
-
DHCP分配IP地址的四个阶段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3iVINRsP-1672749383498)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402155127350.png)]
- DISCOVER:发现服务器
- 发送广播包
- 源IP:0.0.0.0
- 目标IP:255.255.255.255
- 目标MAC:FF:FF:FF:FF:FF:FF
- 发送广播包
- OFFER:提供租约
- 服务器返回可以租用的IP地址,以及租用期限、子网掩码、网关、DNS等信息
- 同一时间可能会有多个DNS服务器提供租约
- REQUEST:选择IP地址
- 客户端选择一个OFFER,发送光播包进行回应
- ACKNOWLEDGE:确认
- 被选中的服务器发送ACK数据包给客户端
- IP地址分配完毕
- DISCOVER:发现服务器
-
DHCP的部分细节
- DHCP服务器可以借助DHCP中继代理(DHCP Relay Agent)实现跨网段分配IP地址
- 客户端会在租期不足的时候,自动向DHCP服务器发送REQUEST信息申请续约
- 常用命令
- ipconfig /all:可以看到DHCP相关的详细信息,比如租约过期时间、DHCP服务器地址等
- ipconfig /release:释放租约
- ipconfig /renew:重新申请IP地址、申请续约(延长租期)
-
-
-
-
HTTP(Hyper Text Transfer Protocol)超文本传输协议
- 互联网中应用最广泛的应用层协议之一
- HTTP的最初目的是提供一种发布和接收HTML页面的方法,由URI来标识具体的资源
- URI(Uniform Resource Locator)统一资源标识符,身份标识
- URL(Uniform Resource Identifier)统一资源定位符,位置标识
- HTML(Hyper Text Markup Language)超文本标志语言
- 用以编写网页
- HTTP版本
- 1991年,HTTP/0.9
- 只支持GET请求方法获取文本数据,比如HTML文档,且不支持请求头、响应头等,无法向服务器传递太多信息
- 1996年,HTTP/1.0
- 支持POST、HEAD等请求方法,支持请求头、响应头等,支持更多种数据类型,不再局限于文本数据
- 浏览器的每次请求都需要与服务器建立一个TCP连接,请求处理完毕后立即断开TCP连接(短链接)
- 1997年,HTTP/1.1(最经典,使用最广泛的版本)
- 支持PUT、DELETE等请求方法
- 采用长连接(Connection:keep-alive),多个请求可以共用一个TCP连接
- HTTP的标准
- 由万维网协会(W3C)、互联网工程任务组(IETF)协调制定,最终发布一些列的RFC(Request For Comments)
- 1991年,HTTP/0.9
-
报文格式
-
ABNF(Augmented BNF)
-
是BNF(Backus-Naur Form)的修改增强版
-
ABNF核心规则
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mPSo5gH0-1672749383498)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163622834.png)]
-
-
请求报文
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vykAqLEn-1672749383499)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163311449.png)]
-
响应报文
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qvH3MCo1-1672749383499)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163332962.png)]
-
整体格式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0pdYSWxq-1672749383500)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163631634.png)]
-
start-line格式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K91t2i8V-1672749383500)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163719250.png)]
-
message-body格式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iJIwLPS3-1672749383500)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163802481.png)]
-
header-filed格式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EjOhMO8S-1672749383500)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163821345.png)]
-
请求方法:
- GET:常用于读取的操作,请求参数直接拼接在URL的后面(浏览器对URL是有大小限制的)
- POST:常用于添加、修改、删除的操作,请求参数可以放到请求体中(无大小限制)
- HEAD:请求得到与GET请求相同的响应,但是没有响应体
- OPTIONS:用于获取目的资源所支持的通信选项,比如服务器支持的请求方法
- PUT:用于对已存在的资源进行整体覆盖
- PATCH:用于对资源进行部分修改,不存在则新建资源
- DELETE:用于删除指定资源
- TRACE:请求服务器回显其收到的请求信息,主要用于HTTP请求的测试或诊断
- CONNECT:可以开启一个客户端与所请求资源之间的双向沟通的通道,它可以中来创建隧道(tunel)
- 可以用来访问采用了SSL(HTTPS)协议的站点
-
头部字段:
- 请求头字段(Request Header Fields)
- 有关要获取的资源或客户端本身信息的消息头
- 响应头字段(Response Header Fields)
- 有关响应的补充信息,比如服务器本身的名称和版本等的消息头
- 实体头字段(Entity Header Fields)
- 有关实体主题的更多信息,比如主题长度(Content-Length)或其MIME类型
- 通用头字段(General Header Fields)
- 同时适用于请求和响应消息,但与消息主体无关的消息头
- 请求头字段(Request Header Fields)
-
请求头字段
- User-Agent:浏览器的身份标识字符串
- Host:服务器的域名、端口号
- Date:发送该消息的日期和时间
- Referer:表示浏览器所访问的前一个页面,表示是前一个页面中的某个链接将浏览器带到了当前这个页面
- content-Type:请求体的类型
- Content-Length:请求体的长度(字节为单位)
- Accept:能够接受的响应内容类型
- Accept-Charset:能够接受的字符集
- Accept-Encoding:能够接受的编码方式列表
- Accept-Language:能够接受的响应内容的自然语言列表
- Range:仅请求某个实体的一部分,字节偏移以0开始
- Origin:发起一个针对跨域资源共享的请求
- Cookie:之前由服务器通过Set-Cookie发送的Cookie
- Connection:该浏览器想要优先使用的连接类型
- Cache-Control:用来指定在这次的请求/响应链中的所有缓存机制都必须遵守的指令
-
响应头字段
- Content-Type:响应体的类型
- Content-Encoding:内容所使用的编码类型
- Content-Length:响应体的长度(字节为单位)
- Content-Disposition:一个可以让客户端下载文件并建议文件名的头部
- Accept-Ranges:服务器支持哪些种类的部分内容范围
- Content-Range:这条部分消息是属于完整消息的那一部分
- Access-Control-Allow-Origin:指定哪些网站可参与到跨来源资源共享过程中
- Location:用来进行重定向,或者在创建了某个新资源时使用
- Set-Cookie:返回一个Cookie让客户端去保存
- Connection:针对该连接所预期的选项
- Cache-Control:向从服务器直到客户端在内的所有缓存机制告知,他们是否可以缓存这个对象。单位为秒
-
状态码(Status Code)
- 信息响应:100-199
- 100 Continue 继续。客户端应继续其请求
- 101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
- 成功响应:200-299
- 200 OK 请求成功。一般用于GET与POST请求
- 201 Created 已创建。成功请求并创建了新的资源
- 202 Accepted 已接受。已经接受请求,但未处理完成
- 203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
- 204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
- 205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
- 206 Partial Content 部分内容。服务器成功处理了部分GET请求
- 重定向:300-399
- 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
- 301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
- 302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
- 303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
- 304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
- 305 Use Proxy 使用代理。所请求的资源必须通过代理访问
- 306 Unused 已经被废弃的HTTP状态码
- 307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向
- 客户端错误:400-499
- 400 Bad Request 客户端请求的语法错误,服务器无法理解
- 401 Unauthorized 请求要求用户的身份认证
- 402 Payment Required 保留,将来使用
- 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
- 404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
- 405 Method Not Allowed 客户端请求中的方法被禁止
- 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
- 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
- 408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
- 409 Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
- 410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
- 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
- 412 Precondition Failed 客户端请求信息的先决条件错误
- 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
- 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
- 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
- 416 Requested range not satisfiable 客户端请求的范围无效
- 417 Expectation Failed 服务器无法满足Expect的请求头信息
- 服务器错误:500-599
- 500 Internal Server Error 服务器内部错误,无法完成请求
- 501 Not Implemented 服务器不支持请求的功能,无法完成请求
- 502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
- 503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
- 504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
- 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理
- form提交
- action:请求的URI
- method:请求方法(GET、POST)
- enctype:POST请求时,请求体的编码方式
- application/x-www-form-urllencoded(默认值)
- 用&分隔参数,用=分割键和值,字符用URL编码方式进行编码
- multipart/form-data
- 文件上传时必须使用这种编码方式
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdhieqTD-1672749383501)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210412104657780.png)]
- 代理服务器(Proxy Server)
- 本身不生产内容
- 处于中间位置转发上下游的请求和响应
- 正向代理:代理的对象是客户端
- 可以隐藏客户的身份
- 绕过防火墙,突破访问限制
- Internet访问控制
- 数据过滤
- 反向代理:代理的对象是服务器
- 隐藏服务器身份
- 安全防护
- 负载均衡
- Via:追加经过的每一台代理服务器的主机名(或域名)
- X-Forwarded-For:追加请求方的IP地址
- X-Real-IP:客户端的真实IP地址
- CDN(Content Delivery Network)内容分发网络
- 利用最靠近每位用户的服务器
- 更快更可靠的将音乐、图片、视频等资源文件(一般是静态资源)分发给用户
- CDN运营商在全国乃至全球的各大枢纽城市建立机房
- 部署大量拥有高存储高带宽的节点,构建一个跨运营商、跨地域的专用网络
- 信息响应:100-199
-
网络安全
- 网络通信中面临的四种安全威胁
- 截获:窃听通信内容
- 中断:中断网络通信
- 篡改:篡改通信内容
- 伪造:伪造通信内容
- 网络层:ARP欺骗(ARP spoofing)
- 可让攻击者获取局域网上的数据报甚至可以篡改数据包
- 可让网络上特定的电脑之间无法正常通信
- 让送至特定IP地址的流量被错误送到攻击者所取代的地方
- 防护方式
- 静态ARP
- DHCP Snooping
- 网络设备可借由DHCP保留网络上各电脑的MAC地址,在伪造的ARP数据报发出时即可侦测到
- 利用一些软件监听ARP的不正常变动
- Dos(Denial-of-Service attack)拒绝服务攻击
- DDoS(Distributed Denial-of-Service attack)分布式拒绝服务攻击
- 使目标电脑的网络或系统资源耗尽,使服务中断或停止,导致其正常用户无法访问
- DDoS使用网络上两个或以上被攻陷的电脑作为僵尸向特定的目标发动DoS攻击
- DoS攻击可以分为两大类
- 带宽消耗型:UDP洪水攻击、ICMP洪水攻击
- 资源消耗型:SYN洪水攻击、LAND
- 防御方式:入侵检测、流量过滤、多重验证
- 堵塞网络带宽的流量将被过滤,正常的流量可以正常通行
- 防火墙
- 防火墙可以设置规则,例如允许或拒绝特定通讯协议,端口或IP地址
- 当攻击从少数不正常的IP地址发出时,可以简单的使用拒绝规则组织一切从攻击源IP发出的通信
- 复杂攻击难以用简单规则来阻止,例如80端口遭受攻击时不可能拒绝端口所有的通信,因为同时会组织合法访问
- 防火墙可能处于网络架构中过后的位置,路由器可能在恶意流量达到防火墙前就被攻击影响
- 交换机和路由器
- 大多数交换机有一定的速度限制和访问控制能力
- 黑洞引导
- 将所有受攻击计算机的通信全部发送到一个“黑洞”(空接口或不存在的计算机地址)或者又足够能力处理数据洪流的网络设备商,以避免网络收到较大影响
- 流量清洗
- 当流量被送到DDoS防护清晰中心时,通过采用抗DDoS软件处理,将正常流量和恶意流量区分开
- 正常的流量会回注回客户网站
- SYN洪水攻击(SYN flooding attack)
- 攻击者发送一系列的SYN请求到目标,不回复ACK,导致目标消耗大量资源等待
- 攻击方法
- 跳过发送最后的ACK信息
- 修改源IP地址,让目标发送SYN-ACK到伪造的IP地址
- 传输层-LAND攻击局域网拒绝服务攻击(Local Area Network Denial attack)
- 通过持续发送相同源地址和目标地址的欺骗数据包,使目标试图与自己建立连接,消耗系统资源直至崩溃
- 大多数防火墙都能拦截类似的攻击包
- 路由器同时设置上行与下行筛选器,屏蔽所有源地址与目标地址相同的数据包
- 应用层 - DNS劫持(域名劫持)
- 篡改某个域名的解析结果,从而使域名的IP指向另一个IP
- 导致相对应网址的访问被劫持到另一个不可到达或假冒的网址
- 从而实现非法窃取用户信息或者破坏正常网络服务的目的
- HTTP劫持:对HTTP数据包进行拦截处理,比如插入JS代码
HTTP协议的安全问题
- HTTP协议默认是采取明文传输的,因此会有很大的安全隐患
- 常见的提高安全性的方法是对通信内容进行加密后,再进行传输
- 常见的加密方式有
- 不可逆
- 单向散列函数(One-way hash function):MD5、SHA等
- 根据任意长度的消息内容计算出固定长度的散列值
- 散列值的长度是固定的,不会受到消息内容长度的影响
- 计算速度快,能快速计算出散列值
- 消息不同,散列值也不同,一字之差,天壤之别
- 具备单向性
- 单向散列函数也被称为消息摘要函数、哈希函数
- 输出的散列值也被称为消息摘要、指纹
- MD4、MD5、SHA-1、SHA-2、SHA-3
- 通过验证散列值可以防止数据被篡改
- 可以加密密码,形成密文
- 单向散列函数(One-way hash function):MD5、SHA等
- 可逆
- 对称加密:DES、3DES、AES等
- 其他
- 混合密码系统、数字签名、证书
- encrypt:加密
- decrypt:解密
- plaintext:明文
- ciphertext:密文
- 不可逆
=======
网络协议入门到精通
- TCP和UDP的区别?说一下他们的报文格式?
- TCP的流量控制和拥塞控制?TCP如何实现可靠性传输?
- 为什么连接是三次握手,关闭时四次挥手?
- 七层模型与四层模型的区别?每一层的作用是什么?
- 交换机与路由器的区别?
同轴电缆、集线器、网桥、交换机
- 同轴电缆:半双工通信、容易冲突、不安全、冲突域问题严重,故障容易波及整个网络
- 集线器:半双工通信、容易冲突、不安全,冲突域问题严重,单独某段线缆故障不会波及整个网络
- 网桥:同集线器,但可以通过自学习得知每个接口所连接的MAC地址,从而隔绝冲突域
- 交换机:相当于接口更多的网桥,全双工通信,比集线器更安全
- 路由器:可以在不同网段之间转发数据,隔绝广播域
MAC地址
MAC(Media Access Control Address)地址
- 每一个网卡都有一个6字节(48bit)的MAC地址
- 全球唯一,固化在了网卡的ROM中,由IEEE802标准规定
- 前3字节:OUI(Organizationally Unique Identifier),组织唯一标识符,由IEEE的注册管理机构分配给厂商
- 后3字节:网络接口标识符,由厂商自行分配
MAC地址的获取:ARP(Address Resolution Protocol)地址解析协议
- 当不知道对方主机的MAC地址时,可以通过发送ARP广播获取对方的MAC地址
- 获取成功后,会缓存IP地址、MAC地址的映射信息,俗称:ARP缓存
- 通过ARP广播获取的MAC地址,属于动态(dynamic)缓存
ICMP(Internet Control Message Protocol):互联网控制消息协议
- IPv4中的ICMP被称作ICMPv4,IPv6中的ICMP则被称作ICMPv6
- 通常用于放回错误信息或者ping信息包
- 比如TTL值过期、目的地不可达
- ICMP的错误信息总是包括了源数据并返回给发送者
IP地址
-
IP地址(Internet Protocol Address):互联网上的每一个主机都有一个IP地址
- 最初是IPv4版本,32bit(4字节),2019年11月25日,全球的IP地址已经用完
- 后面推出了IPv6版本,128bit(16字节)
-
IP地址由两部分组成:网络标识(网络ID)、主机标志(主机ID)
- 同一网段的计算机,网络ID相同
- 通过子网掩码可以计算出网络ID:子网掩码 & IP地址
-
计算机和其他计算机通信前,会先判断目标主机和自己是否在同一网段
- 同一网段:不需要由路由器进行转发
- 不同网段:交由路由器进行转发
-
网络地址分类:
-
A类地址:默认子网掩码是255.0.0.0
8bit 24bit 网络ID,从0001开始(1.0.0.0) 主机ID -
B类地址:默认子网掩码是255.255.0.0
8bit 24bit 网络ID,1000(128.0.0.0) 主机ID -
默认子网掩码是255.255.255.0
8bit 24bit 网络ID,从1100开始(192.0.0.0) 主机ID -
主机ID全为0,表示主机所在的网段
-
主机ID全为1,表示主机所在网段的全部主机(广播)
- 可以尝试用ping给某个网段的全部主机发数据
-
-
CIDR:无类别域间路由
- 子网掩码的CIDR表示方法
- 192.168.1.100/24,表示子网掩码有24个1,也就是255.255.255.0
- 123.210.100.200/16,表示子网掩码有16个1,也就是255.255.0.0
- 子网掩码的CIDR表示方法
-
子网划分:借用主机位做子网位,划分子网
- 等长子网划分:将一个网段等分成多个子网,每个子网的可用IP地址数相同
- 如果一个子网是原来网络的一半,子网掩码往后移动一位
- 变长子网划分:每个子网的可用IP地址数量可以不同
- 如果一个子网地址块的长度是原网段的(1/2)^n
- 子网的子网掩码,就是在原网段的子网掩码基础上增加n个1
- 不等长的子网,它们的子网掩码也不同
- 等长子网划分:将一个网段等分成多个子网,每个子网的可用IP地址数相同
-
超网:多网段合并成更大的网段
- 网段合并后子网掩码往前移动一位
- IP段中的主机位不能全为0或1
- 如果第一个网段的网络号能被n整除,那么由它开始连续的n个网段,能通过左移k位子网掩码进行合并
-
超网和子网的判断:
- 判断网段是三类网络中的哪一类
- 判断网段子网掩码位数比默认子网掩码的多少
物理层(Physical)
物理层定义了接口标准、线缆标准、传输速率、传输方式等
-
模拟信号(Analog Signal)
- 连续的新号,适合长距离传输
- 抗干扰能力差,收到干扰时波形变形很难纠正
-
数字新号(Digital Signal)
- 离散的信号,不适合长距离传输
- 抗干扰能力强,受到干扰时波形失真可以修复
-
局域网通信模型:
PC-通过网线传输数字信号-集线器/交换机-通过网线传输数字信号-PC
-
广域网通信模型(网线不能超过100m):
-
信道:信息传输的通道,一条传输介质上(比如网线)上可以存在多条信道
- 单工通信
- 信号只能往一个方向传输,任何时候都不能改变信号的传输方向
- 比如无线电广播、有线电视广播
- 半双工通信
- 信号可以双向传输,但是必须交替进行,同一时间只能往一个方向传输
- 比如对讲机
- 全双工通信
- 信号可以同时双向传输
- 比如手机
- 单工通信
数据链路层(Data Link)
-
链路:从一个节点到相邻节点的一段物理线路(无线或有线),中间没有其他交换节点
-
数据链路:在一条链路上传输数据时,需要有对应的数据协议来控制数据的传输
-
不同的数据链路,所用的通信协议可能时不同的
- 广播信道:CSMA/CD协议(比如同轴电缆、集线器等组成的网络)
- 点对点信道:PPP协议(比如两个路由器之间的信道)
-
数据链路层的三个基本问题
-
封装成帧
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YnZE2Siy-1672749383501)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210323104822731.png)]
- 使用SOH(Start Of Hearder)作为帧开始符
- 使用EOT(End Of Transmission)作为帧结束符
- 帧(Frame)的数据部分是网络层传递下来的数据包(IP数据包,Packet)
- 最大传输单元MTU(Maximum Transfer Unit)
- 每一种数据链路层协议都规定了所能够传输的帧的数据长度上限
- 以太网的MTU为1500个字节
-
透明传输
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x9WLTEe0-1672749383501)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210323104920699.png)]
- 数据部分一旦出现了SOH、EOT,就需要进行转义
- 发送方会用ESC进行字节填充
-
差错校验
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-szmuNZwK-1672749383502)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210323104933868.png)]
- 发送方会在帧尾部添加一个FCS进行标记
- FCS是根据数据部分 + 首部计算得出的
- 接收方收到帧后会将重新进行FCS计算校对
- 校对通过接受并删除FCS,否则丢弃整个帧
-
CSMA/CD协议
- CSMA/CD(Carrier Sense Multiple Access with Collision Detection)
- 载波侦听 多路访问/冲突检测
- 使用了CSMA/CD协议的网络可以成为以太网(Ethernet),它传输的是以太网帧
- 以太网帧的格式有:Ethernet V2标准、IEEE的802.3标准
- 使用最多的是Ethernet V2标准
- 为了能够检测正在发送的帧是否产生了冲突(冲突检测机制),以太网的帧至少要64字节
- 用交换机组建的网络,已经支持全双工通信,不需要再使用CSMA/CD协议
- 但是因为传输的帧依然是以太网帧
- 所以用交换机组建的网络依然可以叫做以太网
-
Ethernet V2帧的格式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EcYTgzCD-1672749383502)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210323105010844.png)]
- 以太网使用曼彻斯特编码,接收端接收帧过程只要发现没有信号跳变,就认为帧结束
- 首部:目标MAC地址 + 源MAC地址 + 网络类型
- 以太网帧:首部 + 数据 + FCS
- 数据的长度至少是64 - 6 - 6 - 2 - 4= 46个字节
- 以太网帧的数据长度:46 - 1500字节
- 以太网帧的长度:64 - 1518字节
-
PPP协议(Point to Point Protocol)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-By6FwK1P-1672749383502)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210323111612755.png)]
- Flag字段:图中的值为0x7E,帧开始符、帧结束符
- Address字段:图中的值是0xFF,形同虚设,点到点通信不需要源MAC、目标MAC地址
- Control字段:图中的值为0x03,目前没有什么作用
- Protocol字段:内部用到的协议类型
-
网络层(Nerwork)
-
网络层数据包(IP数据包,Packet)由首部、数据两部分组成
- 数据:很多时候是由传输层传递下来的数据段(Segment)
-
版本(Version):IP版本
- 占4位
- 0x0100:IPv4
- 0x0110:IPv6
-
首部长度(Header Length):
- 占四位,二进制乘以4才是最终长度
- 0x0101:20(5 * 4)(最小值)
- 0x0111:60(15 * 4)(最大值)
-
区分服务(Differentiated Services Field):
- 占8位
- 可以用于提高网络的服务质量(QoS,Quality of Service)
-
总长度(Total Length):
- 占16位
- 首部 + 数据的长度之和,最大值是2^16-1 = 65535
-
由于帧的数据不能超过1500字节,所以过大的IP数据包需要分成片(Fragments)传输给数据链路层
- 每一片都由自己的网络层首部(IP首部)
-
标识(Identification):
- 占16位
- 数据包的ID,当数据包过大进行分片时,同一个数据包的所有片的标识都是一样的
- 有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1
- ID的最大值时65535,用完后会重新循环使用
-
标志(Flags):
- 占3位
- 第一位(Reserved Bit):保留,暂无作用
- 第二位(Don’t Fragment):1代表不允许分片,0代表允许分片
- 第三位(More Fragments):1代表不是最后一片,0代表是最后一片
-
片偏移(Fragment Offset):
-
占13位
-
片偏移乘以8:字节偏移
-
每一篇的长度一定是8的整数倍
-
生存时间(Time To Live,TTL)
- 占8位
- 每个路由器在转发前会将TTL减1,一旦发现TTL为0,路由器会返回错误报告
- 观察使用ping命令后的TTL,可以推测出对方的操作系统、中间经过了多少个路由器
-
协议(Protocol)
-
占8位
-
表明所封装的数据是使用了什么协议
协议 ICMP IGMP IP TCP EGP IGP UDP IPv6 ESP OSPF 值(OCT) 1 2 4 6 8 9 17 41 50 89
-
-
首部校验和(Header Checksum)
- 用于检查首部是否由错误
-
ping命令的几个用法
- ping /?
- 查看ping命令帮助
- ping ip地址 -l size
- 发送指定大小的数据包
- ping ip地址 -f
- 不允许网络层分片
- ping IP地址 -i TTL
- 设置TTL的值
- 通过tracert、pathping命令,可以追踪数据包经过了哪些路由器
传输层(Transport)
-
传输层由两个协议
- TCP(Transmission Control Protocol),传输控制协议
- UDP(User Datagram Protocol),用户数据报协议
TCP UDP 连接性 面向连接 无链接 可靠性 可靠传输,不丢包 不可靠传输,尽最大努力交付,可能丢包 首部占用空间 大 小 传输速率 慢 快 资源消耗 大 小 应用场景 浏览器、文件传输、邮件发送 音视频通话、直播 应用层协议 HTTP、HTTPS、FTP、SMTP、DNS DNS -
UDP(User Datagram Protocol)用户数据报协议——数据格式
-
UDP是无链接的,减少了建立和释放连接的开销
-
UDP尽最大能力交付,不保证可靠交付
-
因此不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)
16位源端口号 16位目的端口号 16位UDP长度 16位UDP校验和 数据(如有) -
16位UDP长度(Length):占16位两个字节,内容为首部的长度+数据的长度
-
检验和的计算内容:伪首部+首部+数据
-
伪首部:仅在计算检验和时起作用,并不会传递给网络层
-
-
UDP首部中端口时占用2字节(16位)
-
客户端的源端口时临时开启的随机端口
-
防火墙可以设置开启/关闭某些端口号来提高安全性
-
-
常用命令行:
- netstat -an:查看被占用的端口
- netstat -anb:查看被占用的端口、占用端口的应用程序
- telnet 主机 端口:查看是否可以访问主机的某个端口
-
TCP(Transmission Control Protocol)传输控制协议
-
数据偏移位:表示TCP头部长度,由此可以推出数据报开始的位置
- TCP报文中首部长度20-60字节
- 占4位,取值范围是0x0101-0x1111
- 乘以4:得到首部长度(Header Length)
-
保留位:
- 占6位,目前全为0
-
UDP的首部中有个16位的字段记录了整个UDP报文段的长度(首部+数据)
- TCP的首部中仅仅由各4位的字段记录了TCP报文段的首部长度,并没有字段记录TCP报文段的数据长度
- 实际上,UDP报文段首部中占16位的长度字段是冗余的,纯粹是为了保证首部是32bit对齐
- TCP/UDP报文段的数据长度,完全可以由IP数据报的首部推测出来
- 传输层的数据长度 = 网络层的总长度 - 网络层的首部长度 - 传输层的首部长度
-
检验和位(Checksum):跟UDP一样,TCP检验和的计算内容:伪首部 + 首部 + 数据
-
标志位(Flags):
- URG(Urgent):
- 当URG 位为1,紧急指针字段才有效。表明当前报文段中有紧急数据,应当优先传送
- ACK(Acknowledgment):
- 当ACK位位1,确认号字段才有效
- PSH(Push):
- RST(Reset):
- 当RST位为1,表明连接中出现严重差错,必须释放连接,重新建立连接
- SYN(Synchronization):
- 当SYN位为1,ACK位为1,表明这是一个建立连接的请求
- 若对方同意建立连接,则回复SYN = 1、ACK = 1
- FIN(Finish):
- 当FIN位为1,表明数据已经发送完毕,要求释放连接
- URG(Urgent):
-
序号(Sequence Number):
- 占4字节
- 在传输过程的每一个字节都有一个对应的编号
- 在建立连接后,序号代表:这一次传给对方的TCP数据部分的第一个字节的编号
-
确认号(Acknowledgment):
- 占4字节
- 在建立连接后,确认号代表:期望对方下一次传过来的TCP数据部分的第一个字节的编号
-
窗口(Window):
- 占2字节
- 这个字段有流量控制功能,用以告诉对方下一次允许发送的数据大小(字节为单位)
-
TCP的几个要点
- 可靠传输
- 停止等待ARQ协议
- ARQ(Automatic Repeat-reQuest),自动重传请求
- 无差错的情况下,每发送一次数据报都会接受一次确认
- 无差错情况
- 超时重传
- 确认丢失
- 确认迟到
- 若重传次数达到系统设置的次数,则发送Restet(RST)报文要求重连TCP连接
- 无差错的情况下,每发送一次数据报都会接受一次确认
- 连续ARQ协议 + 滑动窗口协议
- 发送窗口中的分组连续发送,发送完毕后,停止发送等待确认
- 初始的发送窗口数由建立连接时的报文确定,接收窗口数可变的
- 如果没有丢失数据报,则只回复最后收到的数据报的序号
- 如果丢失数据,一般情况下会回复丢失的数据报前的前一个包的序号
- 在TCP通信过程中,如果发送序列中间某个数据报丢失(如12345中丢了3)
- TCP会通过重传最后确认的分组后续的分组(最后确认的是2,会重传345)
- 这样原先已经正确传输的分组也可能重复发送(45),但是降低了TCP性能
- SACK(SelectIve acknowledgement):选择性确认技术
- 告诉发送方丢失了哪些数据,接收到了哪些数据
- 使得TCP只重新发送丢失的包(3),不用发送后续所有的分组(45)
- SACK信息会放在TCP首部的选项部分
- Kind部分:占1字节,值为5表示这是SACK信息
- Length:占1字节,表示SACK选项一共占用了多少字节
- Left Edge:占4字节,左边界,丢失包的左边界
- Right Edge:占4字节,右边界,丢失包的右边界
- 一对边界信息需要占用8字节,由于TCP首部的选项部分最多40字节
- SACK选项最多携带4组边界信息(40-2)// 8 = 4
- SACK选项最多占用字节数:4 * 8 + 2 = 34
- 为什么在传输层就将数据拆分成一个一个包,而不是等到网络层再分片传递给数据链路层
- 如果在传输层不分段,一旦出现数据丢失,整个传输层的数据都得重传
- 如果在传输层分了段,一段出现数据丢失,只需要重传丢失的那些数据即可
- 一般分段的标准是根据MTU - IP数据报首部长度 - TCP数据段首部长度
- 即 1500 - 20 - 20 = 1460
- 数据帧到达链路层后:MTU + 源MAC + 目的MAC + 协议类型 + FCS
- 即 1500 + 6 + 6+ 2 + 4 = 1518
- 流量控制
- 流量控制的目的是为了限制发送方的发送速率,从而避免出现接收方来不及处理数据包从而出现大量丢包这种极大浪费网络资源的现象
- 原理:
- 通过确认报文中窗口字段来控制发送方的发送速率
- 发送方的发送窗口大小不能超过接收方给出的窗口大小
- 当发送方收到接收窗口大小为0的报文时,就会停止发送数据
- 同时会启动一个定时器,隔一段时间会发送测试报文询问最新的窗口大小
- 如果新接收到的窗口大小还是0,则重置计时器
- 拥塞控制
- 拥塞控制的目的时防止过多的数据注入到网络中,避免网络中的路由器和链路过载
- 拥塞控制时一个全局性的过程
- 涉及网络中的所有主机、路由器,以及与降低网络传输性能有关的所有因素
- 相对于流量控制的点对点通信控制而言,拥塞控制是控制整个网络的
- 拥塞控制的方法:
- 慢开始(slow start)
- 在传输刚开始时,并不会直接就按照建立连接时确定的MSS来传输数据,而是从少到多增减增加数据包的数量(cwnd会成倍增长)
- 拥塞避免(congestion avoidance)
- ssthresh(slow start threshold):满开始阈值,cwnd达到阈值后,以线性方式增加
- 此时拥塞窗口会缓慢地线性增大,以防止网络过早出现拥塞
- 只要网络出现拥塞,把ssthresh减为拥塞峰值的一般,同时重新开始传输,cwnd会恢复初始值
- 快速重传(fast retransmit)
- 接收方:
- 没收到一个失序的分组后就立即发出重复确认
- 使发送方及时指导有分组没有到达
- 这样就不需要等到连续ARQ协议中的窗口传输时间结束再进行确认
- 发送发:
- 只要连续收到三个重复确认(总共四个相同的确认),就应当立即重传对方尚未收到的数据报
- 这样就不需要等待重传计时器到期后再重传
- 接收方:
- 快速回复(fast recovery)
- 当发送方连续收到三个重复确认,说明网络出现拥塞
- 这时可以执行乘法减小,把ssthresh减为拥塞峰值的一般
- 与慢开始不同之处在于不执行慢开始算法,即cwnd不会恢复到初始值
- 此时cwnd会被设置为新的ssthresh值,即减半之后的拥塞窗口阈值
- 开始执行加法增大,使拥塞窗口缓慢线性增大
- 发送窗口的最大值
- 发送窗口的最大值:swnd = min(cwnd,rwnd)
- 当rwnd < cwnd时,接收方的接受能力限制了发送窗口的最大值
- 当rwnd > cwnd时,网络环境传输能力限制了发送窗口的最大值
- 慢开始(slow start)
- 几个缩写:
- MSS(Maximum Segment Size):每个段最大的数据部分大小(在建立连接时确定)
- cwnd(congestion window):拥塞窗口
- rwnd(receive window):接收窗口
- swnd(send window):发送窗口
- swnd = min(cwnd,rwnd)
- 连接管理
- 建立连接
- 建立连接时将会在数据包头部的额外信息中确认彼此的传输的序号、确认号
- 之后将会在每次传输过程中根据确定的序号和确认号进行通讯
- 规律:
- 确认收到当前收到的数据包的最后一个序号+1(希望对方下一次发送的数据包的首个序号)
- 如果有数据需要发送,则发送对方确认的数据包序号
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QGxBR44h-1672749383502)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210330125450161.png)]
- SYN = 1,ACK = 0,seq = x
- 表示此时处于CLOSED的某个端口希望与处于监听状态的服务器建立连接,发送连接请求后,端口转为SYN-SENT状态
- SYN = 1表示希望建立连接,ACK = 0再次无意义,seq = x表示客户端数据中当前的偏移序号是x
- SYN = 1,ACK = 1,seq = y,ack = x + 1
- 表示LISTEN状态的服务器端口已经收到了连接请求,并且服务器也希望与客户端建立连接,此时发送了一个连接请求确认,发送连接确认请求后,服务器进入SYN-RCVD
- SYN = 1表示希望建立连接,ACK = 1表示已经收到了连接请求,此时数据包头部中的ack字段有效,值为ack = x + 1,表示希望下一次收到的数据包中的数据的首个序号为x + 1,seq = y 表示当前服务器数据包当前的偏移序号是y
- ACK = 1,seq = x + 1,ack = y + 1
- 表示处于SYN-SENT状态的客户端已经收到了服务器的连接确认请求,同时进行最后的确认,并转入ESTABLISHED状态
- ACK = 1表示已经收到了服务器发来的连接确认请求,此时数据包头部中的ack字段有效,值为ack = y + 1,确认正式建立连接时发送的数据开始序号为seq = x + 1
- 服务器收到客户端的确认请求后,将会从转入ESTABLISHED状态
- 状态解读:
- CLOSED:client处于关闭状态
- LISTEN:server处于监听状态,等待client连接
- SYN-RCVD:表示server接收到了SYN报文,当接收到client的ACK报文后,它会进入到ESTABLISHED状态
- SYN-SENT:表示client已发送SYN报文,等待server的第二次握手
- ESTABLISHED:表示连接已经建立
- 前两次握手的特点:
- SYN都设置为1:双方都希望与对方建立连接
- 数据部分长度都为0:此时仍处于建立连接状态,不适合传输
- TCP头部的长度一般是32字节:
- 固定头部:20字节
- 选项部分:12字节
- 双方会交换确认一些信息
- MSS:Maximum Segment Size最大报文段长度,彼此支持的最大报文段长度
- SACK:Selective ACK选择性确认,彼此是否支持报文传输选择性确认功能
- Window scale:窗口缩放系数,系数乘以128后表示彼此当前窗口大小
- 这些数据都放在TCP头部的选项部分中
- 为什么建立连接的时候,要进行三次握手,两次不行吗?
- 主要目的:防止server端一直等待,浪费资源
- 避免出现因为网络延迟的情况而导致连接建立浪费资源的情况
- 第三次握手失败了,会怎么处理?
- 此时server的状态为SYN-RCVD,若等不到client的ACK,server会重新发送SYN + ACK包
- 如果server多次重发SYN +ACK都等不到client的ACK,就会发送RST包,强制关闭连接
- 释放连接
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBxDP1FT-1672749383503)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210330133307181.png)]
- FIN = 1,ACK = 1,seq = u,ack = v
- 处于ESTABLISHED状态的客户端发送一个连接释放请求给同样处于ESTABLISHED状态的服务器,然后转入FIN-WAIT-1状态
- FIN = 1表示此时客户端希望关闭当前连接,ACK = 1表示已经收到了服务器上一次发送的数据,同时数据包头部中的ack = v字段有效,表示已经收到了服务器上一次发送的数据包,希望对方下一次发送的数据包头部中的数据起始位置为v,seq = u表示当前发送的数据包中的序号为u
- ACK = 1,seq = v,ack = u + 1
- 处于ESTABLISHED状态的服务器收到客户端发送的连接释放请求后,回复连接释放请求确认,之后转入CLOSE-WAIT状态
- ACK = 1表示已经收到了该请求,同时数据包头部中的ack = u + 1字段有效,表示已经收到了服务器上一次发送的数据包,希望对方下一次发送的数据包头部中的数据起始位置为u + 1,seq = v表示当前发送给客户端的数据包中的首序号是v
- 处于FIN-WAIT-1状态的客户端收到确认释放连接请求后,转入FIN-WAIT-2状态,等待服务器发送连接释放请求,此时的客户端已经不能再发送数据给服务器,但是仍然可以接收来自服务器的数据
- FIN = 1,ACK = 1, seq = w,ack = u + 1
- 处于CLOSE-WAIT状态的服务器也已经发送完数据,准备开始释放连接
- FIN = 1表示服务器也已经准备释放连接,ACK = 1 表示已经收到客户端上一次发送的数据包,使得ack = u + 1字段有效,表示已经收到了客户端上一次发送的数据包,希望对方下一次发送的数据包头部中的数据起始位置为u + 1,seq = w表示当前发送给客户端的数据包中的首序号是w,之后服务器转入LAST-ACK状态
- ACK = 1,seq = u + 1,ack = w + 1
- 处于FIN-WAIT–2状态的客户端收到来自服务器的释放连接请求后,回复确认释放连接请求给服务器,并转入TIME-WAIT状态,服务器收到该请求后,关闭连接,并且正式关闭连接。此时双方皆不可发送数据给对方,并且也无法收到对方发送的数据
- ACK = 1表示已经收到对方的关闭连接请求,使得ack = u + 1字段有效,表示已经收到了客户端上一次发送的数据包,希望对方下一次发送的数据包头部中的数据起始位置为w + 1,当前的数据包的首序号是u + 1
- 状态 解读:
- FIN-WAIT-1:表示想主动关闭连接
- 向对方发送了FIN报文,此时进入FIN-WAIT-1状态
- CLOSE-WAIT:表示在等待关闭连接
- 当对方发送FIN给自己,自己会回应一个ACK报文给对方,此时则进入CLOSE-WAIT状态
- 在此状态下,需要考虑自己是否还有数据要发送给对方,如果没有,发送FIN报文给对方
- FIN-WAIT-2:只要对方发送ACK确认后,主动方就会处于FIN-WAIT-2状态,然后等待对方发送FIN报文
- CLOSING:一种比较罕见的状态
- 表示一方在发送FIN报文后,并没有收到对方的ACK报文,反而也收到了对方的FIN报文
- 如果双方几乎在同时准备关闭连接的话,那么就会出现双方同时发送FIN报文的情况,就会出现CLOSING状态
- 表示双方都正在关闭连接
- LAST-ACK:被动关闭乙方在发送FIN报文后,最后等待对方的ACK报文
- 当收到ACK报文后,即可进入CLOSED状态
- TIME-WAIT:表示收到了对方的FIN报文,并发送了ACK报文,就等2MSL后即可进入CLOSED状态
- 如果在FIN-WAIT-1状态下,收到了对方同时带FIN标志和ACK标志的报文时可以直接进入TIME-WAIT状态,而无需经过FIN-WAIT-2状态
- CLOSED:关闭状态
- FIN-WAIT-1:表示想主动关闭连接
- 释放连接细节
- TCP/IP协议栈在涉及上,允许任何一方先发起断开请求,上述讲解的是客户端主动要求断开连接
- 客户端在最后发送ACK报文后,需要有一个TIME-WAIT阶段,等待一段时间后,再真正关闭连接
- 一般是等待两倍的MSL(Maximum Segment Lifetime,最大分段生存期)
- MSL是TCP报文在Internet上的最长生存时间
- 每个具体的TCP实现都必须选择一个确定的MSL值,RFC 1122建议是两分钟
- 可以防止本次连接中产生的数据包误传到下一次连接中,因为本次连接中的数据包都会在2MSL时间内消失
- 如果客户端发送ACK后马上释放,如果出现因为网络原因导致服务器没有收到客户端的ACK报文,那么就会出现服务器多次重发FIN报文的情况
- 此时客户端没有任何响应,服务器会处于长期等待状态,甚至多次重发FIN,浪费资源
- 如果服务器恰好有应用分配到当前端口,则会刚建立连接就马上释放连接
- 连接释放疑惑
- 为什么释放连接的时候要进行四次挥手呢?
- TCP是全双工通信
- 第一次挥手:当主机1发送FIN报文段时
- 表示主机1告诉主机2,主机1已经没有数据要发送了,但是此时主机1还是可以接收到来自主机2的数据
- 第二次挥手:当主机2返回ACK报文段时
- 表示主机2已经指导主机1没有数据发送了,但是主机2还是可以发送数据到主机1
- 第三次挥手:当主机2也发送FIN报文段时
- 表示主机2告诉主机1,主机2已经没有数据要发送了
- 第四次挥手:当主机1返回ACK报文段时
- 表示主机1已经知道主机2没有数据发送了。随后正式断开整个TCP连接
- 有时候其实是只有三次挥手的情况的:
- 当服务器收到客户端的FIN,恰好此时服务器也已经没有数据发送给客户端时
- 这时候服务器就会将第二、第三次挥手合并,同时告诉客户端两件事
- 已经知道客户端没有数据要发送了
- 服务器也已经没有数据要发送了
- 为什么释放连接的时候要进行四次挥手呢?
- 建立连接
- 可靠传输
-
-
应用层(Application)
-
应用层常见的协议:
- 超文本传输协议:HTTP(Hyper Text Transfer Protocol)、HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer)
- 文件传输协议:FTP(File Transfer Protocol)
- 电子邮件:SMTP(Simple Mail Transfer Protocol)、POP3(Post Office Protocol 3)、IMAP(Internet Mail Access Protocol)
- 动态主机配置:DHCP(Dynamic Host Configuration Protocol)
- 域名系统:DNS(Domain Name System)
-
域名(Domain Name)
-
由于IP地址不方便记忆,并且不能表达组织的名称和性质,人们涉及除了域名
-
但是实际上,为了能够访问到具体的主机,最终还是得知道目标主机的IP地址
-
为什么不全程用域名?
- IP地址固定4个字节,域名随随便便都至少十几个字节,无疑会增加路由器的负担,浪费流量
-
根据级别不同,域名可以分为顶级域名、二级域名、三级域名等等
- 顶级域名:
- 通用顶级域名:com(公司)、net(网络机构)、org(组织机构)、edu(教育机构)、gov(政府部门)、int(国际组织)
- 国家及地区顶级域名:cn(中国)、jp(日本)、uk(英国)、us(美国)
- 新通用顶级域名:vip、xyz、top、club、shop
- 二级域名:
- 二级域名指的是顶级域名之下的域名
- 在通用顶级域名下,它一般是指域名注册人的名称,例如baidu、google等
- 在国家及地区顶级域名下,它一般指注册类别,例如com、edu、gov等
- mail.qq.com
- 顶级域名:
-
DNS(Domain Name System)域名系统:
-
DNS域名系统:
- 利用DNS协议,可以将域名解析成对应的IP地址
- DNS可以基于UDP协议,也可以基于TCP协议,服务器占用53端口
-
DNS服务器:
- 客户端首先会访问最近的一台DNS服务器,也就是客户端自己配置的DNS服务器
- 所有的DNS服务器都记录了DNS根域名服务器的IP地址
- 上级DNS服务器记录了下一级DNS服务器的IP地址
- 全球一共13台IPv4的DNS根域名服务器、25台IPv6的DNS根域名服务器
-
DNS常用命令
- ipconfig /displaydns:查看DNS缓存记录
- ipconfig /flushdns:清空DNS缓存记录
- ping 域名
- nslookup 域名:查询域名对应的IP
-
IP地址的分配
-
IP地址按照分配方式可以分为
- 静态IP地址
- 需要手动设置
- 使用场景:不怎么挪动的台式机、服务器
- 动态IP地址
- 从DHCP服务器自动获取IP地址
- 使用场景:移动设备、无线设备
- 静态IP地址
-
DHCP(Dynamic Host Configuration Protocol)动态主机配置协议
- DHCP协议基于UDP协议,服务器是67端口,客户端时68端口
- DHCP服务器会从IP地址池中,挑选一个IP地址出租给客户端一段时间
- 时间到期就会回收IP
- 平时家里上网的路由器就可以充当DHCP服务器
-
DHCP分配IP地址的四个阶段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZlLrhKvW-1672749383503)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402155127350.png)]
- DISCOVER:发现服务器
- 发送广播包
- 源IP:0.0.0.0
- 目标IP:255.255.255.255
- 目标MAC:FF:FF:FF:FF:FF:FF
- 发送广播包
- OFFER:提供租约
- 服务器返回可以租用的IP地址,以及租用期限、子网掩码、网关、DNS等信息
- 同一时间可能会有多个DNS服务器提供租约
- REQUEST:选择IP地址
- 客户端选择一个OFFER,发送光播包进行回应
- ACKNOWLEDGE:确认
- 被选中的服务器发送ACK数据包给客户端
- IP地址分配完毕
- DISCOVER:发现服务器
-
DHCP的部分细节
- DHCP服务器可以借助DHCP中继代理(DHCP Relay Agent)实现跨网段分配IP地址
- 客户端会在租期不足的时候,自动向DHCP服务器发送REQUEST信息申请续约
- 常用命令
- ipconfig /all:可以看到DHCP相关的详细信息,比如租约过期时间、DHCP服务器地址等
- ipconfig /release:释放租约
- ipconfig /renew:重新申请IP地址、申请续约(延长租期)
-
-
-
-
HTTP(Hyper Text Transfer Protocol)超文本传输协议
- 互联网中应用最广泛的应用层协议之一
- HTTP的最初目的是提供一种发布和接收HTML页面的方法,由URI来标识具体的资源
- URI(Uniform Resource Locator)统一资源标识符,身份标识
- URL(Uniform Resource Identifier)统一资源定位符,位置标识
- HTML(Hyper Text Markup Language)超文本标志语言
- 用以编写网页
- HTTP版本
- 1991年,HTTP/0.9
- 只支持GET请求方法获取文本数据,比如HTML文档,且不支持请求头、响应头等,无法向服务器传递太多信息
- 1996年,HTTP/1.0
- 支持POST、HEAD等请求方法,支持请求头、响应头等,支持更多种数据类型,不再局限于文本数据
- 浏览器的每次请求都需要与服务器建立一个TCP连接,请求处理完毕后立即断开TCP连接(短链接)
- 1997年,HTTP/1.1(最经典,使用最广泛的版本)
- 支持PUT、DELETE等请求方法
- 采用长连接(Connection:keep-alive),多个请求可以共用一个TCP连接
- HTTP的标准
- 由万维网协会(W3C)、互联网工程任务组(IETF)协调制定,最终发布一些列的RFC(Request For Comments)
- 1991年,HTTP/0.9
-
报文格式
-
ABNF(Augmented BNF)
-
是BNF(Backus-Naur Form)的修改增强版
-
ABNF核心规则
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-La1cjtZS-1672749383503)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163622834.png)]
-
-
请求报文
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r9ulGa5w-1672749383503)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163311449.png)]
-
响应报文
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Fp69GRp-1672749383503)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163332962.png)]
-
整体格式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3zKszmOf-1672749383504)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163631634.png)]
-
start-line格式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MlPpkWdG-1672749383504)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163719250.png)]
-
message-body格式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-41GTlg8Q-1672749383504)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163802481.png)]
-
header-filed格式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9XvB2VcR-1672749383504)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210402163821345.png)]
-
请求方法:
- GET:常用于读取的操作,请求参数直接拼接在URL的后面(浏览器对URL是有大小限制的)
- POST:常用于添加、修改、删除的操作,请求参数可以放到请求体中(无大小限制)
- HEAD:请求得到与GET请求相同的响应,但是没有响应体
- OPTIONS:用于获取目的资源所支持的通信选项,比如服务器支持的请求方法
- PUT:用于对已存在的资源进行整体覆盖
- PATCH:用于对资源进行部分修改,不存在则新建资源
- DELETE:用于删除指定资源
- TRACE:请求服务器回显其收到的请求信息,主要用于HTTP请求的测试或诊断
- CONNECT:可以开启一个客户端与所请求资源之间的双向沟通的通道,它可以中来创建隧道(tunel)
- 可以用来访问采用了SSL(HTTPS)协议的站点
-
头部字段:
- 请求头字段(Request Header Fields)
- 有关要获取的资源或客户端本身信息的消息头
- 响应头字段(Response Header Fields)
- 有关响应的补充信息,比如服务器本身的名称和版本等的消息头
- 实体头字段(Entity Header Fields)
- 有关实体主题的更多信息,比如主题长度(Content-Length)或其MIME类型
- 通用头字段(General Header Fields)
- 同时适用于请求和响应消息,但与消息主体无关的消息头
- 请求头字段(Request Header Fields)
-
请求头字段
- User-Agent:浏览器的身份标识字符串
- Host:服务器的域名、端口号
- Date:发送该消息的日期和时间
- Referer:表示浏览器所访问的前一个页面,表示是前一个页面中的某个链接将浏览器带到了当前这个页面
- content-Type:请求体的类型
- Content-Length:请求体的长度(字节为单位)
- Accept:能够接受的响应内容类型
- Accept-Charset:能够接受的字符集
- Accept-Encoding:能够接受的编码方式列表
- Accept-Language:能够接受的响应内容的自然语言列表
- Range:仅请求某个实体的一部分,字节偏移以0开始
- Origin:发起一个针对跨域资源共享的请求
- Cookie:之前由服务器通过Set-Cookie发送的Cookie
- Connection:该浏览器想要优先使用的连接类型
- Cache-Control:用来指定在这次的请求/响应链中的所有缓存机制都必须遵守的指令
-
响应头字段
- Content-Type:响应体的类型
- Content-Encoding:内容所使用的编码类型
- Content-Length:响应体的长度(字节为单位)
- Content-Disposition:一个可以让客户端下载文件并建议文件名的头部
- Accept-Ranges:服务器支持哪些种类的部分内容范围
- Content-Range:这条部分消息是属于完整消息的那一部分
- Access-Control-Allow-Origin:指定哪些网站可参与到跨来源资源共享过程中
- Location:用来进行重定向,或者在创建了某个新资源时使用
- Set-Cookie:返回一个Cookie让客户端去保存
- Connection:针对该连接所预期的选项
- Cache-Control:向从服务器直到客户端在内的所有缓存机制告知,他们是否可以缓存这个对象。单位为秒
-
状态码(Status Code)
- 信息响应:100-199
- 100 Continue 继续。客户端应继续其请求
- 101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
- 成功响应:200-299
- 200 OK 请求成功。一般用于GET与POST请求
- 201 Created 已创建。成功请求并创建了新的资源
- 202 Accepted 已接受。已经接受请求,但未处理完成
- 203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
- 204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
- 205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
- 206 Partial Content 部分内容。服务器成功处理了部分GET请求
- 重定向:300-399
- 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
- 301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
- 302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
- 303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
- 304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
- 305 Use Proxy 使用代理。所请求的资源必须通过代理访问
- 306 Unused 已经被废弃的HTTP状态码
- 307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向
- 客户端错误:400-499
- 400 Bad Request 客户端请求的语法错误,服务器无法理解
- 401 Unauthorized 请求要求用户的身份认证
- 402 Payment Required 保留,将来使用
- 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
- 404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
- 405 Method Not Allowed 客户端请求中的方法被禁止
- 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
- 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
- 408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
- 409 Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
- 410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
- 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
- 412 Precondition Failed 客户端请求信息的先决条件错误
- 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
- 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
- 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
- 416 Requested range not satisfiable 客户端请求的范围无效
- 417 Expectation Failed 服务器无法满足Expect的请求头信息
- 服务器错误:500-599
- 500 Internal Server Error 服务器内部错误,无法完成请求
- 501 Not Implemented 服务器不支持请求的功能,无法完成请求
- 502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
- 503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
- 504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
- 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理
- form提交
- action:请求的URI
- method:请求方法(GET、POST)
- enctype:POST请求时,请求体的编码方式
- application/x-www-form-urllencoded(默认值)
- 用&分隔参数,用=分割键和值,字符用URL编码方式进行编码
- multipart/form-data
- 文件上传时必须使用这种编码方式
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iu1DL2le-1672749383504)(C:UsersRobotINXAppDataRoamingTyporatypora-user-imagesimage-20210412104657780.png)]
- 代理服务器(Proxy Server)
- 本身不生产内容
- 处于中间位置转发上下游的请求和响应
- 正向代理:代理的对象是客户端
- 可以隐藏客户的身份
- 绕过防火墙,突破访问限制
- Internet访问控制
- 数据过滤
- 反向代理:代理的对象是服务器
- 隐藏服务器身份
- 安全防护
- 负载均衡
- Via:追加经过的每一台代理服务器的主机名(或域名)
- X-Forwarded-For:追加请求方的IP地址
- X-Real-IP:客户端的真实IP地址
- CDN(Content Delivery Network)内容分发网络
- 利用最靠近每位用户的服务器
- 更快更可靠的将音乐、图片、视频等资源文件(一般是静态资源)分发给用户
- CDN运营商在全国乃至全球的各大枢纽城市建立机房
- 部署大量拥有高存储高带宽的节点,构建一个跨运营商、跨地域的专用网络
- 信息响应:100-199
-
网络安全
- 网络通信中面临的四种安全威胁
- 截获:窃听通信内容
- 中断:中断网络通信
- 篡改:篡改通信内容
- 伪造:伪造通信内容
- 网络层:ARP欺骗(ARP spoofing)
- 可让攻击者获取局域网上的数据报甚至可以篡改数据包
- 可让网络上特定的电脑之间无法正常通信
- 让送至特定IP地址的流量被错误送到攻击者所取代的地方
- 防护方式
- 静态ARP
- DHCP Snooping
- 网络设备可借由DHCP保留网络上各电脑的MAC地址,在伪造的ARP数据报发出时即可侦测到
- 利用一些软件监听ARP的不正常变动
- Dos(Denial-of-Service attack)拒绝服务攻击
- DDoS(Distributed Denial-of-Service attack)分布式拒绝服务攻击
- 使目标电脑的网络或系统资源耗尽,使服务中断或停止,导致其正常用户无法访问
- DDoS使用网络上两个或以上被攻陷的电脑作为僵尸向特定的目标发动DoS攻击
- DoS攻击可以分为两大类
- 带宽消耗型:UDP洪水攻击、ICMP洪水攻击
- 资源消耗型:SYN洪水攻击、LAND
- 防御方式:入侵检测、流量过滤、多重验证
- 堵塞网络带宽的流量将被过滤,正常的流量可以正常通行
- 防火墙
- 防火墙可以设置规则,例如允许或拒绝特定通讯协议,端口或IP地址
- 当攻击从少数不正常的IP地址发出时,可以简单的使用拒绝规则组织一切从攻击源IP发出的通信
- 复杂攻击难以用简单规则来阻止,例如80端口遭受攻击时不可能拒绝端口所有的通信,因为同时会组织合法访问
- 防火墙可能处于网络架构中过后的位置,路由器可能在恶意流量达到防火墙前就被攻击影响
- 交换机和路由器
- 大多数交换机有一定的速度限制和访问控制能力
- 黑洞引导
- 将所有受攻击计算机的通信全部发送到一个“黑洞”(空接口或不存在的计算机地址)或者又足够能力处理数据洪流的网络设备商,以避免网络收到较大影响
- 流量清洗
- 当流量被送到DDoS防护清晰中心时,通过采用抗DDoS软件处理,将正常流量和恶意流量区分开
- 正常的流量会回注回客户网站
- SYN洪水攻击(SYN flooding attack)
- 攻击者发送一系列的SYN请求到目标,不回复ACK,导致目标消耗大量资源等待
- 攻击方法
- 跳过发送最后的ACK信息
- 修改源IP地址,让目标发送SYN-ACK到伪造的IP地址
- 传输层-LAND攻击局域网拒绝服务攻击(Local Area Network Denial attack)
- 通过持续发送相同源地址和目标地址的欺骗数据包,使目标试图与自己建立连接,消耗系统资源直至崩溃
- 大多数防火墙都能拦截类似的攻击包
- 路由器同时设置上行与下行筛选器,屏蔽所有源地址与目标地址相同的数据包
- 应用层 - DNS劫持(域名劫持)
- 篡改某个域名的解析结果,从而使域名的IP指向另一个IP
- 导致相对应网址的访问被劫持到另一个不可到达或假冒的网址
- 从而实现非法窃取用户信息或者破坏正常网络服务的目的
- HTTP劫持:对HTTP数据包进行拦截处理,比如插入JS代码
HTTP协议的安全问题
- HTTP协议默认是采取明文传输的,因此会有很大的安全隐患
- 常见的提高安全性的方法是对通信内容进行加密后,再进行传输
- 常见的加密方式有
- 不可逆
- 单向散列函数(One-way hash function):MD5、SHA等
- 根据任意长度的消息内容计算出固定长度的散列值
- 散列值的长度是固定的,不会受到消息内容长度的影响
- 计算速度快,能快速计算出散列值
- 消息不同,散列值也不同,一字之差,天壤之别
- 具备单向性
- 单向散列函数也被称为消息摘要函数、哈希函数
- 输出的散列值也被称为消息摘要、指纹
- MD4、MD5、SHA-1、SHA-2、SHA-3
- 通过验证散列值可以防止数据被篡改
- 可以加密密码,形成密文
- 单向散列函数(One-way hash function):MD5、SHA等
- 可逆
- 对称加密:DES、3DES、AES等
- 其他
- 混合密码系统、数字签名、证书
- encrypt:加密
- decrypt:解密
- plaintext:明文
- ciphertext:密文
- 不可逆
8485e0921075ab509aca57062752c6c33e495881
最后
以上就是眼睛大苗条为你收集整理的网络协议入门到精通笔记网络协议入门到精通同轴电缆、集线器、网桥、交换机MAC地址IP地址物理层(Physical)数据链路层(Data Link)网络层(Nerwork)ping命令的几个用法传输层(Transport)应用层(Application)网络安全网络协议入门到精通同轴电缆、集线器、网桥、交换机MAC地址IP地址物理层(Physical)数据链路层(Data Link)网络层(Nerwork)ping命令的几个用法传输层(Transport)应用层(Application)网络安全的全部内容,希望文章能够帮你解决网络协议入门到精通笔记网络协议入门到精通同轴电缆、集线器、网桥、交换机MAC地址IP地址物理层(Physical)数据链路层(Data Link)网络层(Nerwork)ping命令的几个用法传输层(Transport)应用层(Application)网络安全网络协议入门到精通同轴电缆、集线器、网桥、交换机MAC地址IP地址物理层(Physical)数据链路层(Data Link)网络层(Nerwork)ping命令的几个用法传输层(Transport)应用层(Application)网络安全所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复