본문 바로가기

네트워크

모두의 네트워크 - 전송 계층 (2) 일련번호와 확인 응답 번호, 포트 번호

포스팅은 모두의 네트워크에 기반하여 작성되었습니다.

 

목차

1. 일련 번호와 확인 응답 번호

2. 포트 번호

 

 

연결을 확립하는 3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 TCP 헤더의 일련 번호(sequence number)와 확인 응답 번호(acknowledgement number)를 사용합니다.

 

 

일련번호는 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려 주는 역할을 합니다.

확인 응답 번호는 수신 측이 몇 번쨰 데이터를 수신했는지 송신 측에 알려주는 역할을 합니다. 그래서 이 번호는 다음 번호의 데이터를 요청하는 데도 사용됩니다.

 

Window size

3-way 헨드셰이크 과정에서 코드 비트와 함께 일련번호/확인 응답 번호가 결정되는데요. 세그먼트(데이터) 하나를 보낼 때 마다 확인 응답을 한 번 씩 반환하는 것은 비효율적일수도 있습니다. TCP 헤더를 보면 비트 코드 옆에 Window size가 보입니다. 윈도우 크기(Window size)란 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타냅니다.

 

데이터를 송수신 하는데 매번 확인 응답을 받는 것은 비효율적이니 세그먼트(데이터)를 일시적으로 보관하는 버퍼가 필요합니다. 그리고 이 버퍼에 저장해 둘 수 있는 양을 윈도우 크기라고 합니다. 3-way 헨드셰이크 시 통신 대상에게 윈도우 사이즈를 보내서 버퍼의 한계를 넘지 않는 상태에서 확인 응답 없이 세그먼트를 연속적으로 송신할 수 있습니다.

 

참고로 데이터 크기가 버퍼 크기를 넘는 것을 오버플로라고 합니다.

 

 

포트 번호


IP를 통해서 목적지를 알 수 있지만 어떤 애플리케이션인지 구분할 수는 없습니다. 이를 구분하기 위해 포트 번호가 존재합니다. 그래서 TCP 헤더에는 발신지/목적지의 포트 번호가 존재합니다.

 

 

일반적으로 클라이언트인 웹 브라우저는 랜덤 포트가 정해지기 때문에 포트를 지정하진 않습니다. 하지만 서버는 포트를 지정해야 합니다. 웹 프로그램을 만들어보신 분들이라면 SpringBoot의 Tomcat 서버가 8080포트를 default로 사용하는 것을 알고 계실겁니다. 이런 상황에서 만약 우리가 IP:8090이런 식으로 서버에 요쳥을 보내면 존재하지 않는 애플리케이션이기 때문에 요청을 받을 수 없습니다.