안녕하세요, 여행벌입니다.

오늘은 저번 IP(인터넷프로토콜)에 이어서 TCP / UDP 프로토콜에 대해서 정리해보겠습니다.

TCP / UDP 프로토콜은 인터넷 계층의 트랜스포트 계층에서 사용되는 프로토콜로 서로 다른 장/단점을 지니고 있습니다.


[ TCP 프로토콜 (전송 제어 프로토콜) ]

TCP 프로콜은 Transmission Control Protocol 의 약자로 전송 제어 프로토콜입니다. IP 프로토콜의 여러 문제점들을 해결해주는 프로토콜로 대용량의 데이터를 보내기 쉽게 작게 분해하여 상대에게 보내고, 제대로 도착했는지 확인하는 프로토콜입니다. 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등의 내용을 포함하고 있습니다.

  • 연결지향 - 3 way handshake
  • 데이터 전달 보증
  • 순서 보장
  • 신뢰할 수 있는 프로토콜

[ TCP 3 way handshake ]

TCP 프로토콜은 데이터를 보낼 상대가 받을 수 있는 상태인지 확인하기 위해 3-Way-Handshake 기법을 사용합니다. 물리적으로 연결되는 것이 아니라 논리적으로 연결하는 과정으로 IP 프로토콜의 비연결성 문제를 해결합니다.

3-Way-Handshake는 SYN ACK 라는 TCP 플래그를 이용해 패킷이 보내졌는지 여부를 확인하는 방법입니다. 

( SYN : 접속요청 / ACK : 요청수락 )

과정은 다음과 같습니다.

 

​ 1) 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보냅니다.

​ 2) 서버는 클라이언트의 요청인 SYN 패킷을 받고, 클라이언트에게 요청을 수락한다는 ACK 패킷과 SYN 패킷을 보냅니다.

​ 3) 클라이언트는 서버의 수락 응답인 ACK 패킷과 서버가 보낸 SYN 패킷을 받고 SYN 패킷을 잘 받았다고 ACK 패킷을 서버로 보냅니다.

 

클라이언트가 SYN 플래그로 상대에게 접속함과 동시에 패킷을 보내고, 서버는 SYN/ACK 플래그로 클라이언트에 접속함과 동시에 패킷을 받은 사실을 전합니다. 마지막으로 클라이언트가 ACK 플래그를 보내 패킷 교환이 완료되었음을 전합니다.

참고!

물리적으로 연결된거는 아님! 가상 연결!

[ TCP 4 way handshake ]

TCP 프로토콜에서는 연결을 끊기 위해서 4-Way-Handshake 기법을 사용합니다.

​ 1) 클라이언트가 TCP Header의 flags 필드의 FIN 을 셋팅하여 연결을 종료하겠다는 FIN 플래그를 전송합니다.

​ 2) FIN 플래그를 받은 서버는 ACK 패킷을 전송하고 서버를 CLOSE_WAIT 상태로 TimeOut을 겁니다.

​ 3) 서버는 데이터를 모두 보내고 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 플래그를 전송합니다.

​ 4) 클라이언트는 FIN 플래그를 확인했다는 ACK 패킷을 서버로 보내고 서버는 ACK 패킷을 받고 연결을 close 합니다.

TCP Header에는 Code Bit(flag bit) 라는 6Bit 짜리 Bit 가 존재하고, Urg-Ack-Psh-Rst-Syn-Fin 순서로 해당 패킷이 어떤 내용을 담고 있는 패킷인지를 나타내는 비트가 존재합니다.

SYN : Synchronize Sequence Number

ACK : ACKnowledgement

 

[ PORT ]

같은 IP 내에서 프로세스를 구분하는 주소입니다. 같은 IP 주소에 있는 여러 개의 애플리케이션을 구분하기 위해 등장한 개념으로 TCP 프로토콜은 PORT 정보를 가지고 있습니다.

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023 : 잘 알려진 포트 --> 사용하지 않는 것이 좋음!
  • HTTP - 80포트
  • HTTPS - 443포트

IP를 아파트, PORT를 몇동 몇호 라고 생각하자!

 

[ UDP 프로토콜 (사용자 데이터그램 프로토콜) ]

UDP 프로토콜은 IP프로토콜과 크게 다르지는 않습니다. PORT 정보랑 체크섬 정보만 추가되서 연결을 보장하지 않고, 데이터 전달 보증, 순서 보장을 모두 지원해주지 않습니다. 하지만 그만큼 TCP 프로토콜에 비해 빠르기 때문에 HTTP3에서는 UDP 프로토콜을 기반으로 동작합니다.

참고!

기존에는 대부분 TCP 프로토콜 기반이였으나 HTTP3에서는 UDP 프로토콜 기반!

 

[ DNS ( 도메인 네임 시스템 ) ]

IP 주소는 외우기도 어렵고, 변경될 수도 있으므로 IP 주소로 통신하는데 어려움이 있었습니다. 그래서 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 해주는 시스템인 도메인 네임 시스템이 등장했습니다.

 

[ URI (Uniform Resource Identifier) ]

네트워크 상에서 자원이 어디있는지를 알려주는 규약을 URI 라고 합니다. 우리가 흔히 자주 사용하는 URL 은 URI에 포함된 개념이고 URN 과 URL 이 합쳐져서 URI 가 되는데 URN 은 사용하지 않으므로 URI를 URL로 이해해도 괜찮습니다.

  • Uniform : 리소스를 식별하는 통일된 방식
  • Resource : URI로 식별할 수 있는 모든 것
  • Identifier : 다른 항목과 구분하는데 필요한 정보

URI 는 로케이터(locator), 이름(name) 또는 둘 다 이용해서 자원을 식별.

URL 은 로케이터(locator) 으로 자원을 식별

URN 은 이름(name) 으로 자원을 식별

network01_2


이상으로 TCP / UDP 프로토콜 정리를 마치겠습니다.

 

참고

- 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식

- 그림으로 배우는 HTTP&Network Basic

'Dev > Network' 카테고리의 다른 글

[Network] HTTP_Response_상태코드  (0) 2021.04.23
[Network] HTTP_Message  (0) 2021.04.22
[Network] HTTP_Method  (0) 2021.04.21
[Network] HTTP ( HyperText Transfer Protocol )  (0) 2021.04.20
[Network] 인터넷, IP프로토콜  (0) 2021.04.16

+ Recent posts