TCP三次握手

TCP协议是传输层协议,是一种面向连接的传输控制协议,可以控制流量的传输。是一种可靠的传输,能够保证数据的完整性,有效性和有序性。

1.TCP建立连接(三次握手)

       

第一次握手:PC1发送SYN请求,序列号为随机生成的a,由于是第一次建立连接,所以ACK此时为0,flag字段中的SYN置位为1。

第二次握手 :PC2收到PC1的SYN请求,回复SYN ACK,序列号为随机生成的b,ACK为a+1,表示PC1发来的序列号为a的报文已经收到,同时希望PC1下次发来的报文序列号为a+1。因为TCP是一种双向连接所以,PC2发送给PC1的报文中flag位的SYN和ACK都置为1,既表示对PC1序列号为a的一种确认,又表示自己向PC1也发起SYN请求连接。

第三次握手:PC1收到PC2发来的序列号为b,ACK为a+1的SYN ACK报文,知道PC2已经收到PC1第一次发送的序列号为a的SYN,同时PC2发来了连接请求,PC1回复序列号为a+1,ACK为b+1的报文,表示对PC2发来的序列号为b的报文的确认,同时希望PC2下次发来的报文序列号为b+1。

前两次握手并不能携带数据,第三次握手可以携带数据。

第一次握手:PC1知道自己发送数据OK

第二次握手:PC2知道PC1发送数据OK,自己接收和发送数据OK

第三次握手:双方收发数据都OK,可以携带数据

实例演示:

         

模拟R1 telnet R2时,查看TCP建立连接的三次握手报文。

2.TCP保证数据的可靠性和有序性

        TCP通过序列号和确认序列号来保证数据的可靠性,完整性和有序性。

        1.当TCP连接建立完成后,R1向R2发送数据,发送的第一个数据包的序列号是a+1,确认序列号位b+1,携带128字节的数据。

        2.R2回复R1时,序列号为b+1,确认序列号位a+1+128,携带10字节的数据。此时R2的ack就是最近一次收到的R1数据包的序列号再加上数据的长度,表示对R1发来的序列号为a+1的128个字节数据的确认。

        3.R1再次给R2发送数据,序列号为a+139,确认序列号位b+11,携带10字节的数据。此时R1的ack就是最近一次收到的R2数据包的序列号再加上数据的长度,表示对R2发来的序列号为b+1的10个字节数据的确认。

        4.R2再次回复R1时,序列号为b+11,确认序列号位a+129+10,携带0字节的数据。此时R2的ack就是最近一次收到的R1数据包的序列号再加上数据的长度,表示对R1发来的序列号为a+129的10个字节数据的确认。

        5.R1再次给R2发送数据,序列号为a+139,确认序列号位b+11,携带10字节的数据。此时R1的ack就是最近一次收到的R2数据包的序列号再加上数据的长度,表示对R2发来的序列号为b+11的10个字节数据的确认。为什么此时R1的ack没有变化?因为最近一次收到R2发来的数据包没有携带数据,数据长度为0,因此R1的ack就是b+11+0。

 实例演示:

         

3.TCP的流量控制

        TCP通过window字段实现对数据流量的控制。

         1.假设两边的缓冲区大小都是3,在TCP建立阶段就会互相告知对方,自己这边的缓冲区大小是多少。

        2.PC1连续发送三个数据给PC2,此时PC2缓冲区占满,当上层应用拿走一个数据时,缓冲区空闲1。

        3.PC2回复PC1时,就会把自己空闲缓冲区大小告知给PC1。

        4.PC1收到PC2发来的确认,发现对方win字段为1了,那么再次发送数据时,就只能发送一次数据给PC2,但是自己这边的缓冲区大小不变,仍然为3,所以此时PC1发送的报文中,win字段仍然为3。

4.TCP断开连接(四次挥手)

        

        1.PC1发送FIN报文请求断开连接,flag位中FIN和ACK都置为1,seq=101,ack=301。

        2.PC2回复PC1的FIN请求,flag位中FIN和ACK都置为1,seq=301,ack=102。

        3.PC2也发送FIN报文请求断开连接,flag位中FIN和ACK都置为1,seq=301,ack=102。

        4.PC1回复PC2的FIN请求,flag位中FIN和ACK都置为1,seq=102,ack=302。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值