网络抓包分析TCP协议的可靠性
Tcp协议的特点就是面向连接,
传输可靠
,面向字节流
抓包的工具:linux下使用tcpdump
,windows下使用wireshark
抓包过程:
- 先在linux下,使用
tcpdump
命令监听将要通信的端口,获取通信过程中的数据信息 - 再在windows下使用
wireshark
打开数据信息,开始死磕的过程。。。。。
可靠传输的原因:
确认应答
机制
超时重传
机制
滑动窗口
机制
拥塞控制
机制
捎带应答
机制
延时应答
机制
确认应答机制
- 当发送方发送一个报文的时候,需要带上序号。
- 接收方收到报文后,需要对该报文进行确认。也就是给对方发送一个确认报文,报文中的确认序号就是告诉对方,自己期望的下一个序号
从三次握手的角度而言
第一步:让服务端确定客户端的发送数据的能力
第二步:让客户端确定服务端的接收数据和发送数据的能力
第三步:让服务端知道客户端接收数据的能力
-
连接发起方率先向对端发起连接请求(SYN),并协商了一个序列号
(Seq=0)
-
被动连接方收到了发起方的连接请求,他收到了连接方为0的序号,再告诉给连接方我想要你的下一个序号
0+1
,这里是(ACK=1)
然后再告诉对方自己的起始序号,这里是(Seq=0)
-
连接方收到了对方确认的信号,回复对方期待的数据
(Seq=1)
,并确认自己收到了对方的期待的信号(Ack=1)
SYN(Seq=0)
这是连接发起方告诉对端,我要连接拉,起始序号是0,并且消耗了0这个序号。
ACK(Ack=1) + SYN(Seq=0)
这个过程分为两步:
-
首先是被动连接方收到了连接方的SYN报文,知道了对端发送SYN报文的序号为0,告诉对方自己收到了这个0,告诉的方式就是发送下一步所期待的报文的序号,也就是
0+1
,ACK(Ack=1)
-
然后再告诉连接方,自己的起始序号,并且消耗掉了这个序号,告诉的方式就是
SYN(Seq=0)
ACK(Seq=1,ACK=1)
这个过程也是分为两步
-
连接方收到了对方发送的序号为0的数据包,并告诉对方,我想要你之后发送的数据包的序号是从0+1开始的,也就是
ACK=1
-
Seq=1
,告诉对方,我这个ACK维护的数据序号是1,但是我这个ACK没有消耗这个序号
三次握手之后
对于连接发起方而言:自己维护序号的有效范围是1 ~ 2^32
对于被动连接方而言:自己维护序号的有效范