网络连接的三次握手及四次握手

网络连接的三次握手及四次握手

  一个数据从一台主机传输到另一台主机,看似平淡无奇,但是稍微了解就知道其底层其实是非常复杂的,下面我们说一下OSI(Open System Interconnection)开放系统互连,一个数据要经过7个过程的层层打包,然后到对方电脑后再层层解包来完成。

    第一层:物理层(physical)也是最底层了,把打包好的数据通过二进制进行传输。为启动、维护以及关闭物理链定义了电气规范、机械规范、过程规范和功能规范。

    第二层:数据链路层(data link)访问介质,定义如何格式化数据以便进行传输以及如何控制对网络的访问;支持错误检测。

    第三层:网络层(network)数据传输(路由器数据包;选择传递数据的最佳路径;支持逻辑寻址和路径选择)

    第四层:传输层(transport)传输问题(确保数据传输的可靠性;建立、维护和终止虚拟电路;通过错误检测和恢复;信息流控制来保障可靠性)

    第五层:会话层(session)主机间建立、管理和终止在应用程序之间会话

    第六层:表示层(presention)数据表示(确保接收系统可以读出该数据;格式化数据;构建数据;协商用于应用层的数据传输语法;提供加密)

    第七层:应用层(application)为应用进程(例如,电子邮件、文件传输和终端仿真)提供昂罗服务;提供用户身份验证。

  PDU: (Protocol Data Unit)协议数据单元是指对等层次之间传递的数据单位;物理层的PDU是数数据位(bit);在数据链路层是数据帧(frame);在网络层是数据包(packet);在传输层是数据段(segment);在其它更高层次是消息(message)。

  集线器属于OSI的第一层物理层设备,而网桥属于OSI的第二层数据链路层设备,从工作方式来看,集线器是一种广播模式,所有端口在一个冲突域里面,而网桥可以通过端口隔离冲突。

  Hub是所有共享总线和共享宽带。网桥的每个端口占一个宽带。

  路由器是为了实现路由分隔广播域;选择路由表中到达目标最好的路径;维护和检查路由信息;连接广域网的作用。

  路由就是把一个数据包从一个设备发送到不同网络的另一台设备上去,当然这些工作依靠路由器来完成。路由器只关心网络状态和选择最佳路径,路由的实现依靠路由器中的路由表来完成。

TCP

  TCP总共定义为四层,工作在传输层

TCP包头

  源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,
而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标
端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,
可推算计算机的端口个数为2^16个

  序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的
字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个
字节,就会出现序列号回绕,再次从 0 开始

  确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。
也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据
的编号为此确认号

  数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可
变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数
据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为
计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节

  URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent
pointer)只有当URG=1时才有效

  ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。
TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段

  PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空
间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序
不将接收到的数据读走,就会一直停留在TCP接收缓冲区中

  RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必
须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,
带RST标志的TCP报文段称为复位报文段

  SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连
接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求
建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文
段称为同步报文段

  FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:
“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段

三次握手

  开始客户端和服务器端都是处于关闭状态,首先客户端首先进行第一次握手“SYN=1,seq=x”;如果服务器接收到了,它要回复点东西给客户端好让它知道自己收到它的信息了,那就是第二次握手“SYN=1,ACK=1,seq=y,ack=x+1”。最后客户端收到服务端的信息后再发送自己的请求来实现第三次握手“ACK=1,seq=x+1,ack=y+1".然后客户端和服务器端就可以进行正常通信了。(第一次握手肯定是客户端发送的,服务器不会主动握手客户端的哦)

四次挥手

  首先来说挥手可能不是四次,可能是三次也可能根本来不及握手···。因为终止连接可以是客户端提出的也可以是服务器端提出的,更可以是同时提出。当然也有种情况那就是他俩谁也没想终连接受外界影响终止了,例如停电···。那这里我们之说正常一点的 ,客户端主动提出终止连接。首先客户端第一次挥手“FIN=1,seq=u”发送后客户端进入等待终止1的模式。服务器收到后先把没传送完的数据再传送一波进行第二次挥手“ACK=1,seq=v,ack=u+1”收到这个信息收客户端继续等待服务器端发送信息传输完成的信息并且客户进入等待终止2的状态。服务器发送了那条信息后通知应用进程传输完成立即关闭然后进行第三次握手“FIN=1,ACK=1,seq=w,ack=u+1”然后进入等待客户端最后确认的命令。当客户端收到这条信息后然后立马确认关闭并且发送了一条信息给服务器进行了第四次握手“ACK=1,seq=u+1,ack=w+1”。OK到此为止完成了四次挥手双方断开了链接变成了陌路人。

  

原文地址:https://blog.51cto.com/14322562/2405595

时间: 2024-08-04 04:23:35

网络连接的三次握手及四次握手的相关文章

三次握手、四次握手、backlog

TCP:三次握手.四次握手.backlog及其他 TCP是什么 首先看一下OSI七层模型: 然后数据从应用层发下来,会在每一层都加上头部信息进行封装,然后再发送到数据接收端,这个基本的流程中每个数据都会经过数据的封装和解封的过程,流程如下图所示: 在OSI七层模型中,每一层的作用和对应的协议如下图所示: 说回TCP,简单说TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的.可靠的.基于ip的传输层协议. TCP协议头部格式 要学习TCP协议,首先

抓包分析TCP的三次握手和四次握手

问题描写叙述: 在上一篇<怎样对Android设备进行抓包>中提到了,server的开发者须要我bug重现然后提供抓包给他们分析.所以抓好包自己也试着分析了一下.发现里面全是一些TCP协议和HTTP协议.所以要想进行抓包分析,必须先了解TCP的原理.这里介绍了TCP的建立连接的三次握手和断开连接的四次握手. 问题分析: 1.TCP建立连接的三次握手 1.1前言:介绍三次握手之前,先介绍TCP层的几个FLAGS字段,这个字段有例如以下的几种标示 SYN表示建立连接, FIN表示关闭连接. ACK

[转]VMware Workstation网络连接的三种模式

经常要使用VMWare Workstation来在本地测试不同的操作系统,以前也搞不清楚网络连接三种模式,最近看了几篇文章才算明白.现总结如下: 1. VMware Workstation的虚拟网络组件 虚拟<网卡/网络适配器>:见下图.安装一个虚拟PC时自动安装一块虚拟<网卡/网络适配器>,可添加多块虚拟网卡. 虚拟交换机:见下图.安装VM时就自动安装了10台虚拟交换机. 虚拟网桥:只在虚拟网卡连接到VMnet0 (default Bridged)虚拟交换机上才应用虚拟网桥. 

三次握手,四次握手

[注意]中断连接端可以是Client端,也可以是Server端. 假设Client端发起中断连接请求,也就是发送FIN报文.Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据.所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息".这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文.当

TCP/IP协议三次握手与四次握手流程解析

原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图 上图中有几个字段需要重点介绍下:   (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.   (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.   (3)标志位:共6个,即URG.ACK.PSH.RST

TCP/IP的三次握手和四次握手 Dos攻击

TCP连接的状态图 TCP建立连接的三次握手过程,以及关闭连接的四次握手过程 贴一个telnet建立连接,断开连接的使用wireshark捕获的packet截图. 1.建立连接协议(三次握手) (1)客户 端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1. (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志.因此它表示对刚才客户端SYN报文的回应:同时又标志SYN给客户端,询问客户端是否准备好进行数据通 讯. (3) 客户必须再次

TCP三次握手和四次握手

刚刚学完这个知识,感觉很重要,在此记录下来,参考资料,<计算机网络> 谢希仁 第六版 TCP报文格式 注意:在理解三次握手之前必须理解首部中的这几个字段的含义 首部的重要字段 序号(seq):TCP连接中传送的字节流中的每一个字节都按顺序编号,首部中的序号字段的意思是本报文段所发送的数据的第一个字节的编号 确认号(ack):期望收到对方下一个报文段的第一个数据字节的编号,也就是说确认号与发送方下一次发送过来的报文段的序号(seq)相等. 若确认号是N,则表示我方已正确收到了N-1为止的所有数据

TCP/IP 三次握手和四次握手

三次握手建立连接: 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态: 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手. 握手过程中传送的包里不包含数据,三次握手

TCP/IP协议三次握手与四次握手流程解析(转)

一.TCP报文格式 下面是TCP报文格式图: 上图中有几个字段需要重点介绍下:  (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.  (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.  (3)标志位:共6个,即URG.ACK.PSH.RST.SYN.FIN等,具体含义如下:  (A)URG:紧急指针(urgent pointer)有效.  (B)ACK:确认序号有效.  (C)PSH: