더북(TheBook)

호스트 B가 연결을 받아줄 수 있는 상황이면, SYN 플래그와 ACK 플래그 둘 다 켜진 패킷으로 응답한다. 이때 응답 패킷의 ACK 번호는 호스트 A가 처음 보내준 시퀀스 번호 더하기 1로 한다. 1000번 세그먼트는 잘 받았으니 이제 그 뒤의 세그먼트를 호스트 B가 기다리겠노라는 뜻이다. 호스트 B가 A로 보내는 스트림의 첫 번째 시퀀스 번호는 호스트 B가 임의로 고르는데, 이 예제에선 3000번으로 했다. 호스트 A와 B 사이의 연결에 두 개의 스트림이 한 쌍으로 존재하는데, 하나는 A에서 B로, 또 하나는 B에서 A로 가는 스트림이다. 여기서 각 스트림의 시퀀스 번호 체계가 서로 다르다는 점을 유념하자. A에서 B로 가는 스트림은 호스트 A가 랜덤으로 정하고, 반대쪽은 호스트 B가 정한다.

세그먼트에 SYN 플래그가 켜져 있다는 건 “이봐! 이제 스트림으로 데이터를 보내기 시작할게. 이 시퀀스 번호 더하기 1을 기준으로 바이트의 순서를 매기도록 해”라는 의미이다. 두 번째 세그먼트에 보면 SYN외에도 ACK 플래그와 ACK 번호가 포함되어 있는데, 이는 “아까 보내준 데이터 중 이 ACK 번호까지는 다 받았어. 그러니 그 이후 세그먼트를 보내주는 걸로 알고 있을께”라는 뜻이다. 호스트 A가 B에게서 이 세그먼트를 확인응답으로 받고나면 지금 당장은 더 보낼 데이터가 없으므로, 호스트 B가 보내준 첫 번째 시퀀스 번호를 잘 받았다고 응답만 해주면 된다. 따라서 SYN 플래그는 끄고 ACK만 켜서 호스트 B가 보내준 시퀀스 번호에 1을 더한 3001을 ACK 번호로 하여 응답한다.

Note ≣

TCP 세그먼트에 SYN이나 FIN 플래그가 들어가면, 플래그 자체를 한 바이트로 쳐서 시퀀스 번호를 하나 더 올려준다. 이를 가리켜 TCP 팬텀 바이트(TCP phantom byte)라 부르기도 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.