众所周知TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。何为面向连接和可靠性,我认为这主要体现在TCP的三次握手和四次挥手。只有在三次握手成功后,建立连接传输数据;在四次挥手后断开连接。
TCP首部有6个比特标志位,分别有SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
seq:顺序号, ack:确认号
第一次握手:客户端向服务端(或者主机1向主机2)发生一个syn=1 seq=x建立联机的包。
第二次握手:服务端接收到包,回一个syn=1 ack=1(x+1) seq=y确认并同时附带上建立联机的标志。
第三次握手:客户端接收到确认和联机的包后,给服务端回一个seq=1 ack=1(y+1)的确认包。
当三次握手成功后就建立连接,可以传输数据。
数据在传输完后,需要释放掉连接,即断开连接。
客户端的数据传输完后,客户端向服务端发送第一次结束包(第一次分手);服务端接收到包表示知道了,回一个确认包(第二次分手);然后服务端的数据传输完后,给客户发一个结束包(第三次分手);客户端接到后会一个确认包(第四次分手)。
请求百度的时候抓的包
总体就是:三次握手->发送get请求->百度发送确认包->百度发送数据包->接收数据确认包->4次分手。