Application Layer 는 사용자가 다루며, 이를 실행시키면 네트워크 프로세스가 되며. 사용자 계층의 계층이다. OS가 제공하는 서비스 형태를 받는다.


Transport Layer

트랜스포트 계층은 OS 내부에 구현되어 있다. 결국 해당 계층은 UDP 와 TCP를 다루는 이야기이다. 애플리케이션 계층에서 만들어진 데이터의 단위를 Message라고 한다. ex. http message 이 해당 데이터가 트랜스포트 계층으로 내려오면 Segment 라고 부르는 전송단위에 들어간다. 트랜스포트 계층에서 네트워크 계층으로 내려오면 전송 단위인 Packet 으로 해당 데이터가 들어간다.


이렇게 데이터가 계층적으로 순차적으로 움직이며 Encapsulation 이 되고 있는 것이다.

네트워크 계층과 트랜스포트 계층의 차이는 논리적인 커뮤니케이션의 단위이며 네트워크 레이어는 라우터들이 어떻게 연결되어있는지에 대한 이야기이다.


TCP

- Reliable in-order delivery
사용자가 보내는 데이터가 유실되지 않고 목적지까지 도달한다.

사용자가 보내는 데이터가 순서대로 목적지까지 도달한다.


flow-control & congestion-control
사용작 1GB 데이터를 TCP를 통해 보낸다. 속도는 조절 해야한다. 속도 조절에 대한 이야기이다. (목적지가 받아들일 수 있는 속도 고려(flow-control), 현재 네트워크의 상태 고려(congestion-control))


UDP 

아무것도 하지 않는다.


Mutiplexing & Demultiplexing

트랜스포트 계층에서 제공하는 기본적인 기능

하나의 머신에서 여러 개의 프로세스들이 존재하고 개별 프로세스들은 개별 소켓이 있을 것이다. 해당 소켓들이 다른 머신과의 네트워크를 하기 위해선 하나의 통로를 거쳐야하는데 이 과정에서 멀티플렉싱이란 표현이 사용된다.


예를 들면 멀티플렉싱 같은 경우 여러 개의 인풋에 하나의 아웃풋이 있는 상태이고. 디멀티플렉싱은 하나의 인풋이 여러개의 아웃풋으로 나타나는 형태를 의미한다. 센더 측에서 여러 개의 프로세스가 각자의 소켓을 가지고 메세지를 보내게 된다면 TCP or UDP 를 통해서 이 과정에서 멀티플렉싱이 일어나고 리시버 측에서는 디멀티플렉싱이 일어난다.


트랜스포트 계층은 소켓 인터페이스를 직접적으로 다루는 계층이기 때문이다.


디멀티플렉싱을 살펴보면,

한 통로로 들어와서 패킷 받아내고 세그먼트 뽑아내는 것. 그 중에서 어느 특정 소켓으로 데이터를 보낼 것인가? 결정에 대한 문제. 이 과정에서 포트번호가 필요하다. 어떤 소켓으로 데이터를 보낼 것인지에 대해서. 이 과정에서 포트번호를 통해 판단하는 것이다. 세그먼트 데이터를 살펴보면 헤더 필드 일부에 source port 와 dest port 가 있다. (센더와 리시버 측에서의 각각의 포트번호)


UDP의 디멀티플렉싱



단순히 포트 번호만 보고 UDP는 디멀티플렉싱이 이루어진다. UDP에서의 디멀티플렉싱은 dest port 만 보고 이루어진다.


TCP의 디멀티플렉싱

  • source IP Address

  • source Port Number

  • dest IP Address

  • dest Port Number

전체 4개를 다 파악해서 디멀티플렉싱이 이루어진다. 하나라도 값이 다르면 다른 소켓이다. 왜 UDP 디멀티플렉싱과 차이가 있는가? TCP 소켓은 1:1 대응이다. 그리고 사용자의 요청이 있을 때마다 스레드를 만들어서 소켓을 처리한다. 따라서 해당 스레드가 소켓을 처리한다. 

UDP
멀티플렉싱과 디멀티플렉싱을 제공하며 그 이외에는 제공하지 않는다. 가볍다. Connection 을 맺기위한 여러 절차를 거치지 않는다. 

UDP 헤더 : Segment Header



  • source port #
  • dest port #
  • length
  • checksum
프로토콜의 헤더는 해당 목적지에 실질적으로 필요한 부분이 아니다. 데이터가 필요할뿐. 크기가 클수록 오버헤드의 부담이 커지기 때문에 프로토콜을 디자인할 때 헤더를 줄이려는 노력을 많이한다. 달리 말해 헤더에 어떤 필드들이 들어가있는지 이해한다면 해당 프로토콜이 어떤 동작을 하는지 간접적인 이해가 가능하다.

checksum 
데이터 전송중에 데이터 에러의 발생여부를 판단할 수 있도록 해준다. 따라서 목적지, 사용자는 에러가 담긴 메세지를 받지 않는다. (Error Detection)

TCP 기능
Reliable data transfer 의 동작원리
- TCP 소켓 열기, 해당 소켓을 통해 메세지 전달 
- application layer 는 Reliable channel 이 형성되어 있다.
- transport layer 는 unReliable channel 이 형성되어 있다. (전송에러, 패킷유실)


전송에러, 패킷유실을 극복하면 사용자에게 신뢰성 있는 통신을 보여줄 수 있다.

송신자가 패킷을 하나 보내고, 수신자가 제대로 받았는지 확인한다.

패킷에 대한 에러가 있을 때 어느 메커니즘(mechanism) 이 필요하다.
  • Error detection
    • Add checksum bits
    • checksum 을 통해 통과여부를 확인. 통과되면 정상, 통과되지 않으면 에러
  • Feedback
    • Acknowledgement(ACKs)
    • Negative acknowledgement(NAKs)
    • 피드백에 따라서 재전송할지에 대해서 결정
만약에 센더가 리시버 측으로 피드백을 받았는데 피드백 자체에서 에러가 발생한 경우는 어떻게 할 것인가? 센더는 어떠한 행동을 취할 것인지?
sequence Number 를 이용
모든 패킷마다 시퀀스 번호가 부여되어 있다.
시퀀스 번호를 단순하게 부여하는게 정답은 아니다. 왜냐하면 세그먼트 헤더 필드를 고려해야 하기 때문이다. 최소한으로 구성해야 하기 때문이다.

시퀀스 번호는 0과 1만 가지고 있으면 된다.1 bit 로 시퀀스 번호를 쓰면 충분하다. (0과 1) 그리고 해당 시퀀스 번호를 쓰게 되면 ACKs 와 NAKs를 동시에 쓰지 않고 ACKs만 쓰면 된다. 해당 ACKs에 시퀀스 번호를 부여해서 해당 리시브측이 금방 보낸 데이터를 제대로 받았는지 확인이 가능하기 때문이다.

[ 참고동영상 ]


정리 )

  • Transport Layer 란
  • Transport Layer 에서 만들어지는 데이터의 단위는
  • TCP 특징 (간략히)
  • Reliable / In - Order Delivery 가 무엇인가
  • Flow control & Congestion control 은 무엇인가
  • 멀티플렉싱 / 디멀티플렉싱은 무엇인가
  • 포트번호는 Transport Layer 에서 왜 어떻게 작용하는가
  • checksum 이란
  • 패킷에 대한 에러가 있는 경우 이를 확인하기 위한 메커니즘은 무엇인가
  • Sequen Number 란


Posted by doubler
,