目录
一、TCP:
1.抓包:
2.工具:
3.状态:
4.命令:
三次握手:
应答确认:
四次挥手
一、TCP:
面向连接、可靠的、流式服务
1.抓包:
三次握手、四次挥手
2.工具:
使用Linux自带的tcpdump工具
3.状态:
//反映的是连接的状态
以打电话为例:待机、拨出、响铃、接通(通话中(保持较长时间)、通话结束)or挂机
//上半部分的状态转换是由三次握手带来的
//下半部分是由四次挥手(三次挥手)带来的
//FIN_WAIT2
//TIME_WAIT
为什么要有一个"TIME_WAIT"的状态?
1) 可靠的终止 TCP 连接。
2) 保证让迟来的 TCP 报文有足够的时间被识别并被丢弃 ;
在 Linux 系统上,一个 TCP 端口不能被同时打开多次(两次及以上)。当一个TCP 连接处于 TIME_WAIT 状态时,我们将无法立即使用该连接占用着的端口来建立一个 新连接。
如果确实需要强制进程立即使用处于 TIME_WAIT 状态的连接所占用的端口,可以通 过 setsockopt()方法设置 socket 选项 SO_REUSEADDR 来完成
//Crtl+c进程结束,但是连接还没结束,连接的结束取决于对方 ,需要双方挥手
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的链接的建立和关闭;
//最后一个ack=1,是因为三次握手完成,便于观察数据,也可以不是1
加上S
应答确认:
以hello为例:(五个字符)
//发送五个字符的hello(长度为5)
//收到五个字符(ack6)
//回复OK(长度为2)
//收到OK(ack3)
发送一段数据反复确认,花费高
超时重传
无差错,数据的交互:
有差错数据的交互流程:
乱序重排,去重
应答确认,超时重传,乱序重排,去重最终保证了tcp链接的可靠性;
四次挥手
什么时候开始挥手?服务器或者客户端执行close的时候 ;
//演化为三次挥手,中间两次同时发送
//四次挥手