티스토리 뷰

네트워킹

Transport Layer

4whomtbts 2020. 5. 26. 00:13

Transport Layer의 목적은 "서로 다른 두 호스트에서 실행중인 프로세스들 간의 logical 한 communication을 제공한다"

즉, 서로 수 천 km 가 떨어져 있는 머신에서의 프로세스일지라도, 서로 연결되어 있는 것 처럼 작동한다는 것이다.

두 end-to-end host 사이의 통신을 위해서 여러 라우터를 거치고, ISP 를 거치고 나게 되므로써 가능하게 된다.

두 호스트는 분명히 연결되어 있지만 직접적으로 연결되어 있지 않고 여러 Network infrastructure을 통해서 간접적으로

연결되어 있다는 것이다. 

 

Transport layer는 이러한 복잡한 infrastructure를 추상화 시켜서 두 호스트가 직접 연결되어 있는 것 처럼 통신을 할 수

있도록(logical communication) 서비스를  제공해주어서 서로에게 메세지를 보내는데 복잡한 물리 네트워크 구성을

신경쓰지 않도록 해주는 역할을 한다.

 

Application Layer에서 메세지를 전송하면 Transport Layer로 해당 메세지가 내려온다 Transport layer에서는 

Application Layer의 메세지를 transport-layer packet으로 잘게 나누어서 transport layer만의 header를 나누어진

조각들에 이어붙여서 segment 로 만든다.

여기서 segment 라는 terminology가 나오는데 , transport layer에서의 packet은 특별히 segment 라고 부른다.

이제, transport layer에서 만들어진 segment는 아래의 layer인 network layer로 보내진다. 

Network layer 에서도 마찬가지로, segment 에 여러 정보를 붙여서 캡슐화를 한 다음 network layer만의 패킷으로

만드는데, 이 패킷은 특별히 datagram 이라고 부른다. 이 datagram을 목적지로 전송한다.

 

이제 이렇게 전송이 시작된 datagram은 네트워크 인프라의 세계의 톨 게이트도 거치고 국도도 거치고 하면서 목적지의 

호스트에게 도달하게 된다.  이렇게 목적지 호스트의 network layer는 datagram을 받아서 segment 를 추출해낸다.

그리고 이 segment 를 transport layer에 올려주고, transport layer에서는 송신측이 조립한 segment를 다시 분해해서 

Application layer 로 넘겨준다. 

 

Transport layer 와 Network Layer 사이의 관계

이 두 layer는 사뭇 비슷 해 보인다. 하지만 핵심적인 차이가 있는데

Transport layer는 앞서 언급했듯 서로 다른 호스트 사이에서 실행되고 있는 프로세스 간의 logical communication의 지원이다. 

하지만, Network layer는 서로 다른 호스트 사이의 logical communication 의 지원이다.

참고서적에 real-life example 이 있는데, 

A와 B라는 집이 각각 있다고 하자, A와 B는 사촌지간이다. 두 집안 사이는 서로 편지를 보내는걸 좋아해서 자주 편지로

소통하는데, A와 B에 각 각 6명의 가족이 있고 A의 집에서는 Ann 이 주기적으로 우편함에서 B 집에서 온 편지들을 

일괄적으로 수거해서 A 집안의 나머지 5명의 가족들에게 편지를 알맞게 나누어 주고, B집엣너느 Bill 이 이러한 역할을

한다. 

위의 예제를 layer에 대입하여 보면 

Application message는 편지이고

process 는 A 집에서 Ann을 제외하고, B 집에서 Bill을 제외한 가족들이다(편지를 실제로 받게되는) 

host 는 A, B 집 각 각이 host 인 셈이다. 

network layer protocol 은 우편서비스 인 것 이다. 

 

network layer는 우편/택배와 매우 비슷하다는 것을 알 수 있다. 택배를 보낼 때 단지 상대방의 주소만 적어놓고 보내면 

택배회사에서는 접수 된 택배를 여러 물류창고와 집하장을 거쳐서 알맞교 효율적으로 분류하고 이동시켜서 목적지에 

가져다 주기 때문이다.

Multiplexing 과 Demultiplexing

앞서 말했듯이, transport layer에서 수신자 측은 network layer에서 추출해준 segment 를 받게된다.  

이제 transport layer의 역할은 송신자 측에서 보내온 segment 를 올바른 프로세스에 가져다 주는 것이다.

왜냐하면, transport layer의 역할은 서로 다른 호스트에서 실행되고 있는 프로세스들 사이의 논리적인 소통이기 때문이다.

수신자 측의 transport layer에서는 송신자 측에서 segment 를 만들때 덧붙였던 header를  보고서 이 segment 가 

전달되어야 할 port를 알게되고, 그 port 를 물고있는 socket에다가 전달 해준다. 이러한 작업을 demultiplexing 이라고 한다. 

컴퓨터구조 같은 수업에서 나오는 회로와 같은 역할을 한다.  

 

반대로, source host에서 서로 다른 소켓에서 온 데이터 청크들을 모아서 캡슐화하는 작업을 해서 만들어진 segment를 

network layer에 던져주는 것을 multiplexing 이라고 한다.

 

아까, A와 B집의 예제를 여기에 빗대어보면 

Bill 과 Ann 이 각자 자신의 집으로 들어온 우편들을 정리해서 알맞은 가족에게 나누어 주는 과정 => demultiplexing

Bill 과 Ann 이 각자 자신의 집의 구성원들이 쓴 편지들을 우편 시스템을 통해 부치는 것 => multiplexing

 

이제, 이 multiplexing과 demultiplexing이 실제로 어떻게 이루어지는지 보면, 

transport layer에서 multiplexing은 

1. 유일한 식별자를 가지는 소켓이 필요하고

2. 각 각의 segment는 이것이 배달되어야 할 socket의 정보를 가지고 있는특별한 필드가 있다.

이 특별한 필드는 각 각, source port number field와 destination port number field 이다. 

각 각의 포트 넘버는 16bit 로 이루어져 있고, 따라서 0~65535 범위의 포트를 표현할 수 있다. 

transport layer에서 segment 의 field 구성

 

Connection-less Multiplexing and Demultiplexing 

UDP 를 사용하는 경우이다. 19157번 포트를 할당받은 Host A가 46428 포트를 할당받은 Host B에 데이터를 보내고 싶다고 하면 

A의 transport layer의 segment 는 application data와, source port number(19157)과 destination port number(46428)을

가지게 된다. 이 segment가 B에 도착하게 되면, B의 segment에 적혀있는 destination port 인 46428을 인식하고 자신의 46428 소켓에 보내준다.

따라서, 다른 Host C가 있어서 A와 똑같이 B의 46428에 데이터를 보냈다면, A와 C의 segment는 모두 B의 같은 port에

매핑되는 것이다.

그렇다면, 위의 표에서 source port 에 대한 필드는 왜 있는건지 궁금할텐데,

만약에 B가 A에게 받은 segment를 바탕으로 A에게 뭔가 응답을 하고 싶을 경우에, A에서 segment 를 만들 때 첨가한

source port number에다가 응답을 보내주기 위함이다.

Connection-Oriented Multiplexing and Demultiplexing 

TCP 를 사용하는 경우이다. UDP와 다른 점은, TCP는 4개의 tuple 로서 구별된다는 점이다.

(source IP address, source port number destination IP address, destination port) 따라서, 수신측 host는 

4개의 값 모두를 이용해 적절한 socket 에다가 전달해준다. 

UDP에서는 A, C 두 호스트에서 B의 같은 port에 보낸 segment가 모두 B의 한 곳으로 전달되었다. 

하지만, TCP에서는 다르다. 왜냐하면 TCP는 아래와 같이 작동하기 때문이다.

1. 수신 host는 welcoming socket이라는 특별한 소켓이 있다. 특정한 port에 오는 연결신호를 기다리다가 신호가 오면 연결을 맺어준다.

2. 수신측에 12000 포트에다가 데이터를 보내면 (1)과정에서 송신측 host 를 연결하기 위해 할당한 port에다가 데이터를 보내준다.

아래와 같은 방식으로 통신이 진행되는 것이다.

위와 같은 동작 방식 때문에 TCP 는 Connection oriented 라고 불리운다.

 

이렇게 보았듯이, TCP와 UDP 의 통신방식에는 차이점이 존재하고, 따라서 각자의 장점과 단점이 존재한다.

따라서, TCP와 UDP 각 각의 장단점을 잘 숙지해두어서, 적절한 프로토콜을 선택해서 사용해야 한다.

'네트워킹' 카테고리의 다른 글

Hot potato Routing  (0) 2020.06.22
Network Layer  (0) 2020.06.21
TCP Congestion control  (1) 2020.06.19
TCP 의 Flow control  (0) 2020.06.19
댓글