TCP特性

1、工作在传输层

2、面向连接的协议

3、全双工协议

4、半关闭

5、错误检查

6、将数据打包成段,排序

7、确认机制

8、数据恢复、重传

9、流量控制、滑动窗口

10、拥塞控制,慢启动和拥塞避免算法

常见端口号

http80 https443 ftp20/21 dns53 tftp69

smtp25 pop110 imap143 telnet23 ssh 22

mysql3306 oracle1521

三次握手

————————————————

当一台主机(客户端)想要通过TCP协议向另一台主机(服务器)发送数据时,需要建立三次握手

第一次握手,客户端主动打开TCP连接通道,发送TCP请求报文,在该报文中SYN(同步位,代表连接请求或连接请求的接受报文)置为1,seq(序列号)为随机数x。

第一次握手过程中,客户端由CLOSED状态,即没有任何连接的状态,变为SYN-SENT状态,即发送连接请求后等待匹配的连接请求状态。代表请求连接,不会传输数据。

第二次握手,当服务器端收到了TCP连接请求(即SYN置为1的报文。注:此处应该是不携带ACK为1的报文),服务器被动打开连接通道,根据服务器自身策略向客户端发送TCP回复报文,在该报文中SYN置为1,ACK(确认位,置为1代表确认,置为0代表...代表不确认呗)置为1,ack(确认序列号)为TCP请求报文中的seq+1即x+1,seq(序列号)为另一个随机数y。

在第二次握手过程中,服务器在收到TCP请求报文时,被动的由CLOSED状态与LISTEN状态变为SYN-RECEIVED状态,即收到和发送一个连接请求后等待对方对连接请求确认的状态,同时准备好缓存空间以及一些涉及到的变量。代表允许连接,不会传输数据。

第三次握手,当客户端收到服务器的TCP连接请求的回复报文后,会向服务器端发送一个报文携带ACK置为1,ack为TCP连接请求的回复报文中seq+1即y+1,seq为最开始的x+1,也就是TCP连接请求的回复报文中ack的值,SYN置为0。

在第三次握手过程中,当客户端收到了TCP连接请求的回复报文(允许连接)时,客户端由SYN-SENT状态变为ESTAB-LISHEN状态,代表一个打开的连接,同时客户端为TCP连接准备好缓存空间以及一些涉及到的变量。该报文代表向服务器端确认的确认报文,可以携带数据。

————————————————

LISTEN:侦听来自远方的TCP端口的连接请求

SYN-SENT:再发送连接请求后等待匹配的连接请求(客户端)

SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(服务器)

ESTABLISHED:代表一个打开的连接

FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:从远程TCP等待连接中断请求

CLOSE-WAIT:等待从本地用户发来的连接中断请求

CLOSING:等待远程TCP对连接中断的确认

LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认

TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:没有任何连接状态

四次挥手

————————————————

参与一条TCP连接的两个“进程”中的任何一个都能终止该连接,连接结束后,主机中的“资源”(缓存和变量)都将被释放。

第一次挥手,客户端向服务器发送关闭连接请求报文,即连接释放报文,关闭TCP连接,该报文中FIN(结束位)置为1,seq置为u(报文段第一个字节的序号,可以标识这个报文段)。

在第一次挥手过程中,客户端由ESTABLISHED状态变为FIN-WAIT-1,等待远程TCP连接中断请求,或先前的连接中断请求的确认。此时客户端已经释放了发送连接。

第二次挥手,服务端收到客户端发送的关闭请求,回复一个确认报文段,该确认报文中ACK置为1,ack为u+1,seq为v(最后一个TCP数据报文中的最后一个字节+1)。

在第二次挥手过程中,服务器由ESTABLISHED状态变为CLOSE-WAIT状态,等待足够的时间以确保远程TCP接收到连接中断请求的确认。此时服务器端释放了接受连接。由于客户端关闭了发送连接,服务器端关闭了接受连接,所有此时整个TCP连接处于一种半关闭状态。

第三次挥手,服务器发送确认关闭报文后需要向客户端发送一个释放连接报文,关闭TCP发送连接,由于是释放连接报文,所以FIN置为1,ACK置为1,ack为u+1(由于上一挥手报文也是由服务器发送,所有客户端等待的报文需要有ACK位,同时确认号依旧为上一个报文的确认号),

TCP三次握手四次挥手内容及步骤的更多相关文章

  1. [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解

    一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...

  2. tcp三次握手四次挥手那些事

    建立TCP需要三次握手才能建立,而断开连接则需要四次挥手.三次握手,四次挥手流程图如下: 一.首先看下如何通过三次挥手----------建立连接 首先客户端发送连接请求报文,服务端接受连接后回复AC ...

  3. 网络 TCP三次握手,四次挥手详解

    三次握手,四次挥手可以说是炙手可热的面试题了,来看看它究竟长什么样子吧! 我们先把流程图贴上来 : 为什么这么复杂? 因为TCP是可靠性传输. 确认可靠传输的前提:  TCP连接管理机制 用TCP首部 ...

  4. TCP三次握手四次挥手,通俗易懂版

    三次握手四次挥手 三次握手 其实很好理解,三次握手就是保证双手都有发送和接受的能力.那么最少三次才能验证完成 即----> 客户端发送---服务端收到----服务端发送-- 1.客户端发送 -- ...

  5. TCP三次握手四次挥手详解

    转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...

  6. TCP三次握手四次挥手详解2

    相对应socket开发者,TCP创建过程和连接拆除过程是由TCP/IP协议栈自动创建的,因此开发者并不需要控制这个过程,但是对于理解TCP底层运作机制,相当有帮助 TCP三次握手 所谓三次握手,是指建 ...

  7. TCP三次握手四次挥手过程梳理

    1. 数据传输的大致示意图 1.1 TCP数据报文首部内部 1.2 TCP连接的几种状态说明 即命令 netstat 结果中的所有状态: 2. TCP连接建立的全过程 2.1 TCP三次握手建立TCP ...

  8. TCP三次握手/四次挥手详解

    一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...

  9. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释

    一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...

  10. wireshark抓包直观图解 TCP三次握手/四次挥手详解

    转http://www.seanyxie.com/category/linux/ 作者:seanyxie |   一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负 ...

随机推荐

  1. drf-day6——九个视图子类、视图集、路由系统、认证组件

    目录 一.九个视图子类 二.视图集 2.1 通过ModelViewSet编写5个接口 2.2 通过ReadOnlyModelViewSet编写2个只读接口 2.3 ViewSetMixin源码分析 总 ...

  2. (Crack)SQL转Linq工具的使用——Linqer

    官方下载网站:http://www.sqltolinq.com/ 这是干什么用的         就是Sql语句转Linq  给不熟悉的小白用 再用Linq 转 Lambda      (用到Linq ...

  3. mysql 错误解决大法 Specified key was too long; max key length is 767 bytes

    高版本mysql向低版本(5.7以下)导入sql时可能会发生此问题 开启索引最大长度 SET GLOBAL INNODB_LARGE_PREFIX = ON; 将表改为动态表SET GLOBAL in ...

  4. spring中Utils工具类注入问题

    使用工具类的时候,我们想在static修饰的方法中,通过注入来调用其他方法,这里就存在问题. 第一:普通工具类是不在spring的管理下,spring不会依赖注入 第二:即便使用@Autowired完 ...

  5. STM32F4库函数初始化系列:串口发送

    1 void Configuration(void) 2 { 3 USART_InitTypeDef USART_InitStructure; 4 GPIO_InitTypeDef GPIO_Init ...

  6. TS在实际开发中的使用

    TS的基础使用 // 数字 let num = ref<number>(100) // 文字 let str = rer<string>('文字') // boolean le ...

  7. selenium结合tenacity的retry实现验证码失败重试

    说在前面 验证码登录的demo后续可以单独讲解,VIP学员对这部分应该都是掌握的,此处不再赘述 本文假设了一个场景 你通过OCR识别的验证码是有一定的错误几率的 本文是通过识别后的验证码去加一个随机字 ...

  8. 【KAWAKO】从mac上定时将腾讯云的数据备份到本地

    目录 前言 需求 宝塔面板 备份网站 备份数据库 mac端 创建工程文件夹 rua.py rua stdout plist Reference 前言 不信任一切云端平台,把数据牢牢握在自己手中才是最安 ...

  9. 如何将项目打包成apk或exe程序

    一. 打包成exe 确认已经安装了pyinstaller,然后依次执行下面指令 pyinstaller -F setup.py 打包exe pyinstaller -F -w setup.py 不带控 ...

  10. Appium自动化(一)-window环境搭建详细教程

    一.软件环境所需要运用的工具 1.JAVA1.8.1以上环境 2.AndroidSDK 3.Appium Desktop(appium servers) 4.Appium Client 5.Appiu ...