TCP三次握手和四次挥手

TCP三次握手

TCP三次握手和四次挥手

有两台机器,A是客户端(主动发起请求的人),B是服务器端(被动接受请求的人),客户端A刚开始没有人和他通讯,所以客户端A的状态是CLOSDE(关闭的),服务器端B刚开始的状态也是CLOSDE,但是总有人去访问他,所以服务器端B开启了LISTEN(收听)状态。
(1)假设A机器想链接B机器了,他就会向B机器发送一个建立链接的请求,这个建立链接请求叫SYN=1,因为要发送一个数据包给B,这个包在A机器里的编号为X,所以seq=x,发送过去之后,A从CLOSED状态转换为SYN-SENT(同步已发送)状态。
(2)A发送过去,B立马就会回应,也会发送一个建立链接的请求,SYN=1(因为B和A以前也没通讯过,要请求和A通讯),B同意了A的建立链接,所以ACK=1,因为B要向A发送一个数据包,这个数据包在B机器里的编号刚好是y,所以seq=y,又因为B确认收到A发送的第X个包,所以B希望收到的下一个包是第x+1个包,所以ack=x+1。发送之后B有LISTEN状态转换为SYN-RCED(同步已收到)状态。
(3)B向A发送了请求,A也会立马回应,同意了B的建立链接,所以ACK=1,A向B发送的是第x+1个包,所以seq=x+1,而A确认收到了B发送的第y个包,希望收到第y+1个包,所以ack=y+1。之后A,B就建立了连接,可以进行数据通讯了,AB的状态也都转换为ESTAB-LISHED(已建立链接)状态。
即使三次握手也有安全隐患,假如A向B发送一个请求,正常来说,B立刻回应,B回应之后并不会马上释放资源,他要等着A回第三次回应,B在等待的过程中会在计算机的内存中记录A发来的请求和自己的回应,假如A发来的是个恶意的请求,一直发第一次请求,而不去发第三次回应,结果造成B把资源都浪费在记录A发送来的第一次请求和自己的回应上面,而迟迟等不来A的第三次回应,导致最终系统所有的资源耗尽,那么B机器对外就不能进行正常访问了。

TCP四次挥手

TCP三次握手和四次挥手

客户端和服务器端通讯完之后,双方要结束通讯,这就要进行TCP的四次挥手。挥手请求,客户端和服务器端都可以发出。
(1)假如客户端A发出挥手请求(关闭连接),这个挥手请求就是FIN=1,seq=u表示A向B发送一个数据包,这个数据包在A机器里编号为u。A发送完之后就会进入FIN-WAIT1(终止等待)状态。
(2)B接收到A发送的挥手请求之后会立刻回应,确认收到A发送来的挥手请求ACK=1,seq=v表示B向A发送一个数据包,这个数据包在B机器里的编号为v。B确认收到了A发来的第u个包,希望收到的下一个包为第u+1个包,所以ack=u+1。一旦B发送了这个回应之后就马上进入CLOSE-WAIT(关闭等待)状态。而A收到了B的回应之后就会进入TIN-WAIT2(终止等待)状态。

(3)B发出回应只是说明收到了A的挥手请求并不代表同意A挥手请求,有可能B还没传完数据,接着B会传送一些后续的数据包,传送完之后,B也觉得通讯该结束了,就同意了A的挥手请求,接着B也会给A发送一个挥手请求FIN=1,并且同意了A的挥手请求ACK=1,seq=w表示B向A发送一个数据包,这个数据包在B机器里的编号为w。B确认收到了A发来的第u个包,希望收到的下一个包为第u+1个包,所以ack=u+1。B发送挥手请求之后,就会进入LAST-ACK(最后确认)状态。

(4)A收到B发送的挥手请求之后马上回应B,确认收到了B的挥手请求ACK=1,向B发送的数据包编号为u+1,确认收到了B发送的第w个包,希望收到下一个包为第w+1个包。A发送完之后就会进入TIME-WAIT(时间等待)状态,要等待2MSL(最长数据的传输时间),之后就会进入CLOSED状态。而B收到了A的回应之后就会进入CLOSED状态。

有限状态机FSM:Finite State Machine
CLOSED 没有任何连接状态
LISTEN 侦听状态,等待来自远方TCP端口的连接请求
SYN-SENT 在发送连接请求后,等待对方确认
SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
ESTABLISHED 代表传输连接建立,双方进入数据传送状态
FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
CLOSING 双方同时尝试关闭传输连接,等待对方确认

原创文章,作者:fuming,如若转载,请注明出处:http://www.178linux.com/85723

(0)
上一篇 2017-08-31 15:53
下一篇 2017-08-31 20:22

相关推荐

  • N26_第一周作业

    计算机的组成 计算机由五大部分组成:    1.控制器(control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等;    2.运算器(datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行…

    Linux干货 2016-12-28
  • 管理分区和文件系统及挂载设备

    管理分区 列出块设备 lsblk       分区工具fdisk fdisk -l /dev/sdX 查看硬盘分区信息 CentOS7: fdisk -l /dev/sda 默认开启dos及扇区显示模式    开启dos及柱面显示模式:fdisk -c=dos -u=cylinders -l /dev/sda…

    2017-08-26
  • 马哥教育网络班21期+第6周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@localhost ~]# cp /etc/rc.d/rc.sysinit /tmp/ [root@localho…

    Linux干货 2016-08-15
  • bash脚本基础

    一,概述 shell脚本 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 编程逻辑处理方式: 顺序执行 循环执行 选择执行 shell编程:过程式、解释执行 编程语言的基本结构: 数据存储:变量、数组 表达式: a + b 语句:if shell脚本是包含…

    Linux干货 2016-08-19
  • Centos7 服务器部署ssh证书授权登录

    在当前服务器生成密钥对 ssh-keygen –t rsa –P ” ssh-keygen –t rsa –P ''[root@localhost ~]# ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key …

    Linux干货 2016-12-05
  • 磁盘配额

    配置配额系统     综述        •在内核中执行        •以文件系统为单位启用        •对不同组或者用户的策略不同 …

    Linux干货 2016-09-02