tcp协议:

tcp是面向连接、可靠的进程到进程之间的协议。tcp提供全双工服务:即:数据可在同一时间双向传输。

tcp报文段首部格式:

各字段含义:

源端口号:16位字段,为发送端进程对应的端口号

目标端口:16位字段,为接收端进程对应的端口号,接收方接收到数据包之后根据这个字段确定将数据发送给对应程序来处理

序号:32位字段,当tcp从进程中接收到数据之后,就会把他存储在发送缓存中。并对每一个字节进行编号,形成的序列号。特点如下:

会生成一个随机数作为第一个字节的编号,成为序列号(ISN),范围是:0-(232-1)

tcp每个方向的编号都是相互独立的

当字节都被编上号之后,tcp就给每个报文段指定一个序号,序号就是该报文段中第一个字节的编号

确认号:32位字段,确认号是对发送端的确认信息,用它来告诉发送端这个序号之前的数据段都已经收到,如确认号是x,那么表示收到前x-1个数据段

首部长度:用它可以确定首部数据结构的字节长度,一般情况下tcp的首部长度是20字节,但是首部长度最长可以扩展至60字节

保留:保留作为扩展使用。

控制位:tcp的连接和断开都受这六个控制位指挥。含义如下:

URG:紧急指针有效位

ACK:只有当ACK=1时,确认序列号字段才有效,当ACK=0时,确认号字段无效。

PSH:标志位为1时要求接收方尽快将数据段送达应用层。

RST:当RST的值为1的时候通知重新建立tcp连接。

SYN:同步序号为,tcp需要建立连接时将这个值设为1。

FIN:发送端完成发送任务,当tcp完成数据传输需要断开连接时,提出断开连接方,将此控制位设置成1。

窗口值:本地可接受数据段的数目,这个值的大小随着网络是可变的。当网络畅通时,值变大可加快传输速度,网络不稳定时,值变小可保证传输数据的可靠性;tcp协议中的流量控制就是更改窗口值来实现的

校验和:用来做差错控制,发送tcp报文前计算一遍校验和。当接收端收到数据后再做一次校验,当两个值一致时,说明数据是没问题的。

紧急指针:和URG配合使用,当URG=1时有效;

选项:在tcp首部可以有多达40字节的可选信息。

tcp的连接与断开:

在数据通信之前,发送端与接收端要建立连接;等数据发送结束后,双方在断开连接。tcp连接的每一方都是由一个IP和端口组成的、

三次握手与四次挥手如图:

假设服务器监听80端口。由客户端进行访问

三次握手过程:

第一次:

客户端使用随机的端口向服务器的80端口发起连接请求,此过程中典型的标志就是tcp的SYN控制位为1.其他五个控制位全为0;

第二次:

由两部分完成:

1、服务端收到客户端发送的连接请求,向客户端回复确认信息。此过程中典型的标志就是TCP的ACK控制位为1,其他五个控制位全为0,而且序列号是客户端初始序列号+1;

2、服务端同时也向客户端发送一个连接请求,此过程中典型的标志位与第一次握手中一样。即TCP的SYN控制位是1,其他五个控制位为0。

为提高通信效率,这两部分是在同一个数据包中实现。

第三次:

客户端收到服务端的回复(确认和请求),也需要向服务端发送一个确认信息;此过程的典型标志就是tcp的ACK控制位为1,其他五个控制位全为0;确认序列号为服务端的初始序列号+1

三次握手完成,tcp连接建立成功。使用命令netstat -an 命令可查看状态为:ESTABLISHED

三次握手状态监控:

服务器创建socket后开始监听,变为LISTEN状态。客户端请求建立连接,向服务器发送SYN报文,客户端的状态变为SYN_SENT。服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD。然后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED,服务器收到客户端的ACK后也变为ESTABLISHED。此时,3次握手完成,连接建立!

四次挥手过程:

第一次:

客户端向服务器发送控制位FIN和ACK位置为1的tcp报文

第二次:

服务器向客户端返回控制位ACK为1的tcp报文

此时处于一个半关闭的状态,客户端终止发送数据,只回复ACK确认报文,不再发送数据报文,但是扔然可以接收数据。当服务器发送完数据之后,向客户端发送FIN报文并收到ACK确认,这样就完全关闭了这个tcp连接

第三次:

服务器向客户端发送控制位FIN和ACK位置为1的tcp报文

第四次:

客户端向服务器返回控制位ACK为1的tcp报文

四次挥手状态监控:

由于tcp连接是全双工的,断开连接会比建立连接麻烦一点点。客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1。服务器收到FIN后向客户端发生ACK,服务器状态变为CLOSE_WAIT。客户端收到ACK后就进入FIN_WAIT2状态。此时连接已经断开了一半了。如果服务器还有数据要发送给客户端,就会继续发送。直到发完了,就发送FIN报文,此时服务器进入LAST_ACK状态。客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态,再过了2MSL长的时间后进入CLOSED状态。服务器收到客户端的ACK就进入CLOSED状态。

至此,还有一个状态没有提及:CLOSING状态。CLOSING状态表示客户端发生了FIN,但没有收到服务器的ACK,却收到了服务器的FIN。这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外。

使用命令查看tcp网络连接状态:

netstat -n |grep 端口  | awk '/^tcp/ {++a[$NF]} END {for (v in a) print v,a[v]}'

状态详解:

listen:侦听客户端的连接请求

syn_send:客户端发送连接请求等待确认连接

syn_recv :服务端收到一个连接请求,给对方响应确认(syn+ack同时为1)时的状态

established:一个连接的打开,数据正常传输的状态

fin_wait1:客户端主动发出fin关闭连接请求之后等待确认

fin_wait2:客户端接收到关闭连接的ACK确认之后状态(半关闭状态)只接受数据并发送ACK确认,不发送数据

close_wait:服务器接受到FIN后,发出ACK以回应FIN请求之后等待本地发起连接中断请求的状态

closing:主动关闭端发送FIN请求之后等待对方对连接中断的确认,(正常是看不到此状态)

last_ack:被动关闭端,接收到文件结束符之后向主动关闭端发送fin请求等待ACK时的状态

time_wait:(2MSK状态)主动关闭端接收到FIN后,发送ACK进入time-wait状态。防止对方没有收到最后的ACK确认报文,确保双方都可以正常结束。这个期间可以重启启动服务连接但不能发送数据

closed:被动关闭端接受到ACK包之后的状态。代表连接结束。

转载于:https://blog.51cto.com/302876016/1932788

tcp协议报文和三次握手与四次挥手相关推荐

  1. Python常见面试题:TCP 协议中的三次握手与四次挥手相关概念详解

    今天来聊聊Python常见面试题中面试频率特别高的一个题目:TCP 协议中的三次握手与四次挥手. 涉及到的知识点有: 1.TCP.UDP 协议的区别 2.TCP 头部结构 3.三次握手与四次挥手过程详 ...

  2. 【转载】万字详文彻底弄懂TCP协议:从三次握手和四次挥手说起

    今日头条 腾讯技术工程 作者:morganhuang,腾讯 IEG 后台开发工程师 说到 TCP 协议,相信大家都比较熟悉了,对于 TCP 协议总能说个一二三来,但是 TCP 协议又是一个非常复杂的协 ...

  3. 【转】TCP协议中的三次握手和四次挥手(图解)

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...

  4. 图解TCP协议中的三次握手和四次挥手

    最近在复习计算机网络,看到TCP这一章,总结一下. 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 1.jpg 先来看看如何建立连接的: 2.png 首先Client端 ...

  5. [转]TCP协议中的三次握手和四次挥手(图解)

    本文转自:http://blog.csdn.net/whuslei/article/details/6667471 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来 ...

  6. Linux疑难杂症解决方案100篇(十九)-什么是TCP协议中的“三次握手,四次挥手”?带你深入探讨下

    前言 以下是博主精心整理的专栏,需要的小伙伴可自行订阅. 深度学习100例全系列详细教程  深度学习算法原理介绍及应用案例 tensorflow从入门到精通100讲 深度学习框架TensorFlow的 ...

  7. 大白话了解TCP协议:经典——三次握手数据传输 四次挥手

    一直在想如何去描写这个过程,希望用最简单的话加入到自己博客之中 本来开了个小店,但是还是想了一下取消了,技术分享不能以盈利为目的 干嘛要我和她握手呀? TCP是一个就是靠着连接起家的服务协议. 我们已 ...

  8. TCP协议中的三次握手和四次挥手(图…

    http://m.blog.csdn.net/article/details?id=51793861 http://m.blog.csdn.net/article/details?id=6667471

  9. tcp 协议中发送窗口的大小应该是_TCP 协议中的三次握手与四次挥手

    今天来聊聊面试频率特别高的一个题目:TCP 协议中的三次握手与四次挥手.涉及到的知识点有: 1.TCP.UDP 协议的区别 2.TCP 头部结构 3.三次握手与四次挥手过程详解 4.什么是 TIME_ ...

最新文章

  1. Python Module_pdb_DEBUG 方法
  2. 安装opencv3.0.0与配置Visual studio 2008
  3. 推荐系统炼丹笔记:用户评论在推荐中的应用
  4. 初识ES-什么是elasticsearch
  5. Java13的API_JAVA基础--JAVA API常见对象(其他API)13
  6. 飞鸽传书2012绿色版下载
  7. Solaris下怎样改动文件创建时间及查询
  8. 半波对称振子方向图_画好服装款式图的五个要点
  9. 轻松实现函数计算文件上传下载
  10. 分布式系统建模与关键技术
  11. linux对于图形方式的运行级,在大多数Linux发行版本中,图形方式的运行级定义为( )?...
  12. 科大讯飞语音识别demo
  13. Output error file to the following location:[ A:\GHOST ERR.TXT] 错误处理
  14. 宁盾无线认证对接锐捷EG3220
  15. 这个世界的本源不是物质,而是物质背后的基本秩序-柏拉图
  16. java 基础 api,Java基础——常用API
  17. ARM linux解析之压缩内核zImage的启动过程
  18. Ubuntu 的 openssl 安全问题提醒 USN-2192-1
  19. TI Sitara系列AM4376/AM4379 ARM Cortex-A9高性能低功耗处理器设计的工业级核心板
  20. charlesfiddler安卓手机安装系统级ca证书抓取https请求信息

热门文章

  1. 〖Demo〗-- 多级评论
  2. 检测商品简码是否唯一,不重复
  3. 把解压缩版的tomcat6注册成服务并设置自启动
  4. PossibleSums
  5. 利用PCL做点云的平面拟合
  6. 队列管理器连接数设置_详解!基于Redis解决业务场景中延迟队列的应用实践,你不得不服啊...
  7. 帧起始定界符_帧详解 - web黄金矿工 - 博客园
  8. 光滑粒子流体动力学_Trapcode Particular for Mac(AE三维粒子插件) v4.1.5版
  9. 用计算机弹歌我的歌声里,我的歌声里 (完整版)
  10. sqlserver2014导出mysql_sql server2014如何备份数据库-sql server2014备份数据库教程 - 河东软件园...