tcp抓包返回fin_TCP/IP学习二TCP链接建立与断开

今天详细学习下TCP链接的三次握手四次挥手,因为开发web服务还是会经常遇到一些网络问题的。其实这方面的资料很多,可能我们看过很多次但也忘了无数次[捂脸],这次我主要通过抓包例子来展示这个过程。

  • TCP传输控制协议(TransmissionControlProtocol)

他的特点是基于流、提供可靠数据传输,先建立连接再传输数据。提供如超时重传、流控等各种机制,这样的特点同时也导致了tcp会使用更多的连接,占用更多的资源。UDP则是直接发送数据,不保证数据的到达与接收。我们再把这个流程图拿过来瞅瞅。

d95c80e1ef4439198d73388e9ac9c027.png

TCP建立与断开

  • 三次握手
0b605e7970dd1487b13516cd90fd09d0.png

三次握手

这里我用本机50319端口请求远端80服务, 能清楚的看到三次TCP的连接,你是否有疑问为什么是三次,不是两次,不是四次,其实这里是兼容安全与效率。

我们说TCP数据保证基于SYN与ACK的存在,其实这里明显看到请求号72(也就是80->50319的回复)是将SYN+ACK合为了一条数据返回,这里我想应该可以拆开吧,但是拆开浪费一次链接。所以这里建立连接需要三次。

再来说下三次握手:

小明:你好丽丽,在吗?我是小明 请求号65 50319---->SYN(Seq=0)------>80

小丽:你好小明,我在呀~~ 80->SYN+ACK(Seq=0,Ack=1)-->50319

小明:好的,那我们开始谈谈心吧!! 50319->ACK(Seq=1, Ack=1)---->80

小丽:[爱慕] Established

小明:[送心] Established

  • 四次挥手
6b014ad5b85d73fffba71ec51d028b03.png

四次挥手

这里先说明一点,HTTP1.1之后能自带keep-alive属性,也就是说同一个客户端的http请求可以共用一个tcp连接,这样能防止tcp连接的浪费,截图说明

800f7620d3fd2a056c36d72f6f632773.png

HTTP keep-alive

我们在测试的时候可以关闭这个keep-alive, 在请求的时候设置connetion:close就可以了,这样可以方便我们抓包验证。如果开着的话,当前的tcp连接就不会立刻断开的截图说明

57ea951d3a2038cf8e13a5dbdc88e971.png

postman 关闭keep-alive

再说回四次挥手,我们看到请求号(212)80->56427发送FIN标识的消息,这代表80端要结束连接了,56427->80回复了ACK,请求号(214), 随后呢56247->80发送FIN标识请求号(215),代表自己也没有消息发送可以结束了,随后请求号(216)80->56247发送ACK确认,至此连接关闭。

.......

小明:好吧,我说完了! 80-----FIN----->56427

小丽:嗯嗯! 56427------ACK--->80

小丽:我也没话说了! 56427-----FIN----->80

小明:再见!!! 80-----ACK----->56427

小明:[流泪]closed!!

小丽:[吐]closed!!

那为啥是四次挥手呢,如果是三次就像连接建立一样将最后56427->80的ACK+FIN合并为一条可以吗,当然不可以,这是因为TCP的连接双方能发消息也能接受消息,FIN的发出代表本方将关闭消息发送,而无法确认对方是否还有消息发送过来,估需要双方分别确定已关闭消息发送。

  • 关于状态的说明

这里我们在服务端加入sleep操作限制连接的立刻断开如代码

<?phpsleep (60);echo "hello World ";

我们观察下链接状态的变化

服务端状态流转:

LISTEN->SYN-RECEIVED->ESTABLISHED->CLOSE-WAIT->LAST-ACK->CLOSED

客户端状态流转:

SYN-SENT->ESTABLISHED->FIN-WAIT1->FIN-WAIT2->TIME-WAIT->CLOSED

91998b1e2847f743ce317cca87030c37.png
df73b662f86ccc8e8b2384c275cd92b7.png

这里可能跟上面说的有差别,是因为我们这里是80主动关闭的连接。另外有些状态流转太快,我根本看不到啊[吐血]

状态我还需要再学习学习,里面的玩意太多了,下个分享,我们找一些例子来学习下,重点是TIME_WAIT、2SML啥的。

总结:

  • TCP的消息可靠性通过SYN+ACK实现
  • TCP三次握手+四次挥手是有原因的
  • TCP的连接双方都有各自的状态流转
  • 要通过一些工具如netstat、tcpdump去实际查看网络连接状况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置vim

1、配置文件的位置 在目录 /etc/ 下面&#xff0c;有个名为vimrc的文件&#xff0c;这是系统中公共的vim配置文件&#xff0c;对所有用户都有效。而在每个用户的主目录下&#xff0c;都可以自己建立私有的配置文件&#xff0c;命名为&#xff1a;“.vimrc”。例如&#xff0…

70%的单身女孩都是这样想的!

1 父爱如山&#xff0c;山就是杵在那里一动不动&#xff01;2 3 单身的女孩不要着急4 哎呀&#xff0c;没有两条小鱼干是起不来了&#xff01;5 一分钟教你画二哈&#xff0c;这次真的厉害了&#xff01;6 披着羊皮的狼&#xff1f;&#xff1f;&#xff1f;你点的每个赞&#…

.NET基金会讨论 .NET 开源事业之路

【编者按】从闭源走向开源&#xff0c;.NET 背后都发生了哪些有趣的故事。本文采访了 6 位微软 .NET 团队成员&#xff0c;分享他们在 GitHub 以及建立 .NET 开源项目的经历。作者 | Richard Lander 译者 | 弯月出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff0…

oracle的排序分页,oracle 排序分页 高效sql语句

最好还是利用分析函数row_number() over ( partition by col1 order by col2 )比如想取出100-150条记录,按照tname排序select tname,tabtype from ( select tname,tabtype,row_number() over ( order by tname ) rn from tab)where rn between 100 and 150;2. 直接使用rownum 虚…

每天写出好代码的5个建议

成为一个优秀的程序员和成为其他优秀的专业人员一样&#xff0c;需要尽可能多的做一些有质量的工作。有句很流行的话可以总结&#xff1a;做&#xff0c;正确做事&#xff0c;立马就做&#xff08;Do it. Do it right. Do it right now&#xff09;。 0、将一天要做的事情列成清…

Process Explorer 15.2:微软增强型任务管理器

Process Explorer 是一款免费的增强型任务管理器&#xff0c;同时也是微软著名工具包Sysinternals下的组件之一。 Process Explorer 能让使用者了解看不到的在后台执行的处理程序&#xff0c;可以使用 Process Explorer 方便地管理你的程序进程。Process Explorer 已经完美的支…

python的数值类型_Python的数值类型

标签&#xff1a;如何问题&#xff1a;1. Python数值有哪些&#xff1f;2. 各类型的精度是多少&#xff1f;3. 类型的转换是如何实现的&#xff1f;5. 如何使用这些数据类型&#xff1f;需要注意什么&#xff1f;6. 什么是不可变类型&#xff1f;数值类型&#xff1a;整型&…

号称最强“抓取”工具,没有搞不到的资源!

全世界只有3.14 % 的人关注了爆炸吧知识分享一个超级好用的工具&#xff0c;绝对用心挑选&#xff0c;让你惊艳&#xff01;不仅帮你赚钱&#xff0c;还能完善生活的方方面面。“能轻松赚钱&#xff0c;真的超爽&#xff01;”好朋友雪球&#xff0c;前段时间负责一个市场营销的…

oracle cpu 100%原因,oracle 12.1 cpu 100%

查看整体负载cpu使用居高不下;基本上整体CPU是百分80%以上了;此时:物理读600MB/s,REDO也不算太高;全为latch free,一般为bug高发区检查相关SQL基本为系统SQL:4b4wp0a8dvkf0,11bzv8fm87zvr,3uqkkfu1crw8y,frjd8zfy2jfdq,8mdz49zkajhw3相关BUG:1 Frequent Execution of Recursive…

CentOS 5.5 Freeradius MySQL

CentOS 5.5 Freeradius 2.x MySQL 5.x 不解释&#xff0c;直接看配置 [rootlocalhost ~]# date Fri Jul 1 17:02:24 EDT 2011 [rootlocalhost ~]# [rootlocalhost ~]# cat freeradius.log yum update -y yum search freeradius yum -y install freeradius2 freeradius2-utils …

C#多线程开发-处理子线程中的异常

C#多线程开发-处理子线程中的异常在平时的多线程开发中&#xff0c;对于异常的处理是至关重要的&#xff0c;千万不能马虎。如果在实际的项目中&#xff0c;对于某些线程中的异常没有处理&#xff0c;会直接导致整个程序崩溃&#xff0c;软件无法使用。其中需要说明的是&#x…

matlab提速技巧(自matlab帮助文件)

matlab提速技巧&#xff08;自matlab帮助文件&#xff09; 1.首先要学会用profiler.1.1. 打开profiler.To open the Profiler, select View -> Profiler from the MATLAB desktop, or type profile viewer in the Command Window. The MATLAB Profiler opens.在我的机器上是…

GAC及其作用

http://www.cnblogs.com/smallstone/archive/2010/06/29/1767508.html 一、GAC的作用 全称是Global Assembly Cache作用是可以存放一些有很多程序都要用到的公共Assembly&#xff0c;例如System.Data、System.Windows.Forms等等。这样&#xff0c;很多程序就可以从GAC里面取得…

python 装饰器实现_Python装饰器系列01 - 如何正确地实现装饰器

虽然人们能利用函数闭包(function clouser)写出简单的装饰器&#xff0c;但其可用范围常受限制。多数实现装饰器的基本方式会破坏与内省(Introspection)的关联性。可大多数人会说&#xff1a;who cares&#xff01;但我仍坚持追求正确地写出漂亮代码。我爱内省(introspection)&…

高校教师抄袭豆瓣博主文章,学校证实:基本属实!记过并调离教学科研岗位...

全世界只有3.14 % 的人关注了爆炸吧知识导读作为高层次人才被杭州市引进&#xff0c;并于杭州师范大学任教的教师郭某某最近陷入了一则被指博士论文涉嫌抄袭豆瓣网友事件&#xff0c;近日&#xff0c;学校调查后证实。本文来源&#xff1a;募格学术综合自&#xff1a;红星新闻 …

linux默认归档目录,Linux系统管理(第4章:目录和文件管理二)

Linux系统管理(第4章&#xff1a;目录和文件管理二)一.练习文件查看及检索操作1.查看/etc/filesystems文件&#xff0c;确认当前系统支持的文件系统类型Cat&#xff1a;用于连接多个文件的内容&#xff0c;更多用于查看文件内容2.分页查看/etc/services文件&#xff0c;了解各种…

ASP.NET Core Filter与IOC的羁绊

前言我们在使用ASP.NET Core进行服务端应用开发的时候&#xff0c;或多或少都会涉及到使用Filter的场景。Filter简单来说是Action的拦截器&#xff0c;它可以在Action执行之前或者之后对请求信息进行处理。我们知道.Net Core默认是提供了IOC的功能&#xff0c;而且IOC是.Net Co…

error: storage class specified for parameter问题

error: storage class specified for parameter今天编译时&#xff0c;出现error: storage class specified for parameter问题一下子出现了很多错误&#xff1b;最后&#xff0c;发现是新增的头文件中&#xff0c;最后一个函数的声明缺少一个";“ 引起这个错误虽然很小&a…

sql里如何for循环

declare i intset i1while i<1000begininsert into dbo.T_Uservalues(aaaa,ddddd)set ii1end转载于:https://www.cnblogs.com/lilyzhang/archive/2012/06/14/2549762.html

HTML meta refresh 刷新与跳转(重定向)页面

refresh 属性值 -- 刷新与跳转(重定向)页面refresh用于刷新与跳转(重定向)页面refresh出现在http-equiv属性中&#xff0c;使用content属性表示刷新或跳转的开始时间与跳转的网址引用网址: http://blog.csdn.net/jiankunking demo&#xff1a; <!DOCTYPE html> <html …