Basics of Computer Science and Network

Network (TCP/IP 4계층)

마손리 2023. 3. 26. 17:18

TCP/IP

서로 멀리 떨어진 다른 기기들이 정보를 주고 받는데 쓰이는 통신규약 중에 하나이며 현재 가장 많이 사용되고 있는 인터넷 프로토콜이다. 크게 네트워크 접근 계층, 인터넷 계층, 전송 계층, 응용 계층, 이렇게 4계층으로 이루어저 있다.

 

  계층 주요 프로토콜 역할
4층 응용 계층 HTTP, DNS, FTP 어플리케이션에 맞추어 통신
3층 전송 계층 TCP, UDP IP와 어플리케이션을 중개하며 데이터를 전달
2층 인터넷 계층 IP, ICMP, ARP, RARP 네트워크 주소를 기반으로 데이터를 전송
1층 네트워크 접근 계층 Ethernet, Wifi 컴퓨터를 물리적으로 네트워크에 연결

여기에 많은 프로토콜들이 등장하는데 모두 어떠한 것의 특별한 규약이지만 서로 다른 계층에 있는 프로토콜들은 전혀 다른 역할을 수행한다.

 

TCP/IP의 4계층에서 데이터가 발신자에서 수신자에게로 넘어가는 기본적인 흐름이다.

 

 

 

IP 주소와 MAC 주소

컴퓨터나 스마트폰 등의 네트워크 장비기기간의 통신을 위한 각각의 유니크한 번호를 부여 받게 되는데 이것이 IP 주소이며 MAC주소네트워크 기기가 만들어질때 제조사로 부터 할당 받는 고유한 시리얼이다. MAC주소는 IP와 같은 계층인 인터넷 계층의 ARP를 이용하여 찾게 되며 IP주소와 MAC주소 두가지가 있어야 네트워크 통신이 가능하다.

 

최종적으로 네트워크 접근 계층인 이더넷에서는 네트워크상의 송수신 상대를 찾고자 MAC주소를 사용하며 TCP/IP에서는 IP 주소를 사용한다.

 

 

패킷 교환 방식

기기끼리의 통신에는 회선 교환(Circuit Switching) 방식과 패킷 교환(Packet Switching) 두가지 방식이 사용된다.

 

우리가 흔히 전화통화를 할때 사용하는 방식은 회선 교환 방식이며 서로가 이어진 회선들을 연결하여 일대일로 정보를 전달할수 있는 통신 방법이다.

서킷 교환 방식

 

하지만 컴퓨터 네트워크에서는 데이터 교환 방식이 일대일이 아닌 다대일 혹은 다대다 방식이어야 되며 이것을 위해 패킷 교환 방식이 생겨 났다.

 

패킷 교환 방식

패킷 교환은 원본 데이터를 패킷(packet) 이라고 하는 작은 단위로 나누고, 여러 회선을 공용해 통신을 주고 받는다.

하나의 패킷은 헤더와 페이로드로 구성되어 있고, 헤더에는 어떤 데이터의 몇번째 데이터인지의 정보와 보내는 곳 이나 최종 목적지에 대한 정보 등이 들어있다.

 

이렇게 주고받을 데이터를 작게 분할하여 전송하더라도, 도착한 곳에서 원래대로 복원한다.

패킷 구성

 

이러한 패킷교환 방식은 다대다 통신에 적합하지만 몇가지 단점들이 드러나게 되는데

  • 비연결성
  • 비신뢰성

패킷을 받을 대상이 없거나 특정한 이유로 서비스 불능 상태에 빠져도 데이터를 받을 상대의 상태 파악이 불가능며 패켓을 그대로 전송하는 비연결성 문제와 중간에 패킷이 사라지더라도 보내는 기기 측에서는 알 수 있는 방법이 없고 서로 다른노드를 거쳐서 전송되는 특성상, 보내는 기기측에서 의도한 순서대로 데이터가 도착하지 않을 수 있는 등의 비신뢰성 문제가 있다.

 

또한, 한 IP에서 여러 애플리케이션이 작동하는 경우 특정할 수 없는 한계가 있으며 이러한 한계들을 극복하기 위해 TCPUDP가 사용된다.

 

 

TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)

전송계층에 속하는 TCPUDP 2계층에서 동작하는 IP 와 4계층에서 동작하는 애플리케이션(HTTP 등)을 중개하는 역할을 한다.

 

TCP와 UDP는 중개하는 역할을 하는점에서는 동일하지만, 서로 다른 특징을 가지고 있다.

  TCP UDP
서비스 타입 연결 지향적 프로토콜 데이타그램 지향적 프로토콜
신뢰성 데이터 전송 표적 기기까지의 전송을 보장 표적 기기까지의 전송이 보장되지 않음
순서 보장 전송하는 패킷들의 순서 보장 패킷 순서 보장이 안된다. 패킷 순서를 보장 하고 싶다면, 어플리케이션 레이어에서 관리되어야 함
속도 UDP에 비해 느림 TCP에 비해 빠르고 단순하며 효율적인 속도를 가짐

 

TCP는 통신 신뢰성을 높이는 기능이 구현되어 있다. UDP에는 그러한 기능이 없는 대신 보다 높은 속도와 효율성을 제공한다.

 

이러한 이유로, 데이터의 신뢰성을 필요로하는 애플리케이션은 TCP로, 빠른 속도나 실시간 통신이 중요한 애플리케이션의 경우 UDP로 구분해서 사용한다.

 

특히 웹애플리케이션에서 많이 사용하는 HTTP의 경우 모든 데이터를 제대로 송수신이 가능해야 하는 특성상, TCP를 사용다.

 

TCP 3-way handshake

TCP 3-way handshake 는 양 끝단의(end to end) 기기의 신뢰성 있는 데이터 통신을 위해, TCP 방식이 연결을 설정하는 방식이며 3단계를 통해 상대방을 연결한다.

  • Step 1 (SYN): 처음으로, sender는 receiver와 연결 설정을 위해, segment(패킷)를 랜덤으로 설정된 SYN(Synchronize Sequence Number)와 함께 보낸다. 이 요청은 receiver에게 sender가 통신을 시작하고 싶다고 알린다.
  • Step 2(SYN / ACK): receiver 는 받은 요청을 바탕으로 SYN/ACK 신호 세트를 응답한다. Acknowledgement(ACK)는 응답으로 보내는 segment가 유효한 SYN요청을 받았는지를 의미한다.
  • Step 3(ACK): 마지막 단계에서, sender는 받은 ACK를 receiver에게 전송을 하면서, 신뢰성 있는 연결이 성립된다.

위의 연결작업이 끝난뒤 클라이언트(sender)와 서버(receiver)간의 request와 response를 교환하고 TCP 4-way handshake를 거처 연결을 끊는 것이 기본 원리이며 이후, 클라이언트가 서버에 또다시 request를 보낼경우 위의 순서가 반복 진행 된다.

 

하지만 HTTP 1.1 버전 이후에 나온 keepalive 기능으로 인해 서로간의 연결 이후 여러번의 데이터를 교환한뒤 연결을 끝내는 방식이 가능해 젔다.

  • 예시) 연결성립(TCP 3-way handshake) -> 요청(request) -> 응답(response) -> 요청 -> 응답 ->  연결 끊기(TCP 4-way handshake)

 

참조 1)   

https://ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EC%A0%9C%EC%96%B4_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

참조 2)

https://velog.io/@pu1etproof/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%8A%A4%ED%84%B0%EB%94%94-3%EC%A3%BC%EC%B0%A8-TCP-3-way-handshake-%EC%9D%B4%ED%9B%84

참조 3)

https://velog.io/@gndan4/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%9D%91%EC%9A%A9-%EA%B3%84%EC%B8%B5#:~:text=%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%97%90%EC%84%9C%20%ED%98%B8%EC%8A%A4%ED%8A%B8%20%EC%9D%B4%EB%A6%84%EC%9D%84,%EC%A0%84%EC%86%A1%ED%95%98%EB%8A%94%20%EC%97%AD%ED%95%A0%EC%9D%84%ED%95%9C%EB%8B%A4.

 

 

UDP

UDP는 TCP와 같은 신뢰성을 높이는 기능은 없지만 몇가지 장점을 가지고 있다.

  1. 애플리케이션의 정교한 제어가 가능하다: TCP의 경우 receiver가 전송 받을 준비가 될 때까지 세그먼트를 반복적으로 재전송한다. 실시간 전송에 대한 요구가 큰 애플리케이션 들은 높은 latency를 지양하므로 약간의 데이터 손실을 감수하는 대신 개발자 스스로가 이를 보완하기 위해 애플리케이션에 추가 기능을 구현할 수 있다.
  2. 연결설정에 무관하다: TCP 3-way handshake 가 없는 udp는 예비과정 없이 바로 전송을 시작한다. 설정단계에서 발생하는 지연이 없는 만큼, 반응속도가 빠르다. 또한, TCP 가 신뢰성을 위해 많은 파라미터와 정보 전달이 필요함과 비교해 UDP는 연결설정 관리를 하지 않기 때문에 어떠한 파라미터도 기록하지 않는다. 이때문에 서버에서도 TCP와 비교에 더 많은 클라이언트를 수용이 가능하다.

위와 같은 특징들로 도메인네임서비스(DNS), 스트리밍서비스, 온라인 게임등 속도가 중요한 인터넷 서비스에서 많이 사용된다.

 

 

PORT

IP프로토콜만 가지고는 한 IP를 가진 서버에서 여러 어플리케이션이 동작할 때 하나의 어플리케이션을 특정해 통신할 수 없다. 포트번호는 대상 IP 기기의 특정 어플리케이션(connection endpoint)을 특정하여 어떠한 어플리케이션인지 식별할 수 있다.

위 그림과 같이 한 서버 인스턴스에서 웹서버와 메일서버 두개를 동시에 실행 중이라고 가정할때 IP주소만으로는 어느 서버로 요청을 보내는지 알 수 없다. 이러한 경우를 위해, 포트 번호를 사용해 receiver를 특정해 어느 서버로 보내는 요청인지 특정할 수 있다.

 

자주사용되는 PORT 번호

Port number Protocol name Transport protocol dscription
80 HTTP TCP 웹서버 접속
443 HTTPS TCP 웹서버 접속(SSL)
110 POP3 TCP 메일 읽기
25 SMTP TCP 메일서버간 메일 전송
22 SSH TCP 컴퓨터 원격 로그인
53 DNS UDP DNS 질의
123 NTP TCP 시간 동기화

그외의 포트 번호 : https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

 

이미 정해진 포트 번호라도, 필요에 따라 자유롭게 사용할 수 있으며 잘 알려진 포트의 경우 URI 등에 명시하지 않지만, 그 외의 잘 알려지지 않은 포트(:8080과 같은 임시 포트)는 반드시 명시해야함.

 

 

'Basics of Computer Science and Network' 카테고리의 다른 글

SSR과 CSR  (0) 2023.03.26
웹 애플리케이션  (0) 2023.03.26
DNS  (0) 2023.03.26
프로그래밍의 이해  (0) 2023.02.14
컴퓨터의 이해  (0) 2023.02.14