Computer Network

[Lecture 4-2] Transport Layer (1) : Overview & UDP

Sara.H 2020. 6. 29. 17:00

네트워크 통신이 이루어지는 계층 구조 

1. Application Layer

Socket 을 통해서 Message 를 전송 

2. Transport Layer 

Segment 의 Data 에 Message 를 담고 전송에 필요한 부가정보를 Header 에 담음 

3. Network Layer 

Packet 의 Data 에 Segment 를 담고 전송에 필요한 부가정보를 Header 에 담음 

4. Link Layer 

Frame 의 Data 에 Packet 을 담고 전송에 필요한 부가정보를 Header 에 담음 

 

각 계층 구조별로 자신과 같은 계층 상의 상대방만 보일 뿐, 다른 계층에 대해서는 신경쓰지 않는다. 

레이어별로 전송 단위가 달라지는 것을 눈여겨 볼 것. 

 

Transport Layer 의 역할 

전송 계층은 서로 다른 호스트에서 돌아가는 애플리케이션 프로세스들 사이에 논리적인 소통 고리를 마련해준다. 보내는 쪽 에서는 애플리케이션의 메시지를 세그먼트로 쪼개고 네트워크 레이어로 보낸다. 받는 쪽에서는 네트워크 레이어로부터 받은 세그먼트를 다시 메시지로 재구성하고, 애플리케이션 레이어로 전달한다. 

인터넷 통신을 할 때는 TCP와 UDP 프로토콜을 사용한다. 

 

Transport Layer vs. Network Layer 

네트워크 계층은 호스트들간의 논리적인 연결을 맺어주는 반면, 전송 계층은 프로세스들간의 논리적인 연결을 맺어준다. 네트워크 계층의 서비스에 의존적이다. 

 

비유 

"앤의 집에 있는 12명의 아이들이 빌의 집에 있는 12명의 아이들에게 편지를 쓴다."

* 집 : host 

* 아이들 : Processes 

* 봉투 안의 편지 : App messages 

* 아이들의 편지를 모아서 보내는 앤과 아이들의 편지를 나눠주는 빌 : transport protocol 

* 우편서비스 : network layer protocol

 

Multiplexing / Demultiplexing 

TCP와 UDP가 공통적으로 제공하는 기능이다. 보내는 쪽 에서는 여러개의 소켓에서 전달될 데이터들을 모으고, transport header 를 추가한다 (멀티플렉싱). 받는 쪽에서는 header 를 이용해서 전달받은 segment 들을 알맞은 socket 으로 전달한다 (디멀티플렉싱). 

 

Segment 는 위와 같이 도착주소와 보내는 주소가 헤더에 적혀있다. 호스트는 이 헤더를 이용해서 알맞은 소켓으로 세그먼트를 전달한다. 

 

UDP 의 demux 

demultiplexing in UDP

호스트가 UDP 세그먼트를 전달받으면 우선 세그먼트의 destination port number 를 확인한다. 그리고 해당 세그먼트를 일치하는 포트 넘버를 가진 소켓으로 전달한다. 도착지만 확인하므로 서로 다른 source destination number 를 가진 세그먼트로 동일한 소켓으로 전달될 것이다. 

 

 

TCP의 demux 

TCP의 경우 소켓과 소켓이 소통하려면 서로 1:1 매핑이 되어있어야 한다. 그리고 매핑된 소켓은 다른 소켓과 동시에 소통할 수 없다. 도착지의 포트 번호가 80으로 같더라도 세그먼트가 전달될 때 전송지의 IP와 포트 번호, 그리고 도착지의 IP와 포트번호 - 이렇게 4개의 값들로 새로운 소켓 아이디를 만들기 때문에 서버에서는 하나의 고유한 소켓이 클라이언트측의 소켓과 소통하게 된다. 

서버측에서 accept() 함수로 클라이언트측의 TCP connection 을 기다리고 있다가 연결이 형성되면 return 하는데, 이 때 반환하는 값이 위의 4개의 값들을 이용해 만든 고유한 socket 아이디 이다.

 

UDP 세그먼트 헤더 

각 계층별로 전송되는 데이터의 헤더 필드에 대해서 정확히 이해할 필요가 있다. UDP의 세그먼트 헤더에는 딱 4개의 필드 뿐이다. UDP가 하는 일이 그렇게 많지 않다는 것을 알 수 있다. Source port 번호와 Destination port 번호는 멀티플렉싱, 디멀티플렉싱 과정에서 필요하다. 

Checksum 은 전달된 세그먼트에 에러가 있는지 없는지 확인하기 위해 사용되는 숫자이다. 보내는 쪽에서는 segment 의 내용물의 합을 체크섬 필드에 넣는다. 받는 쪽에서는 받은 세그먼트의 체크섬을 계산하고, 계산된 체크섬과 세그먼트 필드의 체크섬이 일치하는지 확인한다. 일치하면 에러가 없는 것이고, 일치하지 않는다면 에러가 발생하지 않았다는 것이다. (이 부분에 대해서는 나중에 더 정확히 다룬다.)

 

* 참고 : 한양대학교 이석복 교수님 KOCW 강의