序列号

1028学习笔记-TCP/UDP

天大地大妈咪最大 提交于 2019-12-02 16:11:28
传输协议之-TCP/UDP 对比 TCP 可靠 面向连接-类似打电话/收到扣1 但是效率比较低 UDP 不可靠的 面向无连接-类似群聊 效率高 eg:QQ传文件-TCP(保证文件完整),发消息-UDP 数据包结构 tcp三次握手 甲:你是小王? 乙:是的,我是小王,你是老李吗? 甲:是的我是老李 流程: 主机1 发送SYN seq=0,ctl=SYN (seq标记位,序列号) --> 主机2 收到SYN,发送SYN及ACK(确认号:收到的序列号+1) seq=0(序列号),ack=1,ctl=SYN(同步位),ACK --—> 主机1 收到STN及ACK,Established seq=1 ack=1 ctl=ACK 抓包实例 拓展:安全方向-SYN Flood(洪水)攻击是ddos的主要方式,通过僵尸网络发送大量的SYN报文,并不回复第二个包。 tcp会话确认 所有的包都要确认,只有第一个包是没有确认号的 最终的确认号就是数据的大小 主机1 seq=1 ack=1 |Data(9字节) --> 主机2 seq=1 ack=10 |Data(20字节) “ack=10理解为‘ 你可以发送序列号为10的数据包了 ’”--> 主机1 seq=10 ack=21 |Data(12字节) --> 主机2 seq=21 ack=22 |Data(n字节) 确认号就是前一个包的序列号+数据

TCP协议学习笔记-TCP报文包头

为君一笑 提交于 2019-12-02 13:08:24
了解ISO七层模型的思想 需要传输的数据,越到底层,需要的“其他”数据越多。 其传输前的处理过程类似于: A BA CBA DCBA ..... 每到下一层,理论上都需要增加一个头部用以标识 wireshark抓包实践 TCP协议详解 TCP报文段的格式 如图 报文段由报文首部和数据组成,报文首部最小占20字节最多占60字节,固定的20字节包含各种连接信息,可扩展的40字节存放各种选项值 TCP报文首部的字段解析 序号 也叫sequence,是协议通信中常用的一种手段 确认号 表示期望下次收到的序列号。比如服务器收到客户端发来的报文段,其序列号字段值为501,并通过计算可知数据长度为200,所以服务器可以算出最后一个字节的序列号为700。这表明服务器正确收到了客户端 发送的序列号到700为止的数据,因此,服务器期望下次收到的序列号 为701,并将其作为确认号放入应答报文段中 数据偏移 表示TCP报文段的第一个数据距离报文段起始处有多远。由于TCP报文段首部长度不确定,20到60字节不等,所以需要一个字段用于找到数据起始处 保留 占6位,目前不使用 控制位 用于说明报文段的性质,每个控制字段占1位。 用于在三次握手、四次挥手及平时的传输数据过程中。 窗口 表示发送该报文段的一方能够接收的字节数,用于控制对端发送数据的个数(控制对端滑动窗口) 检验和 用于检验报文段是否出错

用户认证

南笙酒味 提交于 2019-12-02 12:55:09
一、双向认证(Mutual Authentication) 使通信双方互相认证彼此身份并交换会话密钥。 已认证的密钥交换主要关注两个问题:保密性和实效性 重放攻击的例子: 防止重放攻击的方法: 为每一个用于认证交互的消息 附上一个序列号 ,新的消息只有其序列号满足适当的顺序时才会被接收。 这种方法的难点是要求每一方都跟踪与其交互的通信方最新的序列号。 考虑到开销问题,序列号基本上不会用于认证和密钥交换。 为每个消息附上 时间戳 ,要求不同参与者之间的时钟是同步的 挑战/应答 二、单向认证(One-Way Authentication) 应用领域:电子邮件服务 邮件消息需要加密,并且邮件处理系统不拥有解密密钥 认证的作用是接收者需要确保消息确实来自于所谓的发送者 来源: https://blog.csdn.net/qq_35443700/article/details/102761087

Twitter-Snowflake:自增ID算法

冷暖自知 提交于 2019-12-02 11:50:56
简介 Twitter 早期用 MySQL 存储数据,随着用户的增长,单一的 MySQL 实例没法承受海量的数据,后来团队就研究如何产生完美的自增ID,以满足两个基本的要求: 每秒能生成几十万条 ID 用于标识不同的 记录; 这些 ID 应该可以有个大致的顺序,也就是说发布时间相近的两条记录,它们的 ID也应当相近,这样才能方便各种客户端对记录 进行排序。 Twitter-Snowflake算法就是在这样的背景下产生的。 核心 Twitter 解决这两个问题的方案非常简单高效:每一个 ID 都是 64 位数字,由时间戳、工作机器节点和序列号组成, ID是由当前所在的机器节点生成的。如图: 下面先说明一下各个区间的作用。 符号位 :用于区分正负数。1为负数,0为整数。一般不需要负数,所以值固定为0。 时间戳 :一共预留41bit保存毫秒级时间戳。因为毫秒级时间戳长度是13位:41位二进制最大值(T)是:$2^{41}-1 = 2199023255551 $ , 刚好13位。可以表示的年份 = T / (3600 * 24 * 365 * 1000) = 69.7年。换算成Unix时间也就是可以表示到:2039-09-07 23:47:35: 大家会觉得这个时间不够用啊,没关系,后面会讲如何优化。 工作机器 :预留了10bit保存机器ID。只要机器ID不一样,每毫秒生成的ID是不一样的

Twitter-Snowflake:自增ID算法

我的梦境 提交于 2019-12-02 11:40:36
简介 Twitter 早期用 MySQL 存储数据,随着用户的增长,单一的 MySQL 实例没法承受海量的数据,后来团队就研究如何产生完美的自增ID,以满足两个基本的要求: 每秒能生成几十万条 ID 用于标识不同的 记录; 这些 ID 应该可以有个大致的顺序,也就是说发布时间相近的两条记录,它们的 ID也应当相近,这样才能方便各种客户端对记录 进行排序。 Twitter-Snowflake算法就是在这样的背景下产生的。 核心 Twitter 解决这两个问题的方案非常简单高效:每一个 ID 都是 64 位数字,由时间戳、工作机器节点和序列号组成, ID是由当前所在的机器节点生成的。如图: 下面先说明一下各个区间的作用。 符号位 :用于区分正负数。1为负数,0为整数。一般不需要负数,所以值固定为0。 时间戳 :一共预留41bit保存毫秒级时间戳。因为毫秒级时间戳长度是13位:41位二进制最大值(T)是:$2^{41}-1 = 2199023255551 $ , 刚好13位。可以表示的年份 = T / (3600 * 24 * 365 * 1000) = 69.7年。换算成Unix时间也就是可以表示到:2039-09-07 23:47:35: 大家会觉得这个时间不够用啊,没关系,后面会讲如何优化。 工作机器 :预留了10bit保存机器ID。只要机器ID不一样,每毫秒生成的ID是不一样的

三次握手与四次挥手

梦想与她 提交于 2019-12-02 00:33:01
什么是三次握手 三次握手( Three-way Handshake)是指在建立一个TCP连接时,需要客户端和服务器总共发送三个包。进行三次握手的主要作用是为了确认双方的接受能力和发送能力是否正常、指定自己的初始化序列号为后面可靠性传输做准备。 实质上其实就是连接服务器指定端口,建立 TCP连接,并同步连接双方的序列号和确认号,交换 TCP窗口大小 的信息。滑动窗口本质上是描述接受方的 TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据。如果发送方收到接受方的窗口大小为0的TCP数据报,那么发送方将停止发送数据,等到接受方发送窗口大小不为0的数据报的到来。 过程描述: 刚开始客户端处于 closed状态,服务端处于listen状态。 第一次握手,客户端给服务端发送一个 SYN报文,并指明客户端的初始化序列号ISN(c)此时客户端处于SYN_SEND状态。 首部的同步位 SYN=1,初始序号为seq=x , SYN=1的报文段不能携带数据,但是需要消耗掉一个序号。 第二次握手,服务器接受到客户端的 SYN报文之后,会以自己的SYN报文进行应答,并且指定了自己的初始化序列号ISN(s)同时会把客户端的ISN+1作为ACK的值,表示自己已经收到了客户端的SYN,此时服务器处于SYN_REVD状态。 在确认报文段中 SYN=1,ACK=1,确认号ack=x+1

TCP三次握手和四次挥手(一看就懂版)

此生再无相见时 提交于 2019-12-01 19:58:04
TCP三次握手: TCP四次挥手: 先解释关键字: 连接时:SYN是请求建立连接,所以在连接时SYN=1;(三次握手前两次SYN=1双向连接,第三次后面解释) 断开时:FIN是请求断开连接,所以在断开连接时FIN=1;(四次挥手中出现两次,因为是双向连接需要双向断开) seq是序列号,因此第二次请求发下一个包时序列号seq+1;(数据被拆分成数据包发送,因此需要序列号在接受时连城完整的数据) ack的值是下一个包的序列号,表示希望收到的包的序列号是seq+1; ACK表示收到了,=1; 然后是具体过程: 三次握手: 客户端发送SYN=1请求建立连接,并发送一小段数据包seq=x; 服务器收到seq=x,发送ACK=1表示确认,并发送自己的数据包seq=y、希望下次收到的数据包ack=x+1和建立连接的请求SYN=1; 客户端收到服务器发来的seq=y、ack=x+1和请求连接的SYN=1,然后发出确认信号ACK=1、服务器请求的数据包seq=x+1和它请求服务器接下来要发的数据包ack=y+1。 连接成功。 四次挥手: 客户端请求断开连接,发送FIN=1和数据包seq; 服务器收到断开请求发出确认信号ACK=1和希望收到的序列号为ack=seq+1和自己的seq; 服务器请求断开连接FIN=1,ack和seq; 客户端收到并回复ACK=1的确认信号和ack、seq; 连接断开

20170907_我是如何讲清楚TCP协议是如何保证可靠传输的

我怕爱的太早我们不能终老 提交于 2019-12-01 19:50:31
20170907_我是如何讲清楚TCP协议是如何保证可靠传输的 题外话: 1、UDP: (1) UDP ,user datagram protocol, 用户数据报协议 ,不提供复杂的控制机制, 利用IP提供面向无连接的通信服务,并且它是将应用程序发送过来的数据包在收到的那一刻,立即按照原样发送到上的一种机制。 (2)即使在网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,在传输过程中如果出现丢包,UDP也不负责重发,甚至当数据包的到达顺序乱掉之后也没有纠正顺序的功能。因此, 如果需要这些细节控制的话,就需要在采用UDP协议的应用层去作出处理。 (3)由于UDP面向无连接,所以它可以随时向对端发送数据包,再加上UDP本身的处理既简单右高效, 所以UDP经常用于如下几个方面: 数据包总量比较少的通信,比如DNS、SNMP。 视频、音频等对实时性要求比较高的多媒体通信。 广播通信、多播通信。 2、TCP: (1) TCP,控制传输协议 ,和UDP的差别很大, 它充分实现了数据传输时的各种控制功能 : 针对发送端发出的数据包的确认应答信号ACK、、、针对数据包丢失或者出现定时器超时的重发机制、、、针对数据包到达接收端主机顺序乱掉的顺序控制、针对高效传输数据包的流动窗口控制、、、针对避免网络拥堵时候的流量控制、、

TCP的三次握手与四次挥手理解及面试题

て烟熏妆下的殇ゞ 提交于 2019-12-01 19:50:16
TCP的三次握手与四次挥手理解及面试题 1. 基本概念 2. 三次握手过程理解 3. 四次挥手过程理解 4. 常见面试题 1. 基本概念 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。 确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效 同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。 终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接 注意:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。 字段含义 : URG 紧急指针是否有效

TCP三次握手与四次挥手

北战南征 提交于 2019-12-01 19:28:07
TCP三次握手与四次挥手 1、TCP通信 TCP是面向连接的协议。运输连接是用来传送TCP报文的,而运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。可以类比传统的电话网,拨通号码,开始通话,挂断电话。 用户进程和服务器进程 需要完成一次通信都需要完成三个阶段: 1 连接建立 2 数据传送 3 连接释放 TCP协议中,主动发起请求的一端称为客户端,被动连接的一端称为服务端。由于全双工,不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据。 2、序列号、确认号及标志位等 1 序列号seq: 占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生,给字节编上序号后,就给每一个报文段指派一个序号,序列号seq就是这个报文段中的第一个字节的数据编号。 2 确认号ack: 占4个字节,期待收到对方下一个报文段的第一个数据字节的序号,序列号表示报文段携带数据的第一个字节的编号,而确认号指的是期望接受到下一个字节的编号,因此挡墙报文段最后一个字节的编号+1即是确认号。 3 确认ACK: 占1个比特位,仅当ACK=1,确认号字段才有效。ACK=0,确认号无效。 4 同步SYN: 连接建立时用于同步序号。当SYN=1,ACK=0表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使用SYN=1,ACK=1.因此,SYN