인프런 커뮤니티 질문&답변

howdeep님의 프로필 이미지
howdeep

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

웹 브라우저 요청 흐름

3way handshaking 시점의 패킷들의 정보

작성

·

412

·

수정됨

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
강의 너무 잘 듣고 있는데 궁금한 부분이 생겼어요..

실제로 소켓 라이브러리를 통해서 TCP/IP에서 가상연결 ?

의 느낌으로 3Way HandShaking이 일어난다고 말씀 하셨는데
그렇다면
1. 구글 서버와 연결 하기 위해서 실제로 TCP/IP 계층의 패킷들이 만들어져야 하는데 거기서 세그먼트는 전송데이터(HTTP 메세지)는 빠지고 출발지, 목적지의 IP,PORT 들만 가지고 만들어져서 아래계층으로 헤더들을 추가해서서버랑 connetion 이 되는건가요 ?

좀 더 부가적으로 설명하자면 전송데이터(HTTP 메세지)만 빠진 데이터들이 예를 들어 다시 밑으로 전송계층 -> 인터넷계층 -> 네트워크 계층으로 하나씩 감싸져서 상대 서버에 도착 후 3Way HandShaking 이후 connetion 이후 다시 소켓이나 혹은 애플리케이션 계층으로 돌아 전송데이터(HTTP 메세지)를 가지고 다시 차례대로 계층으로 헤더들이 다시 추가되어서 실제 데이터가 전송되는 지 너무 궁금해요.. (전 먼저 Connetion을 위해 HTTP메세지 없이 캡슐화 해서 보내고, Connetion 이후 다시 역캡슐화로 윗 계층가서 헤더 추가하고 다시 캡슐화 하고 보내는 걸로 이해했어요)

그렇다면 가상연결의 느낌이랑 다른 거 같아서.. 가상연결은 TCP/IP에서 소켓 라이브러리를 통해 바로 연결되는 느낌인데 이론상 물리계층으로 데이터가 전달될텐데 이게 가능할 거 같진 않아서 헷갈려요 ㅠㅠ

답변 2

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. howdeep님

  1. TCP 연결 설정 (3-Way Handshake): 클라이언트가 서버와 TCP 연결을 설정할 때, 실제 데이터(예: HTTP 메시지)는 아직 전송되지 않습니다. 초기 연결 설정은 SYN, SYN-ACK, ACK 패킷을 사용하는 3-Way Handshake 과정을 거치게 됩니다. 이때 전송되는 패킷에는 전송 데이터가 포함되지 않으며, 주로 연결 관리와 제어를 위한 정보만 포함됩니다.

  2. 데이터 전송: TCP 연결이 성공적으로 설정되면, 데이터(예: HTTP 메시지)를 전송할 수 있습니다. 이 데이터는 TCP 세그먼트에 캡슐화되어 전송 계층을 통해 전달됩니다. 각 TCP 세그먼트는 포트 번호, 순서 번호, 확인 응답 번호 등의 제어 정보를 포함합니다.

     

  3. 가상 연결(Virtual Connection): TCP는 '가상 연결' 개념을 사용합니다. 이는 물리적 연결이 아닌, 소프트웨어적으로 관리되는 연결입니다. 여기서 말하는 물리 연결은 실제로 장비의 네트워크 선이 하나로 고정됩니다. 그런데 TCP/IP는 물리적으로 연결되는 것이 아닙니다. 패킷이 다른 방향을 통해서 목적지에 이동할 수도 있습니다.

감사합니다.

howdeep님의 프로필 이미지
howdeep
질문자

답변 너무 감사합니다!

아직 해결되지 않은 부분이

3 .가상연결의 부분에서 물리적인 연결 이라는 것이 실제로 데이터가 흐르긴 하지만 그 서버와 전용 선의 느낌이 연결되지 않은 상태가 "가상연결의 개념" 소프트웨어적으로 관리되는 연결이라는 말씀이시죠 ?
3 Way Hand Shaking 전에 syn + sny+ack, ack 과정이 일반적인 IP프로토콜처럼 흘러가고

connection이 이루어진 후에 전용선?(서버와 연결된 상태)이 물리적인 연결을 말씀하시는거라면 감이 잡히는 거 같긴 해요..

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. howdeep님

두 서버만 통신하는 회선을 물리적으로 연결한 것이 아니기 때문에 가상의 연결로 볼 수 있습니다.

쉽게 이야기하자만 클라이언트에서 목적지 서버까지 한번에 선으로 직접 연결이 되어 있다면 이것은 물리적인 연결로 볼 수 있습니다.

하지만 클라이언트에서 서버까지 도달하는 중간에 수 많은 경로가 존재합니다.

지구 반대편에 있는 서버에 데이터를 전송한다고 가정하면, 같은 커넥션이 연결되어도 데이터를 전송할 때 어떤 패킷은 지구 왼쪽으로 돌아서 목적지에 도달하고, 어떤 패킷은 지구 오른쪽으로 돌아서 데이터를 전송할 수도 있습니다.

감사합니다.

howdeep님의 프로필 이미지
howdeep
질문자

답변 너무 감사합니다 쉽게 풀어서 설명해주셔서 이해했어요!

2

안녕하세요, 인프런 AI 인턴입니다. howdeep님께 도움될 만한 정보를 찾기 위해 노력했습니다.

질문자님이 말씀하신 3-way handshaking과 관련된 TCP 패킷 생성 과정에 대해서는 아래의 링크에서 비슷한 질문에 대한 답변을 확인하실 수 있습니다.

이 질문들에서 다루는 내용을 간략히 요약드리면, TCP 연결 설정 과정인 3-way handshaking은 전송 계층에서 발생하며, 이 과정에서 포트 및 IP 정보를 포함한 패킷들(연결 설정을 위한 SYN, SYN-ACK, ACK 패킷)이 네트워크를 통해 교환됩니다. 3-way handshaking 과정이 종료된 후에 실제 데이터를 담은 세그먼트들이 재차 캡슐화되어 네트워크를 통해 전송됩니다. 각 계층을 통과할 때마다 필요한 헤더가 추가되는 과정을 통해 최종적으로 상대방에게 전달됩니다.

3-way handshaking은 연결 지향적인 특성을 가지는 TCP 프로토콜의 일부로서, TCP/IP 모델에서 소켓 라이브러리를 통해서도 같은 과정을 거치게 됩니다. 실제 데이터가 물리계층을 통해 전달되기 전에, 통신 시작 시 TCP 연결을 위한 패킷이 교환된 후에 데이터가 담긴 패킷들이 전송됩니다.

가상 연결(virtual connection)이라는 표현은 물리적인 연결이 아닌 TCP 프로토콜 내에서 논리적인 연결 설정을 이루는 것을 의미합니다. 즉, 물리계층까지 가지 않고 소켓 라이브러리를 통해 바로 연결이 구성되는 것이 아니며 실제로는 장치와 장치 사이에 신호가 전달되는 물리계층을 포함한 네트워크의 전 계층을 거치게 됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

howdeep님의 프로필 이미지
howdeep
질문자

그러면 실제 데이터가 전송되기 위해선 1. syn, 2. syn+ack, 3.ack(여기서 데이터를 보낼 수는 있지만 아니라고 가정), 4. 데이터 담아서 보내기 의 과정이 일어나게 되겠네요 물리계층을 통과하는 횟수를 클라이언트 측에서만 따진다면 syn 보낼 때 1번 , syn-ack를 받을 때 2번 ack 3번 보내고 4번째에 데이터를 보내기만 한다는 가정으로(응답 받지않고) 총 4번의 물리계층을 통과하게 되는 게 맞나요 ?

 

howdeep님의 프로필 이미지
howdeep

작성한 질문수

질문하기