序列号

面试题总结(一)、TCP协议

一笑奈何 提交于 2020-02-10 03:57:21
声明:本文主要探讨当TCP协议出现在面试笔试场合可能会涉及的问题,每一个知识点讨论力求简洁,便于记忆,但讨论深度有限,如要深入研究可点击参考链接,希望对正在找工作的同学有点帮助。 一、TCP协议简介 一般问到TCP协议的时候 最常见的是TCP连接建立和断开的过程,也就是三次握手和四次挥手,两张图足矣。 1.1 三次握手 1.2 四次挥手 二、常见面试题 2.1 TCP连接阶段 2.1.1 发送序号和确认序号问题 例: TCP建立连接的过程采用三次握手,已知第三次握手报文的发送序列号为1000,确认序列号为2000,请问第二次握手报文的发送序列号和确认序列号分别为? 答:看答案时请参考上面TCP连接建立的图。 客户端:发送X 服务端:发送Y, 确认X+1 客户端:发送X+1(1000),确认Y+1(2000) 可以反推第二次为1999,确认1000 2.1.2 SYN Flood 攻击原理及防御 SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。 原理: 问题出在TCP连接的三次握手中,恶意的攻击者大量发送SYN报文,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接

tcp拥塞控制(摘自维基百科)

我的梦境 提交于 2020-02-01 03:19:13
TCP使用多种拥塞控制策略来避免雪崩式拥塞。TCP会为每条连接维护一个“拥塞窗口”来限制可能在端对端间传输的未确认分组总数量。这类似TCP流量控制机制中使用的滑动窗口。TCP在一个连接初始化或超时后使用一种“慢启动”机制来增加拥塞窗口的大小。[6]它的起始值一般为最大分段大小(Maximum segment size,MSS)的两倍,虽然名为“慢启动”,初始值也相当低,但其增长极快:当每个分段得到确认时,拥塞窗口会增加一个MSS,使得在每次往返时间(round-trip time,RTT)内拥塞窗口能高效地双倍增长。 当拥塞窗口超过慢启动阈值(ssthresh)时,算法就会进入一个名为“拥塞避免”的阶段。[注 1]在拥塞避免阶段,只要未收到重复确认,拥塞窗口则在每次往返时间内线性增加一个MSS大小。 在TCP中,拥塞窗口(congestion window)是任何时刻内确定能被发送出去的字节数的控制因素之一,是阻止发送方至接收方之间的链路变得拥塞的手段。他是由发送方维护,通过估计链路的拥塞程度计算出来的,与由接收方维护的接收窗口大小并不冲突。 当一条连接创建后,每个主机独立维护一个拥塞窗口并设置值为连接所能承受的MSS的最小倍数,之后的变化依靠线增积减机制来控制,这意味如果所有分段到达接收方和确认包准时地回到发送方,拥塞窗口会增加一定数量。该窗口会保持指数增大

Oracle中获取连续的序列号范围的SQL (二)

与世无争的帅哥 提交于 2020-01-31 01:20:36
方案3的思路比较值得学习,我们将层层剖析它的结构: 1:对每一条记录找它的前一行 所谓连续的序列号就是看相同格式的情况下前一行记录与当前行的记录序号的值是否相差为1: 如果相差为1,则说明两个序列号是连续的; 如果不为1,则两个序列号不是连续的 select numFormat, lag(code, 1) over(partition by numFormat order by code) previousCode, code, max(code) over(partition by numFormat) maxn from inventory; 2:过滤掉中间连续序列号。 这里通过比较当前序列号与前一行的序列号相减是非相差为1,相差为1将被过滤掉;相差不为1比如2或者说有null值则不被过滤。 select * from( select numFormat, lag(code, 1) over(partition by numFormat order by code) previousCode, code, max(code) over(partition by numFormat) maxn from inventory ) where nvl(code-previousCode-1,1) <> 0 ; 3:把当前行的code列作为 startNum

从tcp到netty(一)

亡梦爱人 提交于 2020-01-30 14:25:39
  发现自己近一年有些毛病,自己也算是研习了不少的源代码,看了不少的技术书籍,但是自己就是记忆力不行,总是过段时间就会忘记,忘记之后还得从头开始啃源码、啃书籍。而且有些重要技术点也会遗忘,导致再学习的时候发现自己又回到了起点!我总结为,就是自己近一年期间犯懒,没有再写一下博客,技能点不能很好的再回顾!   趁着发现自己的问题,同时自己也在做前后端 rpc分离实践,现在将之前研习netty的结果再总结出来,写到博客上!   首先,我们要确定 java中的netty用来做什么的?具体的工作模式优势不解释,网上能找一大堆,主要讲它通信这块的rpc,高效稳定的协议栈绕不开 tcp/ip 协议!    本来是不想记录 tcp/ip的,这个实在是没有太多好说的,但是也发现虽然自己明白,有时候却也是会遗漏要点知识,所以也还是记录一下吧!   似乎作为上层程序员只需要了解 tcp的握手与挥手情况即可!   首先要了解 tcp/ip的头部结构 16位源端端口 | 16位目标端端口 32位序列号(发送端确认信息) 32位确认序号(服务端确认) 4位偏移量(每个数字表示1个4字节,所以最大表示15个4字节,也就是60字节)---- 6位保留位(记不太清了) | 标志位:包括 6种报文段 urg、ack、rst、syn、fin、psh 16位校验和 | 16位紧急指针 16位窗口大小

TCP三次握手建立过程

我的梦境 提交于 2020-01-29 16:09:11
大家都知道,计算机与网络设备要相互通信,双方就必须基于相同的方法,不同的硬件、操作系统间的通信,这一切都需要一种规则。我们把这种规则称为协议。 TCP/IP是互联网中相关各类协议族的总称。TCP/IP是指TCP和IP这两种协议。TCP/IP是在IP协议的通信过程中使用到的协议族的统称。 附:计算机访问互联网的过程 可以看到,在利用TCP/IP协议族访问网络时,会通过分层的顺序与对方进行通信。 顺序: 发送端:应用层(HTTP客户端)→传输层(TCP)→网络层(IP)→数据链路层 服务器端:数据链路层→网络层(IP)→传输层(TCP)→应用层(HTTP服务器端) TCP (Transmission Control Protocol 传输控制协议 ) 是一种面向连接的、可靠的、基于字节流的传输层通信协议 。 好了,现在我们回归正题,TCP三次握手的具体过程是怎样的呢 由于 TCP 只存在请求和响应,请求和响应都是数据包。为了更好的理解TCP三次握手的过程,我们需要先了解TCP的报文 其中比较重要的字段有: 序号(sequence number):Seq 序号,占 32 位,用来标识从 TCP 源端向目的端发送的字节流,发起方发送数据时对此进行标记。 确认号(acknowledgement number):Ack 序号,占 32 位,只有 ACK 标志位为 1 时,确认序号字段才有效

TCP协议的客户端与服务器的通信过程

廉价感情. 提交于 2020-01-27 22:52:20
使用TCP时,客户端与服务器端的通信流程 服务器初始化 1)调用socket,创建文件描述符fd 2) 调用bind将fd与服务器的IP与PORT绑定 3)调用listen将套接字设为监听模式,准备接收客户端连接请求 4)调用accept等待并接收客户端的连接请求,建立好TCP连接后,该函数会返回一个新的已连接套接字newfd 建立连接 1)客户端调用socket创建文件描述符 2)调用connect,向服务器发送连接请求 3)connect会发送一个请求SYN段并阻塞等待服务器应答(第一次握手) 4)服务器收到SYN,会给客户端发送一个确认应答ACK,同时发送一个请求(SYN)建立连接(第二次握手) 5)客户端收到服务器发的SYN+ACK段,表明客户端连接已建立成功,进入已连接状态。客户端再向服务器 发送一个ACK段,服务器收到后则服务器连接成功。 数据传输 1)连接建立成功后,在同一连接、同一时刻,通信双方可同时写数据(全双工) 2)服务器端从accept()返回后调用read()开始读数据,若没有数据则阻塞等待 3)客户端调用write()向服务器发送数据请求,客户端收到之后调用read()处理请求,此过程服务器调用read()阻塞等待 4)服务器调用write()将处理好的请求发送给客户端,再次调用read()等待下一个请求 5)客户端收到后从read()返回

Oracle -- 序列

北城以北 提交于 2020-01-27 16:37:55
序列 序列(Sequence)是用来生成连续的整数数据的对象。序列常常用来作为主键中增长列,序列中的可以升序生成,也可以降序生成。 创建序列的语法是: 语法结构:创建序列 CREATE SEQUENCE sequence_name [ START WITH num ] [ INCREMENT BY increment ] [ MAXVALUE num | NOMAXVALUE ] [ MINVALUE num | NOMINVALUE ] [ CYCLE | NOCYCLE ] [ CACHE num | NOCACHE ] 语法解析: ①START WITH:从某一个整数开始,升序默认值是1,降序默认值是-1。 ②INCREMENT BY:增长数。如果是正数则升序生成,如果是负数则降序生成。升序默认值是1,降序默认值是-1。 ③MAXVALUE:指最大值。 ④NOMAXVALUE:这是最大值的默认选项,升序的最大值是:1027,降序默认值是-1。 ⑤MINVALUE:指最小值。 ⑥NOMINVALUE:这是默认值选项,升序默认值是1,降序默认值是-1026。 ⑦CYCLE:表示如果升序达到最大值后,从最小值重新开始;如果是降序序列,达到最小值后,从最大值重新开始。 ⑧NOCYCLE:表示不重新开始,序列升序达到最大值、降序达到最小值后就报错。默认NOCYCLE。 ⑨CACHE

TCP的三次握手和四次挥手

折月煮酒 提交于 2020-01-20 04:18:38
tcp是一种传输层通信协议,一个TCP连接通常分为三个阶段:连接,数据传输和关闭,通过三次握手来建立一个连接,四次挥手断开一个连接 目录 TCP报文头部介绍 三次握手建立连接 四次挥手断开连接 TCP的特点及使用场景 TCP报文头部介绍 TCP报文头部由以下几部分构成: 源端口号 目标端口号 序列号 确认号 头部长度 六个标志位 窗口大小 校验和 紧急指针 TCP头部选项 源端口号(16位) 标示报文的来源(客户端产生临时端口号) 目标端口号(16位) 标示报文的目的地(服务端指定端口号) 序列号(32位) 保证服务端接收到所有数据后能按正确顺序拼接起来,该序列号是由系统初始化的一个随机值ISN,一个报文的序列号=ISN+这个报文携带的数据的第一个字节的偏移量。 例子:要发5个报文,第一个报文的第一个字节的偏移量为0,序列号就是ISA+0;第一个报文携带的数据大小是1kb(1024),所以第二个报文的第一个字节的偏移量就是1024,序列号就是ISA+1024,以此类推。 (注意实际上三次握手时是会占据一个序列号的,所以实际上正式发送数据时第一个报文的序列号是ISA+1+0,这里为了方便理解就不考虑三次握手时占据的那个序列号)。 确认号(32位) 服务端收到客户端发来的报文后需要给客户端回复一个ack数据包,告诉客户端数据已经收到。回复报文的确认号=服务端收到的报文的序列号+1。

网络 TCP/IP

你说的曾经没有我的故事 提交于 2020-01-19 01:50:27
TCP/IP 基础知识 分组技术 可以让多个用户共享一条线路 tcp/ip 代表什么 利用 IP 进行通信时所必须用到的协议群的统称 RFC 协议的说明,STD 管理 RFC 互联网结构 互联网由很多较小范围的网络组成,每个小网由 骨干网 和 末端网 组成 TCP/IP 协议分层模型 物理层 将二进制的0和1和电压高低,光的闪灭和电波的强弱信号进行转换 链路层 代表驱动 网络层 使用 IP 协议,IP 协议基于 IP 转发分包数据 IP 协议是个不可靠协议,不会重发 IP 协议发送失败会使用ICMP 协议通知失败 ARP 解析 IP 中的 MAC 地址,MAC 地址由网卡出厂提供 IP 还隐含链路层的功能,不管双方底层的链路层是啥,都能通信 传输层 通用的 TCP 和 UDP 协议 TCP 协议面向有连接,能正确处理丢包,传输顺序错乱的问题,但是为了建立与断开连接,需要至少7次的发包收包,资源浪费 UDP 面向无连接,不管对方有没有收到,如果要得到通知,需要通过应用层 会话层 以上分层 TCP/IP 分层中,会话层,表示层,应用层集中在一起 网络管理通过 SNMP 协议 TCP/IP 分层模型与通信示例 发包过程 表示层转码,会话层决定何时建立连接,传输层负责建立连接,断开连接和发送数据,保证数据能顺利发送至对端。TCP 协议(传输层)在数据前附加一个首部

TCP的三次握手与四次挥手(详解+动图)

梦想的初衷 提交于 2020-01-18 05:05:01
背景描述 通过上一篇中网络模型中的 IP层的介绍 ,我们知道网络层,可以实现两个主机之间的通信。但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据。IP协议虽然能把数据报文送到目的主机, 但是并没有交付给主机的具体应用进程 。而 端到端的通信 才应该是应用进程之间的通信。 UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。虽然UDP不提供可靠交付,但是正是因为这样,省去和很多的开销,使得它的速度比较快,比如一些对实时性要求较高的服务,就常常使用的是UDP。对应的应用层的协议主要有 DNS,TFTP,DHCP,SNMP,NFS 等。 TCP,提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。因此TCP是一种可靠的的运输服务,但是正因为这样,不可避免的增加了许多的开销,比如确认,流量控制等。对应的应用层的协议主要有 SMTP,TELNET,HTTP,FTP 等。 常用的熟知端口号 应用程序 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL 熟知端口 21,20 69 23 25 53 80 22 3306 传输层协议 TCP UDP TCP TCP UDP TCP TCP TCP TCP的概述 TCP把连接作为最基本的对象