기본적으로 TCP 프로토콜은 초기 3Way Handshaking 후
데이터 전송 시 수신자의 윈도우 사이즈만큼(65536bytes) 수신확인(Ack) 없이 전송한다.(윈도잉)
Next Squence Number 계산
1) Client, Seq는 [ 58 2e 7d 4d ], 3Way Handshaking 시작
Client ----- [ TCP/syn ] ----> Server
[ 58 2e 7d 4d ] Seq
[ 00 00 00 00 ] Ack (Server에서 보낸 확인 패킷이 없으니 Acknowledgment Number는 0)
2) Server, Seq는 [ 7c b7 34 26 ], Client의 Seq가 [ 58 2e 7d 4d ]인 패킷을 수신확인, 다음 Client의 Seq는 [ 58 2e 7d 4e ]
Client <---- [ TCP/syn/ack ] ------ Server
[ 7c b7 34 26 ] Seq
[ 58 2e 7d 4e ] Ack (Client에서 보낸 패킷에 대한 확인 응답 + Client의 Next Sequence Number)
3) Client Seq는 [ 58 2e 7d 4e ], Server의 Seq가 [ 7c b7 34 26 ]인 패킷은 수신확인, 3Way HandShaking 종료
Client ----- [ TCP/ack ] ----> Server
[ 58 2e 7d 4e ] Seq
[ 7c b7 34 26 ] Ack (Sever에서 보낸 패킷에 대한 확인 응답)
1) Client, Seq는 [ 58 2e 7d 4e ]
(TCP Segment 길이가 386(0x182), Server가 정상 수신하면 Server의 Ack는 [ 0x582e7d4e + 0x182 = 58 2e 7e d0 ])
다음 Server의 Seq는 [ 7c b7 34 27 ]
Client ----- [ HTTP/psh,ack ] ----> Server
[ 58 2e 7d 4e ] Seq
Next Sequence Number --> Seq + TCP Segment Length = [ 58 2e 7e d0 ]
[ 7c b7 34 27 ] Ack (Server의 Next Sequence Number)
2-1) Server, Seq는 [ 7c b7 34 27 ]
Client의 TCP Segment에 대한 확인응답 [ 0x582e7d4e + 0x182 = 58 2e 7e d0 ]
Client <---- [ TCP/ack ] ----- Server
[ 7c b7 34 27 ] Seq (다음 패킷부터 Data를 보내고 마지막 패킷에서 psh,ack로 데이터 전송 종료를 알림)
[ 58 2e 7e d0 ] Ack (Client에서 보낸 패킷에 대한 확인 응답 + Client의 Next Sequence Number)
2-2) Server, Seq는 [ 7c b7 34 27 ], HTTP/1.1 200 OK
(TCP Segment 길이가 1026(0x402), Client가 정상 수신하면 Client의 Ack는 [ 0x7cb73427 + 0x402 = 7c b7 38 29 ])
다음 Client의 Seq는 [ 58 2e 7e d0 ]
Client <---- [ HTTP/psh,ack ] ----- Server
[ 7c b7 34 27 ] Seq (HTTP/psh,ack)
Next Sequence Number --> Seq + TCP Segment Length = [ 7c b7 38 29 ]
[ 58 2e 7e d0 ] Ack (Client에서 보낸 패킷에 대한 확인 응답 + Client의 Next Sequence Number)
3) Cient, Seq는 [ 58 2e 7e d0 ]
(TCP Segment 길이가 387(0x183), Server가 정상 수신하면 Server의 Ack는 [ 0x582e7ed0 + 0x183 = 58 2e 80 53 ])
다음 Server의 Seq는 [ 7c b7 38 29 ]
Client ----- [ HTTP/psh,ack ] ----> Server
[ 58 2e 7e d0 ] Seq
Next Sequence Number --> Seq + TCP Segment Length = [ 58 2e 7e d0 ]
[ 7c b7 38 29 ] Ack (Server에서 보낸 패킷에 대한 확인 응답 + Server의 Next Sequence Number)
.
.
.
.
'Analysis > Network' 카테고리의 다른 글
[VPN] 터널링 (0) | 2016.08.09 |
---|---|
Tcpdump usage examples (0) | 2016.04.26 |
HTTPS와 SSL 이해 (0) | 2016.04.15 |