포스팅은 모두의 네트워크에 기반하여 작성되었습니다.
목차
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이런 식으로 서버에 요쳥을 보내면 존재하지 않는 애플리케이션이기 때문에 요청을 받을 수 없습니다.
'네트워크' 카테고리의 다른 글
모두의 네트워크 - 응용 계층 (1) 응용 계층의 역할과 웹 서버의 구조 (0) | 2023.05.22 |
---|---|
모두의 네트워크 - 전송 계층 (1) 전송 계층의 역할 및 TCP와 3-way 핸드셰이크 (0) | 2023.05.22 |
모두의 네트워크 - 네트워크 계층 (3) 서브넷과 라우터 (0) | 2023.05.21 |
모두의 네트워크 - 네트워크 계층 (2) IP (1) | 2023.05.21 |
모두의 네트워크 - 네트워크 계층 (1) 네트워크 간의 연결 구조 (0) | 2023.05.18 |