tcp为什么要三次握手?解决办法
tcp为什么要三次握手?
A要连B
第一次,A发送请求连接信息,其中syn位置1,并发送自己的序列号Sa
传输中.......记为1,B收到
第二次,B发送确认连接信息,其中syn位置1,ack位置1,并确认A的序列号Sa+1,并发送自己的序列号Sb
传输中.......记为2,A收到
第三次,A发送确认信息,ack位置1
传输中.......记为3,A认为已经连接成功
B收到确认信息之后认为连接成功。
问题是:A在三次握手的第三次过程中,是不是已经可以带有效数据发送?如果不是得话,A在第三次握手之后,就认为连接成功,然后A就可以发数据了,也就是说A在第三次握手发出确认信息后,紧接着就发送数据?但是,如果传输3失败,A认为连接成功,A发的数据也必然会被B忽略。
------解决方案--------------------
第一次a->b:b确认a的发信机和自己的收信机是好的
第二次b->a:b回应,a收到了。这时a可以确认的是,自己和b的收发信机都是好的。此时b并不知道a是否收到回应,即不确定a的收信机以及自己的发信机是否完好
第三次a->b:a对b的回应进行回应。这时a很清楚,双方收发信机都是好的,自己的这次回应b肯定能收到(正常情况下),这个回应的目的只是消除b对a的收信机和b自己的发信机的担心。然后,a不必等b的再次回应就可以正式发信了。
第三次 ACK 丢了没有太大问题。只要b后面接收到a的数据包过来,就可以确认连接已建好。如果a不发送别的数据包,那么b会超时重传第二次的握手信息
A要连B
第一次,A发送请求连接信息,其中syn位置1,并发送自己的序列号Sa
传输中.......记为1,B收到
第二次,B发送确认连接信息,其中syn位置1,ack位置1,并确认A的序列号Sa+1,并发送自己的序列号Sb
传输中.......记为2,A收到
第三次,A发送确认信息,ack位置1
传输中.......记为3,A认为已经连接成功
B收到确认信息之后认为连接成功。
问题是:A在三次握手的第三次过程中,是不是已经可以带有效数据发送?如果不是得话,A在第三次握手之后,就认为连接成功,然后A就可以发数据了,也就是说A在第三次握手发出确认信息后,紧接着就发送数据?但是,如果传输3失败,A认为连接成功,A发的数据也必然会被B忽略。
------解决方案--------------------
第一次a->b:b确认a的发信机和自己的收信机是好的
第二次b->a:b回应,a收到了。这时a可以确认的是,自己和b的收发信机都是好的。此时b并不知道a是否收到回应,即不确定a的收信机以及自己的发信机是否完好
第三次a->b:a对b的回应进行回应。这时a很清楚,双方收发信机都是好的,自己的这次回应b肯定能收到(正常情况下),这个回应的目的只是消除b对a的收信机和b自己的发信机的担心。然后,a不必等b的再次回应就可以正式发信了。
第三次 ACK 丢了没有太大问题。只要b后面接收到a的数据包过来,就可以确认连接已建好。如果a不发送别的数据包,那么b会超时重传第二次的握手信息