序列号

TCP协议与UDP协议的区别

时光怂恿深爱的人放手 提交于 2019-12-23 16:12:28
首先咱们弄清楚, TCP 协议和 UCP 协议与 TCP/IP 协议的联系,很多人犯糊涂了,一直都是说 TCP/IP 协议与 UDP 协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP 协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。 TCP/IP协议集包括应用层,传输层,网络层,网络访问层。 其中应用层包括: 超文本传输协议(HTTP):万维网的基本协议. 文件传输(TFTP简单文件传输协议): 远程登录(Telnet),提供远程访问其它主机功能,它允许用户登录 internet主机,并在这台主机上执行命令. 网络管理(SNMP简单网络管理协议),该协议提供了监控网络设备的方法,以及配置管理,统计信息收集,性能管理及安全管理等. 域名系统(DNS),该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址. 其次网络层包括: Internet协议(IP) Internet控制信息协议(ICMP) 地址解析协议(ARP) 反向地址解析协议(RARP) 最后说网络访问层:网络访问层又称作主机到网络层(host-to-network).网络访问层的功能包括IP地址与物理地址硬件的映射,以及将IP封装成帧.基于不同硬件类型的网络接口

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

为君一笑 提交于 2019-12-20 06:45:54
一. 须知 序列号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表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接 PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号 二 . 三次握手 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号

分布式ID生成方法

痞子三分冷 提交于 2019-12-17 09:12:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:tiezi-id 这个记录标识往往就是数据库中的唯一主键,数据库上会建立聚集索引(cluster index),即在物理存储上以这个字段排序。 这个记录标识上的查询,往往又有分页或者排序的业务需求,例如: (1)拉取最新的一页消息:selectmessage-id/ order by time/ limit 100 (2)拉取最新的一页订单:selectorder-id/ order by time/ limit 100 (3)拉取最新的一页帖子:selecttiezi-id/ order by time/ limit 100 所以往往要有一个time字段,并且在time字段上建立普通索引(non-cluster index)。 我们都知道普通索引存储的是实际记录的指针,其访问效率会比聚集索引慢,如果记录标识在生成时能够基本按照时间有序,则可以省去这个time字段的索引查询: select message-id/ (order by message-id)/limit 100 再次强调,能这么做的前提是,message-id的生成基本是趋势时间递增的。

TCP协议可靠性保证

泪湿孤枕 提交于 2019-12-17 05:46:47
TCP保证可靠性主要依靠下面7种机制: 1、检验和 TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分,但是UDP的检验和字段为可选的,而TCP中是必须有的。计算方法为:在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用相同的方法进行计算,如最终结果为检验字段所有位是全1则正确(UDP中为0是正确),否则存在错误。 2、序列号 TCP将每个字节的数据都进行了编号,这就是序列号。 序列号的作用: 保证可靠性(当接收到的数据总少了某个序号的数据时,能马上知道) 保证数据的按序到达 提高效率,可实现多次发送,一次确认 去除重复数据数据传输过程中的确认应答处理、重发控制以及重复控制等功能都可以通过序列号来实现 3、确认应答机制(ACK) TCP通过确认应答机制实现可靠的数据传输。在TCP的首部中有一个标志位——ACK,此标志位表示确认号是否有效。接收方对于按序到达的数据会进行确认,当标志位ACK=1时确认首部的确认字段有效。进行确认时,确认字段值表示这个值之前的数据都已经按序到达了。而发送方如果收到了已发送的数据的确认报文,则继续传输下一部分数据;而如果等待了一定时间还没有收到确认报文就会启动重传机制。 正常情况下的应答机制: 4、超时重传机制 当报文发出后在一定的时间内未收到接收方的确认

oracle中如何创建表的自增ID(通过序列)

ε祈祈猫儿з 提交于 2019-12-17 04:21:38
1、什么是序列呢? 序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。一个序列的值是由特别的Oracle程序自动生成,因而序列避免了在运用层实现序列而引起的性能瓶颈。 Oracle序列允许同时生成多个序列号,而每一个序列号是唯一的。 当一个序列号生成时,序列是递增,独立于事务的提交或回滚。容许设计缺省序列,不需指定任何子句。该序列为上升序列 ,由1开始,增量为1,没有上限。 2、创建/修改序列的语法 --创建序列的语法 -- create sequence [user.]sequence_name [increment by n] [start with n] [maxvalue n | nomaxvalue] [minvalue n | nominvalue]; --修改序列的语法-- alter sequence [user.]sequence_name [increment by n] [maxvalue n | nomaxvalue] [minvalue n | nominvalue];    3、序列参数说明 INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。 START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序

Libra教程之:执行Transactions

丶灬走出姿态 提交于 2019-12-17 00:54:52
文章目录 Transactions是什么 Transactions运行的基础条件 Transactions的结构 执行Transactions Transactions是什么 我们讲到了Libra是一个分布式账本,存储着账本状态,从账本状态里面,我们可以获取现在每一个账户的资金情况和存储的相应资源。 而这个账本状态就是通过执行Transactions来进行改变的。 用户定义的Transactions是通过Move来编写的,目前来说Libra处于早期版本,只有有限的功能开放给Move语言(不如用户不能自定义资源类型等),但是随着Libra的发展,我相信Move语言将会得到更多的功能支持。 Transactions运行的基础条件 在Libra中,我们运行Transactions,这里面包含着如下几个基础条件: 账本的初始状态。所有的验证者节点都必须接受账本的初始状态,并在该初始状态之上进行后续的验证操作。 在账本的初始状态中,我们需要定义Libra的核心组件(比如: 账户的逻辑,交易的验证,验证者的选择,Libra币等),这些核心组件都是以Move modules的形式存在的。 同样的,要保证交易的执行,我们还需要一个初始账户,和初始的验证节点,这些都是需要在初始状态中定义。 为了简便起见,我们假设账本的初始状态为空,然后通过执行一个Transaction

流水线机制、滑动窗口协议、GBN、SR

老子叫甜甜 提交于 2019-12-16 20:59:14
一、滑动窗口协议 为了解决停等操作的性能问题(发了一个分组之后一直等到确认了这个分组才发下一个),推出了流水线机制,提供资源利用率。就是允许发送方在收到对方的ACK前,发送多个分组 其中窗口是一个范围管理发出去还没确认的分组,随着不断传输,这个窗口不断滑动,名称的由来。窗口左端的序号收到了ACK,就可以往右滑动了。 滑动窗口协议有GBN、SR 二、滑动窗口协议的实现:GBN 1.分组头部包含序列号 2.窗口如下,大小为N,最多允许N个分组未确认 3.ACK(n),则表示确认从开始到n(包含n)的序列号全部正确接收 4.会空中在传的分组设置一个Timer计时器,处理超时,如果收到了timeout(n)事件,那么会重传的是n以及n以后的所有分组(尽管后面的可能已经收到了,这就是回退,回退到n开始传,GBN) 5.接收方会有一个期望序列号,如果收到的不是期望的分组,直接丢弃 三、滑动窗口协议的实现:SR(选择重传) GBN缺陷,累积确认机制导致回退到N,重复传了很多。解决这个。 1.对每个分组分别确认,不再只接收期望的,接到不期望的,就先缓存(设置缓存机制),接到期望的才交付上层 2.发送方只需要重传那些没收到ACK的分组了 3.产生了接收方窗口(GBN只有发送方窗口),用来缓存,现在有两窗口了 4.序列号的位数是K的话,那么得满足 接收方窗口大小N+发送方N<= 2的k次方

TCP的三次握手与四次挥手理解及面试题(很全面)

大兔子大兔子 提交于 2019-12-16 17:13:02
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_38950316/article/details/81087809 本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问 序列号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表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接

HTTP请求总结分享

孤街醉人 提交于 2019-12-14 04:01:03
文章目录 1.HTTP请求简介 1.1 什么是HTTP请求 1.2 HTTP请求的特点 1.3 HTTP的请求方式 1.4 HTTP请求报文和响应报文 1.4.1 HTTP请求报文 1.4.2 HTTP响应报文 2.GET请求和POST请求的区别 3.三次握手和四次挥手 3.1 TCP报文字段解析 3.2 三次握手 3.2.1 三次握手模拟图 3.2.2 三次握手流程 3.2.3 为什么是三次 3.2.4 建立连接后故障处理机制 3.3 四次挥手 3.3.1 四次挥手模拟图 3.2.2 四次挥手流程 3.3.3 断开连接为什么要四次挥手 3.3.4 最大报文段生存时间2MSL用途 4.HTTP常见状态码 1.HTTP请求简介 1.1 什么是HTTP请求 通俗来讲,他就是计算机通过网络进行通信的规则,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据。目前任何终端(手机,笔记本电脑。。)之间进行任何一种通信都必须按照Http协议进行,否则无法连接。 其实,关键字就是三个:tcp/ip、一种网络应用层协议、超文本传输协议。 1.2 HTTP请求的特点 支持客户/服务器模式 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单

三次握手与四次挥手的详解

喜欢而已 提交于 2019-12-14 01:37:44
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握手的过程: 1、第一次握手:客户端给服务器发送一个 SYN 报文。 2、第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。 3、第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。 4、服务器收到 ACK 报文之后,三次握手建立完成。 作用是为了确认双方的接收与发送能力是否正常。 这里我顺便解释一下为啥只有三次握手才能确认双方的接受与发送能力是否正常,而两次却不可以: 第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。 第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。 第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常