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

앙뜨님의 프로필 이미지
앙뜨

작성한 질문수

그림으로 쉽게 배우는 네트워크

TCP 개요

TCP 통신 시작/끝 과정에서 애플리케이션 계층

작성

·

412

0

TCP 커넥션 과정과 커넥션 직후 데이터를 보내는 과정이 궁금합니다.

  1. 3 way handshake 나 4way handshake 과정에서 SYN, ACK 을 주고 받을 때 패킷이 애플리케이션 계층을 거치지 않고 트랜스포트 계층끼리 왔다갔다 하는 건가요?

  2. 1번이 맞다면, 클라이언트(여러분)에서 ACK 패킷을 보낸 후 애플리케이션 계층에 통신 가능하니 데이터를 달라고 따로 신호를 주나요?


혹시 질문이 미흡할까봐 제가 생각한 TCP 통신 과정을 적어봅니다. 아래와 같은 과정이 맞을까요?
TCP/IP 5계층을 이용한다고 할 때,

  • 최초에 클라이언트 호스트의 애플리케이션(5계층)이 서버 호스트와 연결을 원한다는 것을 클라이언트 TCP에게 알린다. (5->4 layer)

  • 클라이언트 트랜스포트 계층에서 3 way handshake 과정을 시작하며 SYN 패킷 보냄(4->3->2->1 layer)

  • 서버의 트랜스포트 계층에서 SYN 패킷 을 받고(1->2->3->4 layer), 연결 가능한 경우 트랜스포트 계층에서 SYN/ACK 패킷 보냄(4->3->2->1 layer)

  • 클라이언트 트랜스포트 계층에서 SYN/ACK 패킷을 받고(1->2->3->4 layer), ACK 패킷을 보냄(4->3->2->1)

3 way handshake 완료

  • 클라이언트 트랜스포트 계층에서 ACK 을 보낸 후 3 way handshake 가 끝났다고 애플리케이션 계층에 알려줌(?) (4->5)

  • 클라이언트 애플리케이션 계층에서 서버에 애플리케이션 계층에 데이터(요청)을 보냄(5->4->3->2-1) ex.http 요청

  • 서버에서 응답

답변 1

1

감자님의 프로필 이미지
감자
지식공유자

안녕하세요 양뜨님.
HTTP 요청을 할 때 TCP가 어떻게 동작하는지 궁금하셨군요.
질문에 답변드리겠습니다.

  1. 3 way handshake 나 4way handshake 과정에서 SYN, ACK 을 주고 받을 때 패킷이 애플리케이션 계층을 거치지 않고 트랜스포트 계층끼리 왔다갔다 하는 건가요? 네 맞습니다.

  2. 1번이 맞다면, 클라이언트(여러분)에서 ACK 패킷을 보낸 후 애플리케이션 계층에 통신 가능하니 데이터를 달라고 따로 신호를 주나요? 네 맞습니다.

 

클라이언트(192.168.0.5)와 서버(192.168.0.10)이 연결되어 있을 때 클라이언트가 웹 브라우저에 서버의 주소인 192.168.0.10을 입력하고 엔터를 눌렀을 때 어떻게 동작하는지 설명드리겠습니다.

image위 사진에서 오른쪽을 보게되면 데이터가 어떻게 이동하는지 설명이 되어 있습니다.

  1. 가장 먼저 3way handshake를 위해 클라이언트에서 서버쪽으로 SYN패킷을 보냅니다.(4-3-2-1)

  2. 그리고 서버에서 클라이언트로 SYN/ACK 패킷을 보냅니다.(4-3-2-1)

  3. 마지막으로 클라이언트에서 서버로 ACK 패킷을 보내 3way handshake를 끝냅니다.(4-3-2-1)
    이 과정까지 애플리케이션 계층은 이용하지 않고 트랜스포트 계층을 이용했습니다. TCP만을 이용한 것이죠.

  4. 3way handshake가 완료되었다면 클라이언트는 어플리케이션 계층의 HTTP를 이용해 메인 페이지를 요청합니다. HTTP를 이용해 생성한 메시지는 다음과 같이 구성되어 있습니다.

image이 메시지는 서버에게 전송됩니다. (5-4-3-2-1)

  1. 이 메시지가 서버에 도착하게 되면 서버는 메인 페이지의 데이터를 HTTP를 이용해 클라이언트로 응답합니다. (5-4-3-2-1)

 

궁금증이 해결되셨나요? 😄

앙뜨님의 프로필 이미지
앙뜨
질문자

친절한 답변 정말 감사합니다 ! 아직 궁금한 부분이 있는데요,

3way handshake가 완료되었다면 클라이언트는 어플리케이션 계층의 HTTP를 이용해 메인 페이지를 요청합니다. HTTP를 이용해 생성한 메시지는 다음과 같이 구성되어 있습니다.

image이 메시지는 서버에게 전송됩니다. (5-4-3-2-1)


혹시 요 부분에서, 애플리케이션 계층이 트랜스포트 계층에서 이루어진 3way handshake가 완료되었는지 어떻게 알까요? 애플리케이션 계층에서는 트랜스포트 계층에서 일어나는 일을 신경쓸 필요가 없다고 하는 설명을 보았는데, 그럼 어떤 타이밍에 애플리케이션 계층의 http 요청이 일어나는지 해서요.

그리고 제가 질문한 내용을 스스로 알아보기 위해 혹시 참고할만한 책이나 문서가 있을까요? (혹은.. 검색 키워드)

질문 읽어주셔서 감사합니다!

감자님의 프로필 이미지
감자
지식공유자

클라이언트가 서버와 데이터를 주고 받기 위해서는 어떤 애플리케이션이 있을겁니다.
여기서는 웹 브라우저가 그 애플케이션이죠.
웹 브라우저는 하나의 프로토콜만 사용하는 것이 아니라 여러개의 프로토콜을 이용해 만들어집니다.
웹 브라우저 검색창에 google.com을 입력했다면 다음과 같은 단계로 동작합니다.

image

1. google.com을 DNS를 이용해 IP주소를 알아냄(애플리케이션 계층까지 이용)
2. 해당 IP주소로 3way handshake 요청(트랜스포트 계층까지 이용)
3. 웹 브라우저는 서버와 3way handshake가 성공했는지, 실패했는지 알 수 있음
   따라서 3way handshake가 성공했다면 HTTP를 이용해 HTTP Request 메시지를 전송(애플리케이션 계층까지 이용)

정리를 하면 3way handshake는 HTTP 메시지를 보내기 전에 '별도'로 진행하는 연결 과정입니다.
마찬가지로 4way handshake도 HTTP 통신을 끝낼 때 '별도'로 진행합니다.

이 문서를 참조하시면 도움이 될 것 같습니다 ㅎㅎ

책같은 경우는 '컴퓨터 네트워크'를 검색해 마음에 드는 전공책을 골라서 공부하시면 도움이 될 것 같네요 😊

 

앙뜨님의 프로필 이미지
앙뜨

작성한 질문수

질문하기