코딩은 내일부터

TCP 송/수신 어떻게 어떻게 이루어지나yo? 본문

카테고리 없음

TCP 송/수신 어떻게 어떻게 이루어지나yo?

zl존 비버 2024. 2. 28. 14:07
728x90

서버와 클라이언트(브라우저) 사이에서 데이터가 이동할 때 인터넷을 통해서 데이터가 이동한다.

이번에는 위와같은 그림에서 더 자세하게 들어가 어떻게 데이터가 이동하는지 알아보겠다.

그러면 클라이언트에서 server로 데이터를 보내는 상황에서 설명해 보겠다.

 

 

1) 사용자 데이터 보내기

클라이언트에서 입력한 사용자의 정보는 메모리에서 해당 데이터는 소켓을 통해 데이터를 TCP/IP 쪽으로 넘긴다.

그림과 같이 Buffer에 넘어온 데이터를 저장하고 IP와 Port를 그리고 순서 등등 의 데이터를 담고 있는 Segment라는 단위로 청크 된다.

Segment를 배송할 물건이라고 한다면 계층을 거치면서 Segment는 Packet이라는 택배상자에 감싸지고 Frame이라는 운동차량으로 감싸지게 된다.

그러면 이 운송 차량은 처음 사진에서 보이는 구름모양의 Internet을 통해 해당 클라이언트까지 가게 된다.

Server에서도 Client에서 포장했던 거와 반대로 택배박스를 다시 풀어헤치는 작업을 하고 TCP계층에서 Buffer에 Segment들이 쌓인다.

그러면 수신 측에서 해당 수신을 잘 받고 있다고 서버한테 보내는데 그것이 ACK라는 요청이다.

서버는 ACK요청을 받을 때까지 기다렸다가(Time Out시간이 있다.) ACK에 있는 Window Size정보를 보고 내가 보내는 나머지 내용물 Segment의 크기와 비교를 해서 Window Size보다 작다면 다시 포장을 하고 수신 측에다 보낸다.

반대로 Window Size보다 크다면 Server는 기다린다.

이렇게 데이터들을 받으면 해당서버가 tomcat을 사용하는 web serve r면

coyote.http11 패키지에 있는 Http11Processor.java클래스의 service메서드가 실행되는데

여기서 Socket에 있는 데이터를 읽어와 Request를 만드는 작업을 하고

이렇게 만들어진 Request는 Controller → Service → Repository를 거쳐 DB에 데이터가 적재된다.