10/12
书上说三次握手是SYN、SYN+ACK、ACK。我抓了次包才真正记住。
打开Wireshark,过滤条件输入tcp.port == 80,然后curl一个http网站。能看到三个包:
第一个包:客户端→服务器,标志位SYN=1,seq=0。意思是"我想跟你建立连接,我的初始序列号是0"。
第二个包:服务器→客户端,标志位SYN=1,ACK=1,seq=0,ack=1。意思是"我收到了,我也同意连接,我的初始序列号是0,我期待你下一个发1"。
第三个包:客户端→服务器,标志位ACK=1,seq=1,ack=1。意思是"收到,连接建立"。
为什么不是两次? 因为两次的话,服务器发完SYN+ACK就认为连接建立了,但客户端可能没收到。如果客户端因为网络问题没收到,服务器会一直等客户端发数据,浪费资源。三次是双方都确认了对方的收发能力。
为什么不是四次? 因为服务器把SYN和ACK合在一起发了,省了一次。
抓包最大的好处是把抽象概念变成看得见的东西。建议你也抓一次,比背十遍书管用。
浙公网安备 33010602011771号