Context - I am making a request from source(IP - x) to target (IP - y)
curl y
intercepting it in wireshark -
x -> y [SYN] , sync request to target
y -> x [SYN, ACK] , target acknowledges client's sync request and also makes a sync request to client, because it also needs to communicate to client
x -> y [ACK] , client acknowledges target's sync request
x -> y HTTP GET [PSH, ACK], client makes HTTP GET request (why send ACK?)
y -> x [ACK] , target acknowledges client's request
y -> x [PSH, ACK] , target pushes the content (and acknowldges previous ACK? which one?)
y -> x HTTP 302 FOUND [FIN, ACK] , target send FIN to finalize and ACK
x -> y [ACK] , client acknowledges target's FIN
x -> y [ACK] , client acknowledges previous ACK? which one?
x -> y [FIN, ACK] , client sends FIN to finalize communication with target and send additional ACK
y -> x [ACK] , server acknowledges client's FIN
I have posted my question with each tcp request/response. Can someone please explain what those extra ACKs are for?