TCP的三次握手及为什么要有三次握手

位码:

TCP有6种标示位,即位码,SYN(synchronous建立联机),ACK(acknowledgement 确认),PSH(push 传送),FIN(finish 结束),RST(reset 重置),URG(urgent紧急),Sequence number(顺序号),Acknowledge number(确认号)

握手过程:

第一次握手:主机A向主机B发送syn=1和随机产生的seq number = 12441234的数据包
第二次握手:主机B收到请求后确认建立联机信息,然后向A发送ack number = (主机A的seq+1), syn=1,ack = 1,随机产生seq = 7654321的包
第三次握手:主机A收到后检查主机B返回的ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再次发送ack number = (主机B seq number+1), ack = 1,主机B收到后确认seq值与ack=1则连接建立成功

最后完成连接

实例:

IP 192.168.1.116.3337 > 192.168.1.123.7788: S 3626544836:3626544836
IP 192.168.1.123.7788 > 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837
IP 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1

第一次握手:192.168.1.116的主机发送syn=1发出建立联机的请求,同时产生为3626544836的seq number
第二次握手:192.168.1.123的主机收到192.168.1.116发出的联机请求,向192.168.1.116发送ack number为3626544837,ack = 1,syn = 1,随机产生的seq 1739326486的包
第三次握手:192.168.1.116主机收到192.168.1.123主机返回的ack number是否正确及第一次发送的seq number+1,以及位码ack是否为1,若正确,则继续向192.168.1.123发送ack number = 1739326487,ack = 1的包,192.168.1.123收到包后确认seq = seq+1,ack = 1则建立连接成功

为什么要三次握手

如果只有两次握手的话,中间连接请求的数据报丢失,导致Client要重发一次请求; 这时Servlet端仅收到一个连接请求,因此可以正常连接; 但如果不是因为数据包丢失,而是因为阻塞了,这个情况下Server端将先后收到两次请求,并持续等待两个2个Client端请求向他发送数据,因此,Client端实际上只有一次请求,而Server端却有两个响应,这种情况可能导致Client端多次发送请求而导致Server端建立N多个响应在等待,因而造成极大资源浪费

为什么要四次挥手
  • 双向通信
  • 断开连接首先要先自己停止向Server端发送数据,并等待Server端的回复;但是之前建立的是平等连接,所以此时Server端也有主动权向Client端发送数据;故Server端也得主动发送数据,并等待Client端确认
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值