- 博客(37)
- 收藏
- 关注
原创 HTTP协议学习---(四)安全篇
一 HTTPS与SSL/TSL1 因为 HTTP 是明文传输,所以不安全,容易被黑客窃听或篡改;2 通信安全必须同时具备机密性、完整性、身份认证和不可否认这四个特性;机密性由对称加密AES保证,完整性由SHA384摘要算法保证,身份认证和不可否认由RSA非对称加密保证3 HTTPS 的语法、语义仍然是 HTTP,但把下层的协议由 TCP/IP 换成了 SSL/TLS;4 SSL/TLS是信息安全领域中的权威标准,SSL由网景公司发明,在V3之后被互联网工 程组命名为TSL,最新的是2018年的V
2020-11-05 18:03:20
439
5
原创 HTTP协议学习---(三)进阶篇
一 HTTP协议body数据格式http协议是明文传输的,为了具体描述body中的数据需要在header中加入一些描述字段。1 MIME typeMIME 把数据分成了八大类,每个大类下再细分出多个子类,形式是“type/subtype”的字符串(常用的四大类以下)text:即文本格式的可读数据,我们最熟悉的应该就是 text/html 了,表示超文本文档,此外还有纯文本 text/plain、样式表 text/css 等。image:即图像文件,有 image/gif、image/jpeg、im
2020-11-05 17:59:51
753
原创 HTTP协议学习---(二)基础篇
1 首次建立链接的过程注意,图中三次握手正常会走两次或者多次,因为http1传输效率比较低,所以浏览器一般会对一个地址利用多个端口建立多个连接,这个链接在开始只是被打开,但没有传输数据。其中握手相关的ACK等消息都是TCP消息,不是http。2 http协议基础请求整体由 起始行+请求头+空行+实体 组成。请求中的起始行称为请求行,由三部分组成:例:GET / HTTP/1.1①请求方法:是一个动词,如 GET/POST,表示对资源的操作;②请求目标:通常是一个 URI,标记了请求方法要操
2020-11-05 17:38:55
370
原创 HTTP协议学习---(一)概念篇
一 基本概念1 不同版本概述HTTP 协议始于三十年前蒂姆·伯纳斯 - 李的一篇论文;HTTP/0.9 是个简单的文本协议,只能获取文本资源;HTTP/1.0 确立了大部分现在使用的技术,但它不是正式标准;HTTP/1.1 是目前互联网上使用最广泛的协议,功能也非常完善(文本传输,即使文件等 上传本身是二进制,但一些分隔符依然是文本);HTTP/2 基于 Google 的 SPDY 协议,注重性能改善,但还未普及;HTTP/3 基于 Google 的 QUIC 协议,是将来的发展方向。2 超
2020-11-05 17:34:39
157
原创 RabbitMQ实战指南学习
一 AMQP协议1 协议二 消费模式1 服务端(broker)推送推模式采用Basic.consume进行消费,可以通过BasicQos设置一次性推送的消息数量。2 消费端拉取拉模式采用Basic.Get进行消费,一次性只能获取一条消息。三 消费端的确认与拒绝1 autoAck当autoAck设置为true时,rabbitmq会把发送出去的消息自动置为确认,然后从内存或者磁盘上删除。当autoAck设置为false时,消费的消息分为两种状态,一种是等待投递的消息,一种是发送出去还没
2020-11-05 17:19:53
541
原创 记一次线上内存泄漏问题排查
一 故障描述管理后台发现部分接口长时间无响应,此问题出现多次,每次都需重启项目就可以解决。查看日志发现多次出现java.lang.OutOfMemoryError: GC overhead limit exceeded,目前项目堆大小为固定2G,后台为内部人员使用,量不大。二 处理过程1 经过日志分析是GC问题,根据查资料确切的说于JVM花费太长时间执行GC且只能回收很少的堆内存时抛出的。根据Oracle官方文档,默认情况下,如果Java进程花费98%以上的时间执行GC,并且每次只有不到2%的堆被恢复
2020-10-21 15:23:55
518
原创 redis设计与实现学习---(四)独立功能的实现
一 发布与订阅1 简介Redis的发布与订阅功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。SUBSCRIBE “news.it”PUBLISH “news.it” “hello”PSUBSCRIBE命令订阅一个或多个模式,从 而成为这些模式的订阅者:每当有其他客户端向某个频道发送消息时,消息不仅会被发送给 这个频道的所有订阅者,它还会被发送给所有与这个频道相匹配的模式的订阅者。2 频道的订阅与退订SUBSCRIBE和UNSUBSCRIBE订阅与退订对应着链表中怎加或
2020-08-17 11:30:21
119
1
原创 redis设计与实现学习---(三)多机数据库的实现
一 复制1 旧版本复制的实现redis slaveof命令分为同步和命令传播。同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。命令传播操作则用于在主服务器的数据库状态被修改,导致主从服务器的数据库状态出 现不一致时,让主从服务器的数据库重新回到一致状态。2 同步从服务器对主服务器的同步操作需要通过向主服务器发送SYNC命令来完成,以下是 SYNC命令的执行步骤:1)从服务器向主服务器发送SYNC命令。2)收到SYNC命令的主服务器执行BGSAVE命令,在后台生成一个RD
2020-08-06 14:16:01
112
原创 redis设计与实现学习---(二)单机数据库的实现
一 数据库注意:下面所有serverCron的操作的定时都是都是默认100毫秒一次,可以通过hz(默认为10 )配置1 服务器状态初始化服务器时,程序会根据服务器状态的dbnum属性来决定应该创建多少个数据库,dbnum可以通过配置文件中的database决定,默认16。2 客户端状态每个客户端中间有一个数据库指针,通过select index可以切换指向的数据库3 数据库其中数据库键空间中所有的键都是字符串键对象,值是不同数据结构对象。过期时间中键与键空间共享同一个键对象,值存的是一
2020-07-27 14:47:56
138
原创 redis设计与实现学习---(一)基础数据类型
一 基础数据类型1 简单动态字符串(simple dynamic string,SDS)与C中字符串的异同点:① 获取字符串长度,C需要遍历字符数组,而SDS则通过len记录② 杜绝缓冲区溢出,C中如果合并两个字符串字符数组之前没有分配足够的空间就会造成数据截断,丢失数据,而SDS则合并之前判断free是否足够,不足够则会扩容在合并③ 因为有预留的free空间,所以在修改字符串的时候会减少内存重分配的次数(默认SDS长度小于1M则预分配free=len,如果大于1M则free=1M)。④ 惰性的
2020-07-22 18:51:07
140
原创 TCP/IP协议卷学习---TCP部分(十一 慢启动)
1 慢启动存在原因发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的。但是如果在发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。一些中间路由器必须缓存分组,并有可能耗尽存储器的空间。“慢启动 (slow start) ”算法。该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。2 拥塞窗口拥塞窗口 (congestion window) ,记为cwnd,当与另一个网络的主机建立
2020-06-04 16:23:32
266
原创 TCP/IP协议卷学习---TCP部分(十 TCP的成块数据流)
1 滑动窗口与停止等待在TFTP协议中使用的停止等待协议,即发送一个数据之后需要等待接收到确认之后才能发送下一份数据。滑动窗口允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。2三种数据流(1) 正常数据报文段7的A C K的序号之所以是2 0 4 8而不是3 0 7 3是由以下原因造成的: 当一个分组到达时,它首先被设备中断例程进行处理,然后放置到 I P的输入队列中。三个报文段 4、5和6依次到达并按接收顺序放到 I P
2020-06-04 16:22:13
187
原创 TCP/IP协议卷学习---TCP部分(九 TCP的交互数据流)
1 交互数据流与成块数据流按照分组数量计算,约有一半的TCP报文段包含成块数据(如FTP、电子邮件和Usenet新闻),另一半则包含交互数据(如telnet和rlogin) 。如果按字节计算,则成块数据与交互数据的比例约为90%和10%。因此TCP处理两种数据的方式也不一样。2 交互式输入rlogin的交互式输入是每敲一个字符便进行四次交互,客户端发送键入的字符,服务端响应一个ACK,服务端响应一个回显的字符,客户端再发送一个ACK。telnet则可以在整行的数据键入之后做一次交互。如图数据字节的确
2020-06-04 16:20:00
147
原创 TCP/IP协议卷学习---TCP部分(八 TCP服务器)
1 呼入请求队列①正等待连接请求的一端有一个固定长度的连接队列,该队列中的连接已被TCP接受(即三次握手已经完成) ,但还没有被应用层所接受。注意区分 T C P接受一个连接是将其放入这个队列,而应用层接受连接是将其从该队列中移出。②应用层将指明该队列的最大长度,这个值通常称为积压值 ( b a c k l o g )。它的取值范围是0 ~ 5之间的整数,包括 0和5(大多数的应用程序都将这个值说明为 5)。③当一个连接请求(即S Y N)到达时,T C P使用一个算法,根据当前连接队列中的连接数来确
2020-06-04 16:18:52
134
原创 TCP/IP协议卷学习---TCP部分(七 TCP选项)
1 选项内容每个选项的开始是 1字节kind字段,说明选项的类型。kind字段为0和1的选项仅占 1个字节。其他的选项在kind字节后还有len字节。它说明的长度是指总长度,包括kind字节和len字节。
2020-06-04 16:18:05
192
原创 TCP/IP协议卷学习---TCP部分(六 复位报文)
1 复位报文作用TCP首部中的RST比特是用于“复位”的。一般说来,无论何时一个报文段发往基准的连接(referenced connection)出现错误,TCP都会发出一个复位报文段(这里提到的“基准的连接”是指由目的 I P 地址和目的端口号以及源 I P 地址和源端口号指明的连接。)2 产生时机① 到不存在的端口的连接。对于UDP,当一个数据报到达目的端口时,该端口没在使用,它将产生一个ICMP端口不可达的信息。而TCP则使用复位。② 异常终止一个链接。终止一个连接的正常方式是一方发送 F I
2020-06-04 16:17:04
229
原创 TCP/IP协议卷学习---TCP部分(五 MSL)
1 2MSL等待TIME_WAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime) 。它是任何报文段被丢弃前在网络内的最长时间。实现中的常用值是30秒,1分钟,或2分钟。对一个具体实现所给定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的 F I N) 。这种
2020-06-04 16:15:31
997
原创 TCP/IP协议卷学习---TCP部分(三 最大报文长度MSS)
1 MSS最大报文段长度(MSS)表示TCP传往另一端的最大块数据的长度也是接受的长度。当一个连接建立时,连接的双方都要通告各自的MSS(因此MSS选项只能出现在SYN报文段中)。如果一方不接收来自另一方的MSS值,则MSS就定为默认值536字节(这个默认值允许20字节的IP首部和20字节的TCP首部以适合576字节IP数据报)。对于一个以太网,MSS值可达1460字节。...
2020-06-04 16:13:18
844
原创 TCP/IP协议卷学习---TCP部分(二 TCP连接的建立与终止)
1 建立连接① 请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。这个SYN段为报文段 1。② 服务器发回包含服务器的初始序号的 SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的 ISN加1以对客户的 SYN报文段进行确认。一个 SYN将占用一个序号。③ 客户必须将确认序号设置为服务器的 ISN加1以对服务器的 SYN报文段进行确认(报文段3)。2 ISN序号系统初始化时初始的发送序号被初始化为1。这个变量每0.5秒增加64000,并每隔
2020-06-03 18:45:43
142
原创 TCP/IP协议卷学习---TCP部分(一 概述)
1 什么是TCPT C P提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。2 TCP如何提供可靠性①应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段(segment)。②当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如
2020-06-03 18:44:32
204
原创 TCP/IP协议卷学习---基础部分(十六 BOOTP)
1 RARP与BOOTP无盘系统,它在不知道自身IP地址的情况下,在进行系统引导时能够通过RARP来获取它的IP地址。然而使用RARP有两个问题: (1)IP地址是返回的唯一结果;(2)既然RARP使用链路层广播,RARP请求就不会被路由器转发(迫使每个实际网络设置一个RARP服务器)。一种用于无盘系统进行系统引导的替代方法,又称为引导程序协议,或BOOTP。2 BOOTP分组格式①“操作码”字段为 1表示请求,为 2表示应答。硬件类型字段为 1表示10 Mb/s 的以太网,这和A R P请求或应
2020-06-03 18:41:56
659
原创 TCP/IP协议卷学习---基础部分(十五 TFTP)
1 概念TFTP ( Trivial File Transfer Protocol) 即简单文件传送协议,最初打算用于引导无盘系统(通常是工作站或 X终端)。和使用TCP的文件传送协议(TFP)不同,为了保持简单和短小,TFTP将使用UDP。2 报文① T F T P报文的头两个字节表示操作码。对于读请求和写请求( W R Q)。文件名字段说明客户要读或写的位于服务器上的文件。这个文件字段以 0字节作为结束。模式字段是一个A S C I I码串n e t a s c i i或o c t e t(可
2020-06-03 18:40:44
132
原创 TCP/IP协议卷学习---基础部分(十四 DNS)
1 域名层次结构顶级域名被分为三个部分:① arpa是一个用作地址到名字转换的特殊域。② 7个3字符长的普通域。③ 所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域或地理域。2 子域的划分一个独立管理的DNS子树称为一个区域 (zone) 。一个常见的区域是一个二级域,如baidu.com。许多二级域将它们的区域划分成更小的区域。一旦一个区域的授权机构被委派后,由它负责向该区域提供多个名字服务器。当一个新系统加入到一个区域中时,该区域的DNS管理者为该新系统申请
2020-06-03 18:39:30
195
原创 TCP/IP协议卷学习---基础部分(十三 IGMP)
1 IGMPInternet组管理协议(IGMP) 。它让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。① 版本② 类型,为1说明是由多播路由器发出的查询报文,为 2说明是主机发出的报告报文。③ 校验和,与ICMP校验和计算方式相同。④ D类IP地址,在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。2 加入一个多播组多播的基础就是一个进程的概念(使用的术语进程是指操作系统执行的一个程序) ,该进程在一个主机的给定
2020-06-03 18:34:33
160
原创 TCP/IP协议卷学习---基础部分(十二 广播和多播)
1 概念IP地址有3种,单播地址,多播地址和广播地址。广播地址和多播地址仅适用于UDP。TCP表示的是两个服务进程之间的唯一链接,所以只能使用单播地址。单播的这种通信方式不会影响其他主机之间的通信(除了争抢信道之外),广播需要发送给所有主机,但某些特殊情况不需要所有主机都做处理,会造成其他主机负荷工作,因此出现了多播。对于以太网,当地址中最高字节的最低位设置为 1时表示该地址是一个多播地址,用十六进制可表示为01:00:00:00:00:00。以太网广播地址ff : ff : ff : ff : ff
2020-06-03 18:33:09
166
原创 TCP/IP协议卷学习---基础部分(十一 UDP 用户数据报协议)
1 UDP数据报①源端口目的端口,最大65535②16位UDP长度,包括UDP头部以及数据长度,最小为8字节(即数据为空)③16位UDP校验和校验的是头部+数据,IP协议中的数据校验和只有IP头。TCP的校验和是必须要的,UDP是非必须的。在UDP中,数据长度是可以为奇数的,但是校验和的计算是需要N个16bit的和,因此为了方便计算,UDP数据不够的情况下可以用0填充,在实际传输的时候填充的这些可以不用实际传输。2 UDP/TCP伪首部UDP数据报和TCP段都包含一个 12字节长的伪首部,它是为
2020-06-03 18:30:42
231
原创 TCP/IP协议卷学习---基础部分(十 IP动态选路(不完善,需要在多看几遍))
1 动态选路当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路。路由器之间必须采用选路协议进行通信,这样的选路协议有很多种。动态选路并不改变选路机制(主机-网络-默认路由),仅仅是放置到路由表中的信息改变了,当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自于自引导程序文件中的route命令。如果守护程序发现前往同一信宿存在多条路由,那么它将选择最佳路由并加入内核路由表中。如果路由守护程序发现一条链路已经断开(可能是路由器崩溃或电话线路不好),它可以删
2020-06-03 18:29:03
124
原创 TCP/IP协议卷学习---基础部分(九 IP静态选路)
1 选路的原理匹配主机地址始终发生在匹配网络地址之前。①搜索匹配的主机地址②搜索匹配的网络地址③选择默认的路由地址2 路由表netstat -rn 可以列出当前网络的路由地址Flags含义:U 该路由可以使用。G 该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地是直接相连的。H 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址。如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址(主机部分为0):一个网络号,或者网络号与子网号的组合。D 该路由是
2020-06-03 18:27:11
166
原创 TCP/IP协议卷学习---基础部分(八 Traceroute程序)
1 为什么会有Traceroute①一些TCP/IP实现不会处理IP包中的选项,或者不试别选项中的RR,所以不会记录中间的路由地址。②记录器一般是单向的,下一个路由需要解析上一个路由的IP报并把出口地址加入进去。③IP数据报首部最大长度为60字节,导致记录的IP有限。2 traceroute实现traceroute程序使用ICMP报文和IP首部中的TTL字段(生存周期)。先发送一个TTL为1的,然后逐次增加。TTL字段是由发送端初始设置一个 8 bit字段。每次经过一个路由TTL就会减一,这样变作
2020-06-03 18:21:20
172
原创 TCP/IP协议卷学习---基础部分(七 PING程序)
1 pingping本身是基于ICMP完成的,因此在发送第一个ping请求之前首先要走ARP的那一套流程,因此一般第一个请求都会比后续请求慢一些。2 IP记录路由选项ping -R xxx 可以记录访问xxx地址中间经过的路由地址。这样会在ping请求发出时在IP报文的选项中添加RR选项,中间的路由解析IP报文之后会把出口的IP地址加入进去。code表示IP选项类型,RR选项的值为7,len是选项的总长度。因为IP首部最长为60字节,默认占有20字节,因此选项的总长度为40字节,这里RR选项头有3
2020-06-03 18:20:03
120
原创 TCP/IP协议卷学习---基础部分(六 ICMP控制报文协议)
1 ICMP作用ICMP可以认为是IP协议的一个组成部分,但又在IP协议之上。用来传递差错报文以及其他需要被注意的信息。通常被IP以及更高层(TCP/UDP)使用,还有一些ICMP报文被返回到用户进程。2 ICMP报文所有ICMP的前四个字节都是一样的,之后的则互不相同。8位类型字段用来描述特定类型的ICMP报文,8位代码用来补充类型字段的具体描述。16位校验和与IP计算方式相同。3 ICMP报文类型不同类型由报文中的类型字段和代码字段来共同决定,图中最后两列表示是查询报文还是差错报文,部分差错
2020-06-03 18:17:50
273
原创 TCP/IP协议卷学习---基础部分(五 RARP协议)
1 RARP的数据包RARP分组的格式与ARP分组基本一致。它们之间主要的差别是RARP请求或应答的帧类型代码为0x8035,而且RARP请求的操作代码为3,应答操作代码为4。对应于ARP,RARP请求以广播方式传送,而RARP应答一般是单播传送的。一个RARP请求在网络上进行广播,它在分组中标明发送端的硬件地址,以请求相应IP地址的响应。应答通常是单播传送的。2 RARP服务器一般一个网络中都会有多个RARP服务器,发送RARP请求的无盘系统一般采用最先收到的RARP应答。3 无RARP服务器
2020-06-03 18:13:02
206
原创 TCP/IP协议卷学习---基础部分(四 ARP协议)
1 ARP过程(ftp bsdi bsdi一个域名举例)①通过DNS解析出主机IP地址②准备与目标地址建立TCP链接,发送TCP数据包并通过IP包装③如果目标主机在本地网络上,那么数据可以直接发送到目标主机,如果数据不在本地网络上,则通过选路函数先发送给默认路由,再有下一站路由转发④假定目标机器是本地以太网上的一台机器,则需要知道这台机器的MAC地址才能发送数据,因此首先需要将ARP请求广播到本地网络的每台主机上。包括目标主机的IP,意思为谁为这个IP则回复你的MAC地址⑤目标主机收到这份广
2020-06-03 18:12:02
159
原创 TCP/IP协议卷学习---基础部分(三 IP网际协议)
1 IP首部报文IP首部每行起始位为0bit位,末尾位为31bit位,在传输时,首先是 0~7 bit,其次8~15 bit,然后1 6~23 bit,最后是24~31 bit。这种传输次序称作big endian字节序,也称网络字节序。①4位版本,目前协议版本号为4,所以现在IP协议也称IPV4。②4位首部长度,指的是首部占32字节的行数(一行32bit),默认为5行,最长为15行,即60字节。③8位服务类型,前三个bit为优先权字段(现已废弃),最后一个bit无用,固定为0。中间四个bit代表
2020-06-03 18:10:03
248
1
原创 TCP/IP协议卷学习---基础部分(二 链路层)
1 链路层的三个目的:①为IP模块发送和接收IP数据报;②为ARP模块发送ARP请求和接收ARP应答③为RARP发送RARP请求和接收RARP应答2 以太网和IEEE802封装以太网地址为48bit(MAC地址),802.3允许16bit地址,不过大部分依然是48bit。802.3规定数据部分必须至少为38字节,而对于以太网,则要求最少要有46字节。为了保证这一点,必须在不足的空间插入填充(pad)字节。3 SLIP与CSLIPSLIP:串行线路IP。帧格式特点如下:①IP数据报以一个
2020-06-03 18:03:54
160
原创 TCP/IP协议卷学习---基础部分(一 概述)
一 概述1 OSI分层2 TCP/IP分层3 以太网/令牌环网令牌环网:多组机器之间只有一个令牌,谁拿到令牌谁就可以发送数据,令牌会在多台主机之间循环传递。目前比较少用以太网:采用总线的形式进行传递,每台主机在要发送信息时先判断当前是否有其他机器再发送,如果没有则发送,如果有则等待,如果两台机器同时发送则分别等待一段随机时间之后在发送,其余时间均处于监听状态,查看总线上的消息是否是自己的,如果不是则丢弃。4 ICMP/IGMPICMP与IGMP都是IP协议的附属协议。ICMP(Inter
2020-06-03 17:55:39
210
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人