握手协议

可靠的TCP连接为何是三次握手和四次挥手

我们两清 提交于 2019-11-27 03:26:31
首先,咱们先来熟悉下经典的tcp/ip模型。 tcp/ip 模型为了方便使用,将osi七层模型划分成了四层,分别为网络接口层,网络层,传输层,应用层。 他们作用分别为: 1)网络接口层:主要作用是将ip地址和计算机的物理地址互相绑定,并实现二进制流和计算机硬件的高低电位的转换。 2)网络层:主要作用是通过ip地址将两台物理机链接起来,实现ip数据包的传输; 3)传输层:使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmission control protocol)和用户数据报协议UDP(user datagram protocol)。; 4)应用层:负责传送各种最终形态的数据,是直接与用户打交道的层,典型协议是HTTP、FTP等。 今天咱们主要来看下tcp模型中主要的tcp协议。 计算机通信中,要想实现可靠的网络通信,tcp协议是必不可少的一环。那么tcp协议是如何实现可靠通信的呢?这就首先要从经典的三次握手谈起。 三次握手即客户端与服务器至少(网络超时的话会多于三个)要发送三个数据包来建立tcp连接。 第一次握手:客户端发送建立连接数据包,发送之后状态变成SYN_SENT,数据包内容里面SYN标志位为1以及一个随机的序列号seq,假设值为j。 第二次握手:服务器收到请求之后,发送数据包给客户端

RS232、RS485、RS422、串口与握手基础知识详细介绍

心不动则不痛 提交于 2019-11-27 02:33:11
一、RS232基础知识   PC上的通讯接口之一,由电子工业协会(ElectronicIndustriesAssocia TI on,EIA)所制定的异步传输标准接口。通常RS-232接口以9个引脚(DB-9)或是25个引脚(DB-25)的型态出现,一般个人计算机上会有两组RS-232接口,分别称为COM1和COM2。在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。   RS-232-C标准规定的数据传输速率为50、75、100、150、300、600、1200、2400、4800、9600、19200、38400波特。RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。具体通讯距离还与通信速率有关,例如,在9600pbs时,普通双绞屏蔽线时,距离可达30-35米。 RS232的特点:   (1)接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。   (2)传输速率较低,在异步传输时,波特率为20Kbps

TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)

自闭症网瘾萝莉.ら 提交于 2019-11-26 16:53:38
TCP的状态 (SYN, FIN, ACK, PSH, RST, URG) 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义是: SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DATA数据传输, RST表示连接重置。 其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应, 如果只是单个的一个SYN,它表示的只是建立连接。 TCP的几次握手就是通过这样的ACK表现出来的。 但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。 RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。 一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。 PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。 TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。 概念补充-TCP三次握手: TCP(Transmission Control Protocol)传输控制协议

深度好文|TCP连接的状态详解以及故障排查,技术人员必备技能

限于喜欢 提交于 2019-11-26 16:42:48
我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。 1、TCP状态 了解TCP之前,先了解几个命令: linux查看tcp的状态命令 : 1) netstat -nat #查看TCP各个状态的数量 2)lsof -i:port #可以检测到打开套接字的状况 3) sar -n SOCK #查看tcp创建的连接数 4) tcpdump -iany tcp port 9000 #对tcp端口为9000的进行抓包 网络测试常用命令; 1.ping:检测网络连接的正常与否,主要是测试延时、抖动、丢包率。 但是很多服务器为了防止攻击,一般会关闭对ping的响应。所以ping一般作为测试连通性使用。 ping命令后,会接收到对方发送的回馈信息,其中记录着对方的IP地址和TTL。TTL是该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。 TTL是IPv4包头的一个8 bit字段。例如IP包在服务器中发送前设置的TTL是64,你使用ping命令后,得到服务器反馈的信息,其中的TTL为56,说明途中一共经过了8道路由器的转发,每经过一个路由,TTL减1。 2.traceroute:raceroute 跟踪数据包到达网络主机所经过的路由工具 traceroute hostname 3.pathping:是一个路由跟踪工具,它将 ping 和 tracert

通过JAVA 代码来看TCP的3次握手和4次挥手

风流意气都作罢 提交于 2019-11-26 00:29:27
之前一直没弄明白我使用JAVA API进行socket编程的时候,到底调用哪个API的时候,TCP底层进行了3次握手,调用哪个API的时候,TCP底层进行了4次握手。网上查阅一番资料后没找到想要的,于是自己利用周末时间搞搞明白,记录一下,下次好查阅! 阅读提前 1.TCP3次握手和4次挥手理解 传送门: TCP3次握手连接协议和4次握手断开连接协议 TCP三次握手连接及四次挥手断开过程 理解TCP三次握手/四次断开的必要性 2.NIO(IO)相关知识、socket相关知识 此次使用NIO 做例子(原阻塞方式同理) 先上代码 服务端代码 package com.mtl.day20180825; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Iterator; import java.util.Set

TCP的三次握手和四次挥手

百般思念 提交于 2019-11-26 00:28:13
相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。 因此在这里详细解释一下这两个过程。 TCP三次握手 所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。 第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。 第二次握手: 服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。 第三次握手. 客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方

TCP三次握手和四次挥手的全过程

六眼飞鱼酱① 提交于 2019-11-26 00:27:55
三次握手:     第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;      第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;      第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。   ps:各个标志位,见(https://blog.csdn.net/qq_30757161/article/details/100103703)      握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。 四次挥手   由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。    1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部

三次握手和四次挥手

℡╲_俬逩灬. 提交于 2019-11-25 16:50:58
三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。 见过比较典型的面试场景是这样的: 面试官:请介绍下三次握手 求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了。 面试官:然后呢? 求职者:这就是三次握手的过程,很简单的。 面试官:。。。。。。 (番外篇:一首凉凉送给你) 记住猿人谷一句话:面试时越简单的问题,一般就是隐藏着比较大的坑,一般都是需要将问题扩展的。上面求职者的回答不对吗?当然对,但距离面试官的期望可能还有点距离。 希望大家能带着如下问题进行阅读,收获会更大。 请画出三次握手和四次挥手的示意图 为什么连接的时候是三次握手? 什么是半连接队列? ISN(Initial Sequence Number)是固定的吗? 三次握手过程中可以携带数据吗? 如果第三次握手丢失了,客户端服务端会如何处理? SYN攻击是什么? 挥手为什么需要四次? 四次挥手释放连接时,等待2MSL的意义? 三次握手 三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包