CS

[Network] TCP와 3 way handshake & 4 way handshake

머털박사 2022. 9. 6. 11:31

TCP가 무엇인가요?

TCP란 Transmission Control Protocol의 줄임말로 해석하면 전송 제어 프로토콜(규약)입니다.

왜 TCP를 알아야 하나요?

오늘날 대부분의 통신은 TCP/IP 환경 기반이다. 코딩을 위해 컴퓨터 지식을 공부한다면 TCP/IP에 대한 내용을 이해해야 한다.

공부하다보면 OSI 7 Layer가 더 중요하게 다뤄진다. 그런데 왜 현재 통신은 TCP/IP 기반일까? 

개념적으로는 OSI 7 Layer가 더 중요하나 상업적으로 TCP/IP가 성공했다. 출시일이 빠른 탓에 통신 프로토콜이 급하게 미국 국방성이 TCP/IP를 공식적으로 채택했다. 그 탓에 오늘날 인터넷은 TCP를  근간으로 발전했다.

TCP와 OSI 모델의 비교

TCP/IP 프로토콜 스택 4계층(Or 5계층)에 대해 설명하세요

계층이름 설명 주요 프로토콜
어플리케이션 응용 프로그램에서 데이터 처리 HTTP, HTTPS, POP3, SMTP, FTP
전송 어플리케이션에서 넘어온 데이터 검증, 재전송 등 각종 제어 TCP, UDP
인터넷 데이터를 목적지까지 효율적으로 전달 IP, ICMP
네트워크 인터페이스 실질적 데이터를 전송 Ethernet, Wi-Fi

4계층 어플리케이션 계층은 사용자와 소프트웨워 간의 소통을 담당한다.

3계층 전송 계층(Transport Layer)는 통신 노드 간의 실회성 있는 데이터 전송을 보장한다.

2계층은 인터넷 계층(Internet Layer)는 패킷을 최종 목적지까지 라우팅한다.

1계층은 네트워크 인터페이스 계층(Network Interface Layer)은 데이터를 전기 신호로 변환한 뒤, 물리적인 주소인 MAC 주소를 사용해 알맞은 기기로 전달한다.

왜 TCP는 등장했나요?

전쟁 상황에서도 안전하게 데이터 전달하기 위해서.

지금에서는 네트워크를 상업적이고 놀이적인 목적으로 사용하지만 초창기에는 오직 군사적인 목적으로 사용됐다. 1969년에 미국 국방성 프로젝트 arpanet이 그 시작이다.

이전에 사용되던 회선교환(Circuit Switching) 방식은 통신을 중계해주던 곳이 고장나거나 선 하나만 끊어져도 바로 제대로 작동하지 않았다. 이후에 나온 것이 패킷교환(Packet Switching) 방식이다. 이건 선 하나만 남아있어도 통신이 끊어지지는 않았다. 그러나 안정성이 떨어졌다. 중간에 데이터가 유실되거나, 전달 속도가 늦는 등의 문제가 발생했다. 이러한 문제를 해결하기 위해 등장한 것이 TCP이다.

만약 TCP가 없다면?

데이터가 순차적으로 전송되는 걸 보장할 수 없다. 즉, 데이터의 유실이 발생할 수 있다. “안녕하세요”라고 이메일을 보냈는데 상대방이 “안 세요”라고 받는 일이 발생할 수 있다.

TCP의 특징은?

  1. 연결형 서비스로 가상 회선 방식
  2. 신뢰성 있는 데이터 전송
  3. 순서 보장, 상대적으로 느림
  4. 흐름 제어(Flow Control) 및 혼잡 제어(Congestion Control)

3 Way-Handshake란?

송신자와 수신자 간의 연결을 확인하기 위한 방법

 

A → B : 내 말 들려? B → A: 잘들려. 내 말은 들려? A→B: 잘 들려!

TCP의 특징인 연결형 서비스는 이것으로 나타난다. SYN (synchronize sequence numbers)는 연결을 확인하기 위해 보내는 무작위의 숫자다. ACK(Acknowldgements)는 이전에 받은 SYN에 +1을 하여 잘받았다는 의미를 전달한다.

클라이언트가 서버와 연결하기 위해서 SYN을 보내면, 서버는 잘받았다는 뜻으로 클라이언트에 ACK와 SUN을 보낸다. 이후 클라이언트는 서버에 잘 받았다는 뜻으로 ACK를 전달한다.

이 과정에서 클라이언트와 서버 사이에 3개의 Segmnet가 교환된다. 그래서 3-way handshake라고 칭한다.

4-Way Handsake란?

3-way handsake한 연결을 해제하는 과정이다.

클라이언크가 연결을 종료하겠다는 FIN 플래그를 전송한다. 서버에서 확인했다는 것을 알기위해 ACK 플래그를 전송한다. 서버의 통신이 끝났으면 연결을 종료한다는 의미에서 클라이언로 FIN 플래그를 보낸다. 클라이언트는 확인했다는 의미로 ACK 플래그를 전달한다.

만약 www.google.com을 주소창에 입력하면 무슨 일이 일어날까?

구글 웹 서버에 80번 포트로 HTTP Request를 보낸다는 의미와 동일하다.

우선적으로 HTTP Request를 보내기 위해서는 각 계층에 필요한 정보를 담은 패킷을 만든다. 패킷에는 TCP 프로토콜 4계층인 네트워크 인터페이스 레이어(ex 이더넷) + 인터넷 레이어(ex IP) + 통신 레이어(TCP) + 어플리케이션 레이어(HTTP)가 들어간다.

:authority: www.google.com
  :method: GET
  :path: /
  :scheme: https
  ...
  ...

일차적으로 어플리케이션 레이어는 HTTP Request 헤더가 들어간다.

통신 레이어(trasport layer)에는 TCP 헤더가 들어간다. 여기서 중요한 것은 SP(출발지 포트번호)와 DP(목적지 포트번호)이다. 출발지 포트는 내 컴퓨터에서 만든 소켓 포트 번호이라 알아서 처리해준다. 목적지 포트번호는 url 뒤에 명시적으로 언급되어 있지 않다면 기본적으로 80번 포트로 향한다.

인터넷 레이어(Internet Layer)에는 IP 헤더가 들어간다. 여기서 중요한 것은 SA(출발지 IP주소)와 DA(목적지 IP)주소이다. 지금은 도메인 밖에 모르기 때문에 도메인 정보로 목적지 IP주소를 알아내야합니다. 따라서 도메인 서버에 DNS 쿼리를 보내고 IP 주소로 응답받는다.

네트워크 레이어(Network Access Layer)에는 이더넷(Ethernet) 헤더가 들어간다. 여기서 중요한 것도 마찬가지로 SA(출발지 MAC 주소)와 DA(목적지 MAC 주소)이다. 목적지는 구글의 MAC주소가 아니라 물리적으로 연결될 라우터(공유기) 같은 것을 의미한다.

이후 패킷을 전송하기 전에 3 Way Handsaking이 필요하다. TCP는 연결 지향성 프로토콜이기 때문에 송신과 수신이 서로 연결되는 작업이 필수적이다 첫 번째로 클라이언트 → 서버, SYN 패킷을 보낸다. 두 번째로 서버 → 클라이언트, SYN 패킷을 받으면 클라이언트에게 요청을 확인했다는 의미로 ACK와 SYN 플래그가 설정된 패킷을 보낸다. 세 번째로 클라이언트 →서버에 확인했다는 의미로 ACK 패킷을 보낸다.

라우팅을 통해 패킷을 목적지 서버로 전송한다. 내 화면에 “www.google.com”에 해당하는 HTML을 브라우저에 띄운다.

HTTP 요청 및 응답 과정이 끝났으면 4 way handshake로 연결을 종료한다.

 


출처

https://seongonion.tistory.com/74

https://ddka.tistory.com/entry/연결형-서비스와-비연결형-서비스

https://velog.io/@averycode/네트워크-TCPUDP와-3-Way-Handshake4-Way-Handshake

https://engineeringcode.tistory.com/50

https://steady-coding.tistory.com/505

https://wooono.tistory.com/507

https://www.youtube.com/watch?v=BEK354TRgZ8

'CS' 카테고리의 다른 글

[Network] OSI 7계층  (0) 2022.09.07