Linux--抓包-连接状态

目录

一、TCP:

1.抓包:

2.工具:

3.状态:

4.命令:

三次握手:

应答确认:

四次挥手


一、TCP:

面向连接、可靠的、流式服务

1.抓包:

三次握手、四次挥手

2.工具:

使用Linux自带的tcpdump工具

3.状态:

Linux--抓包-连接状态_第1张图片

//反映的是连接的状态 

以打电话为例:待机、拨出、响铃、接通(通话中(保持较长时间)、通话结束)or挂机

//上半部分的状态转换是由三次握手带来的 

//下半部分是由四次挥手(三次挥手)带来的 

Linux--抓包-连接状态_第2张图片

 //FIN_WAIT2

Linux--抓包-连接状态_第3张图片

//TIME_WAIT

为什么要有一个"TIME_WAIT"的状态?

1) 可靠的终止 TCP 连接。

2) 保证让迟来的 TCP 报文有足够的时间被识别并被丢弃 ;

在 Linux 系统上,一个 TCP 端口不能被同时打开多次(两次及以上)。当一个TCP 连接处于 TIME_WAIT 状态时,我们将无法立即使用该连接占用着的端口来建立一个 新连接。

如果确实需要强制进程立即使用处于 TIME_WAIT 状态的连接所占用的端口,可以通 过 setsockopt()方法设置 socket 选项 SO_REUSEADDR 来完成

//Crtl+c进程结束,但是连接还没结束,连接的结束取决于对方 ,需要双方挥手 

4.命令:

Linux--抓包-连接状态_第4张图片

 //抓的是从我到他,以及从他到我的数据包

//ifconfig 看IP地址前面是否为ens33

//sudo 用户名//管理员权限

//如果是

tcpdump -i ens33 -nt '(src 192.168.31.11 and dst 192.168.31.111)or(src 192.168.31.111 and dst 192.168.31.11)

三次握手:

TCP 协议提供的是:面向连接、可靠的、字节流服务。使用 TCP 协议通信的双发必 须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资 源,以管理连接的状态和连接上数据的传输。 TCP 连接是全双工的,双方的数据可 以通过一个连接进行读写。完成数据交换之后,通信双方都必须断开连接以释放系统 资源。 三次握手发生在发起链接 connect 的时候。

tcp的第一个特点: 它是一个面向链接的,意味着我们在收发数据之前必须建立链接,如何建立链接呢?我们 就是通过三次握手来建立链接的,就是执行connect的时候 ; tcpdump抓包观察TCP的链接的建立和关闭;

Linux--抓包-连接状态_第5张图片

 //最后一个ack=1,是因为三次握手完成,便于观察数据,也可以不是1

加上S

Linux--抓包-连接状态_第6张图片

应答确认:

以hello为例:(五个字符)

Linux--抓包-连接状态_第7张图片

 //发送五个字符的hello(长度为5)

//收到五个字符(ack6)

//回复OK(长度为2)

//收到OK(ack3)

发送一段数据反复确认,花费高

超时重传

无差错,数据的交互:Linux--抓包-连接状态_第8张图片

 有差错数据的交互流程:Linux--抓包-连接状态_第9张图片

 乱序重排,去重

应答确认,超时重传,乱序重排,去重最终保证了tcp链接的可靠性;

四次挥手

什么时候开始挥手?服务器或者客户端执行close的时候 ;

//演化为三次挥手,中间两次同时发送

Linux--抓包-连接状态_第10张图片

Linux--抓包-连接状态_第11张图片

//四次挥手

你可能感兴趣的:(Linux命令,tcp/ip,网络协议,网络)