0基础 学会TCP三次握手、滑动窗口、四次挥手

下文中出现的ACK和ack的含义

ACK:这里出现的ACK即为上面所说的TCP报文段首部中的“ACK字段”,置1时该报文段为确认报文段。是8个比特位中的一位。
ack:而ack则为TCP报文段首部中“确认号字段”的具体数值。ack=x+1说明B希望A下次发来的报文段的第一个数据字节为序号=x+1的字节;ack=y+1说明A希望B下次发来的报文段的第一个数据字节为序号=y+1的字节。ack+num:确认序号。

SYN是建立连接

一、详析三次握手

第一次握手:

1、客户端主动向服务器发起连接,将SYN标志位置1;

2、生成一个随机的32位的序号seq=J,这个序号后边是可以携带数据的(数据大小)。

第二次握手:

1、服务器接收客户端的连接,并且向客户端发送:ACK=1;

2、服务器会回发一个确认序号:ack=客户端的序号 + 数据长度 + SYN/FIN标志位(按一个字节算);

3、服务器端会向客户端发起连接请求:SYN=1;

4、服务器会生成一个随机序号:seq = K。

第三次握手:

1、客户端应答服务器的连接请求:ACK=1;

2、客户端回复收到了服务器的数据:ack = 服务器的序号 + 数据长度 +SYN/FIN(按一个字节算)。

用图像表示为:

二、滑动窗口

窗口可以理解为缓冲区的大小;

滑动窗口的大小会随着发送数据和接收数据而变化

通信双方都有发送缓冲区和接收数据的缓冲区

服务器:

发送缓冲区(发送缓冲区的窗口)。

接收缓冲区(接收缓冲区的窗口)。

客户端:

发送缓冲区(发送缓冲区的窗口)

        接收缓冲区(接收缓冲区的窗口)

 发送方的缓冲区:

        白色格子:空闲的空间

        灰色格子:数据已经发送出去了,但是还没有被接收

        红色格子:还没有发出去的数据

接收方的缓冲区:

        白色格子:空闲的空间

        红色格子:已经接收到的数据

 

 (图片来源于网络)

mss:Maximum Segment Size(一条数据的最大的数据量)

win:滑动窗口

1、客户端向服务器发起连接,客户端的滑动窗口是4096,一次发送的最大数据是1460;

2、服务器接收连接情况,告诉客户端服务器的窗口大小是6144,一次发送的最大数据量是1024;

3、第三次握手;

4、4~9,客户端连续给服务器发送了6K的数据,每次发送1K;

5、第10次,服务器告诉客户端,发送的6K数据已经接收到,存储在缓冲区,缓冲区的数据已经处理了2K,窗口大小为2K;

6、第11次,服务器告诉客户端,发送的6K数据已经接收到,存储在缓冲区,缓冲区的数据又处理了2K,相当于处理了4K,窗口大小为2K;

7、第12次,客户端给服务器发送了1K的数据;

8、第13次,客户端主动请求服务器断开连接,并且给服务器发送了1K的数据;

9、第14次,服务器回复ACK 8194,a:同意断开连接的请求 b:告诉客户端已经接收到刚才发的2K数据 c:滑动窗口2K;

10、第15、16次,通知客户端滑动窗口的大小;

11、第17次,第三次挥手,服务器端给客户端发送FIN,请求断开连接;

12、第18次,第四次回收。

 三、四次挥手

四次挥手在断开连接的时候,程序中调用了close(),会使用TCP协议进行四次挥手。

客户端和服务端都可以主动发起断开连接,谁先调用close(),谁先发起断开连接。

因为在TCP连接的时候采用三次握手建立的连接是双向的,断开的时候也需要双向的断开。

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值